与串行相比,openMP并行化for循环更慢

时间:2015-01-13 13:23:07

标签: c++ for-loop openmp

我遇到了并行化for循环的问题。我已经在这个论坛中阅读了很多主题,但没有一个帮助过。代码很简单,所以我真的不知道应该在哪里改变一些东西。

    #pragma omp parallel for
        for (unsigned int i = 0; i < num_bodies; ++i){
          Planet* planet = Planet::planets[i];
          planet->updateVelo(planet->getAccel(), dt);
          planet->updatePos(planet->getVelo(), dt);
          planet->resetAccel();
        }

“num_bodies”在开始时为200,在几次迭代中减少到133,因此没有真正的大数字。我通过更新成员变量更新向量Planet :: planets中的对象。 “dt”是一个永不改变的值。 如果没有openMP,整个循环需要大约0.00002秒,而openMP激活则需要0.001到0.01秒。我已经尝试了几种方法来更快地获得并行化版本,但没有任何帮助。

谢谢!

1 个答案:

答案 0 :(得分:3)

200是一个非常小的数字,设置多线程框架所需的额外时间可能比通过并行化作业节省的时间更长,尝试增加循环次数并确保你有使用了正确的编译器开关。 $ gcc -fopenmp