2012-07-13 50 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

相關問題