CUDA编程指南指出:
__syncthreads()在条件代码中是允许的,但只有当条件在整个线程块中的评估是相同的时才可以,否则代码执行可能会挂起或产生意外的副作用。
因此,如果我需要通过一个块进行条件分支来同步线程,其中一些线程可能会或可能不会采取包括__syncthreads()调用的分支,这是否意味着它无法工作?
我想象中可能会有各种情况需要这样做;例如,如果您有一个二进制掩码,并且需要有条件地对像素应用某个操作。比如,如果(mask(x, y) != 0),则执行包含__syncthreads()的代码,否则不执行任何操作。该如何实现?
__syncthreads()在条件代码中是允许的,但只有当条件在整个线程块中的评估是相同的时才可以,否则代码执行可能会挂起或产生意外的副作用。
因此,如果我需要通过一个块进行条件分支来同步线程,其中一些线程可能会或可能不会采取包括__syncthreads()调用的分支,这是否意味着它无法工作?
我想象中可能会有各种情况需要这样做;例如,如果您有一个二进制掩码,并且需要有条件地对像素应用某个操作。比如,如果(mask(x, y) != 0),则执行包含__syncthreads()的代码,否则不执行任何操作。该如何实现?