2012-07-13 41 views
0

我有一个C平行的for循环,其包括像OpenMP的:完整的第一次迭代第一

b[i] = b[0]; 

所以我需要在开始任何其他迭代之前,完成第一次迭代的线。有没有强制执行此类行为的条款?

+0

使999个内核等待1个内核的gpu核心完成速度比计算在CPU我认为 – 2012-07-13 12:50:06

+0

慢,因为你正在浪费999 *(gpu的功率)为第一个周期只有1pu的功率。 – 2012-07-13 12:51:05

+0

@tuğrul那么,什么?有时候这是不可避免的。此外,正常的串行代码也是如此。但这也是无关紧要的,OpenMP不适用于GPU。 – 2012-07-13 12:51:44

回答

5

只需将第一次迭代从循环中拉出并在索引1处启动循环即可。这是迄今为止最简单且最便宜的方法。其他方式涉及等待,这是低效的。

+0

是的,这就是我所做的,但它感觉有点“脏”。我希望OpenMP能为此提供一个条款 – Patrik 2012-07-13 13:08:50

+0

+1几乎是我能想到的唯一解决方案。 – 2012-07-13 19:55:06

相关问题