繁体   English   中英

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

[英]openMP parallelize for-loop slower compared to serial

我有问题并行化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秒。 我已经尝试了几种方法来更快地获得并行化版本,但没有任何帮助。

谢谢!

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM