Могу ли я использовать __syncthreads () после отбрасывания потоков?

Безопасно ли использовать __ 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?
}
35
задан user703016 27 May 2015 в 11:45
поделиться