请教一个OpenMP并行化嵌套循环的问题

u010105275 2013-04-10 04:22:40
加精
在我的程序中,我试图对以下一个循环用OpenMP并行化

double pottemp,pot2body;
pot2body=0.0;
pottemp=0.0;

#pragma omp parallel for reduction(+:pot2body) private(pottemp) schedule(dynamic)
for(int i=0;i<nc2;i++)
{
pottemp=ener2body[i]->calculatePot(ener2body[i]->m_mols);
pot2body+=pottemp;
}
其中函数'calculatePot'中一个很重要的循环也被用OpenMP并行化了
CEnergymulti::calculatePot(vector<CMolecule*> m_mols)
{
...

#pragma omp parallel for reduction(+:dev) schedule(dynamic)
for (int i = 0; i < i_max; i++)
{
...
}
}
所以实际上在我的并行化程序中出现了对嵌套循环的两次并行化。当我试图把最外面一层循环的并行化去掉后(仅保留calculatePot函数里的并行化),发现运行程序的速度反而比不并行快很多(8核测试)。也就是说我先前并行化的效率很低,所以我想问一下用什么方法能使我的并行化效率提高呢(假如仍然使用OpenMP,我不太想使用MPI)?网上有人建议对于嵌套循环,在最外层循环的#pragma omp parallel for后面加上collapse,但网上又说collapse仅限于嵌套的两个循环之间没有其他语句的情况。所以像我这种嵌套循环,是否还有其他方法提高并行效率呢?
...全文
7187 38 打赏 收藏 转发到动态 举报
写回复
用AI写文章
38 条回复
切换为时间正序
请发表友善的回复…
发表回复
恋喵大鲤鱼 2015-04-27
  • 打赏
  • 举报
回复
使用inline函数,应该尽量的减少parallel for,它也需要时间消耗
青竹居士 2014-12-27
  • 打赏
  • 举报
回复
dani2003 2013-04-15
  • 打赏
  • 举报
回复
好东西,收藏
u010290421 2013-04-15
  • 打赏
  • 举报
回复
学习一下,希望有帮助
副组长 2013-04-15
  • 打赏
  • 举报
回复
我的经验是只留一层就已经达到了目的。把最外面一层循环的并行化去掉,再增加线程也不会有提高了。缺省情况下8核就是8个线程,开足了就够了。
u010311086 2013-04-15
  • 打赏
  • 举报
回复
赞赞赞,严以律己、宽以待人
u010311086 2013-04-15
  • 打赏
  • 举报
回复
赞赞赞,严以律己、宽以待人赞赞赞,严以律己、宽以待人
u010304307 2013-04-15
  • 打赏
  • 举报
回复
du789ming 2013-04-14
  • 打赏
  • 举报
回复
不错不错,支持一下
u010296883 2013-04-14
  • 打赏
  • 举报
回复
好东西 和大家一起分享
u010296883 2013-04-14
  • 打赏
  • 举报
回复
很好好 。。。。。。
xingyu1815 2013-04-12
  • 打赏
  • 举报
回复
112232 2013-04-12
  • 打赏
  • 举报
回复
好东西啊,顶一个
u010268145 2013-04-12
  • 打赏
  • 举报
回复
好东西 和大家一起分享
u010252239 2013-04-11
  • 打赏
  • 举报
回复
不错不错,支持一下
wtj009gg 2013-04-11
  • 打赏
  • 举报
回复
BUZIDAOOO
MagiSu 2013-04-11
  • 打赏
  • 举报
回复
我不太明白 为什么并行一圈之后你还要再并行一圈呢?
u010260659 2013-04-11
  • 打赏
  • 举报
回复
00000000000000000000000
kyf8121 2013-04-11
  • 打赏
  • 举报
回复
得学习一下,收藏一下吧
u010259185 2013-04-11
  • 打赏
  • 举报
回复
值得学习一下,收藏一下吧
加载更多回复(8)

566

社区成员

发帖
与我相关
我的任务
社区描述
英特尔® 边缘计算,聚焦于边缘计算、AI、IoT等领域,为开发者提供丰富的开发资源、创新技术、解决方案与行业活动。
社区管理员
  • 英特尔技术社区
  • shere_lin
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧