幾乎在任何地方,我讀過關於使用CUDA編程的內容,都提到重要性,即變形中的所有線程都執行相同的操作。
在我的代碼中,我有一種情況,我無法避免某種情況。它看起來像這樣:CUDA:同步線程
// some math code, calculating d1, d2
if (d1 < 0.5)
{
buffer[x1] += 1; // buffer is in the global memory
}
if (d2 < 0.5)
{
buffer[x2] += 1;
}
// some more math code.
一些線程可能會進入一個規定的條件,有些人可能會進入到這兩個和其他可能無法進入任一。
現在爲了讓所有線程在條件結束後再次回到「做同樣的事情」,我應該在使用__syncthreads()
之後同步它們嗎?或者這是以某種方式自動發生的?
可以兩個線程是而不是做同樣的事情,由於其中一個是後面的一個操作,從而毀滅了每個人?還是有一些幕後的努力讓他們在分支之後再次做同樣的事情?
讓我看看我是否明白。所以如果條件分支做相同數量的工作,這應該不會影響性能,因爲每個線程都不會空閒太久。我對嗎? – 2011-03-31 22:51:03
@omegatai我認識到你的評論是舊的,但其他人可能想知道,所以在這裏:一個warp一次只能處理一條指令,所以如果warp中的某些線程做了一件事,其餘的線程做其他事情,總時間是這兩組線程的總時間量。在經紗內沒有時間重疊。性能受到影響。 – 2013-10-15 21:11:31