【发布时间】:2012-02-10 20:01:17
【问题描述】:
我试图弄清楚如何在 OpenMP 中并行化一段代码,其中 for 循环的内部独立于它的其余部分。
该项目基本上是在处理粒子系统,但我认为这与代码的并行化无关。 for循环以一种方式划分线程,使得粒子没有以有效的方式缓存在每个核心中,这是否是一个缓存问题?
编辑:正如下面的答案所述,我想知道为什么我没有得到加速。
#pragma omp parallel for
for (unsigned i = 0; i < psize-n_dead; ++i)
{
s->particles[i].pos = s->particles[i].pos + dt * s->particles[i].vel;
s->particles[i].vel = (1 - dt*.1) * s->particles[i].vel + dt*s->force;
// printf("%d", omp_get_thread_num());
}
【问题讨论】:
-
它随着时间的推移而增长,但它在 1000s 的数量级上。所以说在最简单的状态下是 4000,最大可能达到 200000。
标签: c parallel-processing openmp