Я хочу использовать __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 () до определенной глубины рекурсии? Это вообще возможно? Я мог бы проверить глубину рекурсии, но я верю, что это тоже не сработает.
Возможны ли альтернативы?
Я видел, что есть 3 расширения syncthread для устройства CUDA> = 2.0
int __syncthreads_count(int predicate);
int __syncthreads_and(int predicate);
int __syncthreads_or(int predicate);
Но я не думаю, что они помогут, поскольку кажутся атомными счетчиками.