我知道什麼是__syncthreads()
,我願做一點點不同的事情:CUDA中的線程可能「輕鬆」同步線程嗎?
__global__ void kernel()
{
__shared__ array[1024];
some other declarations
load some data into array
label1:
do some other independent calculations
label2:
use data from array
...
}
所以我可以做__syncthreads()
;在label2。它具有語義,只有當所有線程都達到label2
時,線程才能超出label2
。
我真正需要的是確保當所有其他線程都達到label1
時線程可以超出label2
。這種障礙較弱,我希望這會阻礙我的計劃。有沒有像這樣的輕鬆屏障?
是什麼讓你確定所有的線程在第一次到達'label2'時都會通過'label1'?你如何定義'第一線程'? – pSoLT
我大致瞭解GPU如何工作,但當然不能完全確定。 GPU採用線程0-31,爲它們執行一個操作。如果操作需要多個週期,GPU會爲32-63個線程執行一次操作...因此,內存讀取後的附加計算越多 - 插入其他線程執行所需的週期就越多。 內存讀取,如果它們在內核的開始處,將開始,我想,它們彼此非常接近並且在多次循環之後結束,但也一起結束。 –
用'__shared__'內存原子來構造一個「條件」__syncthreads()'操作可能是可能的。如果沒有完整的示例或測試用例,我不清楚它是否會比正常發出'__syncthreads()'更有好處。 [目前,__syncthreads()暴露在CUDA C/C++級別](http://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html#synchronization-functions),沒有內置的條件功能沿着你所要求的內容。 –