我想用__syncthreads()的遞歸像CUDA __syncthreads()和遞歸
__device__ void foo(int k) {
if (some_condition) {
for (int i=0;i<8;i++) {
foo(i+k); // foo might take longer with some inputs
__syncthreads();
}
}
}
請問這個__syncthreads()現在申請?我知道它只適用於一個區塊。據我瞭解,這適用於所有本地線程獨立的遞歸深度?但是如果我想確保這個__syncthreads()到某個遞歸深度呢?這甚至有可能嗎?我可以檢查遞歸深度,但我相信這也不起作用。
有沒有可能的選擇?
我見過的,有用於CUDA設備> = 2.0
int __syncthreads_count(int predicate);
int __syncthreads_and(int predicate);
int __syncthreads_or(int predicate);
3個syncthread擴展版,但我不認爲他們會幫助,因爲他們看起來像一個原子計數器。
我沒有確切的答案,因爲我自己從來沒有這樣做過,但只是爲了檢查您是否知道,您放入代碼中的some_condition必須對同一個塊中的所有線程計算相同的值,或者它會陷入僵局。 – jmsu
是的,這也是我所害怕的。 – Pascal
請你澄清你的問題嗎?我真的不明白你在這裏問什麼。 – Tom