Безопасно ли использовать __ syncthreads ()
в блоке, где я намеренно отбросил потоки, используя return
?
В документации указано, что __ syncthreads ()
должен вызываться каждым потоком в блоке , иначе это приведет к тупиковой ситуации, но на практике я никогда не сталкивался такое поведение.
Пример кода:
__global__ void kernel(float* data, size_t size) {
// Drop excess threads if user put too many in kernel call.
// After the return, there are `size` active threads.
if (threadIdx.x >= size) {
return;
}
// ... do some work ...
__syncthreads(); // Is this safe?
// For the rest of the kernel, we need to drop one excess thread
// After the return, there are `size - 1` active threads
if (threadIdx.x + 1 == size) {
return;
}
// ... do more work ...
__syncthreads(); // Is this safe?
}