我在并行处理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,因此没有太大的数字。我正在通过更新成员变量来更新 vector Planet::planets中的对象。
“dt”是一个永远不变的值。
如果没有openMP,则整个循环大约需要0.00002秒,而激活openMP则需要0.001至0.01秒。我尝试了几种方法来加快并行化版本的速度,但是没有任何帮助。

谢谢!

最佳答案

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

关于c++ - 与串行相比,openMP并行化for循环速度更慢,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27923207/

10-12 16:46