kes*_*ari 0 parallel-processing synchronization cuda reduction
我正在 CUDA 中实现并行缩减。
内核等待__syncthreads所有线程完成对共享内存的 2 次读取,然后将总和写回共享内存。
我应该使用 a__threadfence_block来确保下一次迭代的所有线程都可以看到对共享内存的写入,还是__syncthreads按照NVIDIA 示例中给出的方式使用?
__syncthreads()也意味着内存栅栏功能。文档中对此进行了介绍:
等待,直到线程块中的所有线程都到达此点,并且这些线程在 __syncthreads() 之前进行的所有全局和共享内存访问对于块中的所有线程都是可见的。
__threadfence_block()所以在这种情况下,除了使用__syncthreads()
您不能用 threadfence 函数代替通常的通用并行缩减中的执行屏障。__syncthreads()除了内存防护功能之外,还需要执行屏障 ( )。一般情况下,一般需要等待所有线程都执行完一轮的归约,然后才能进行下一轮;__threadfence_block()当其他 warp 正在执行给定的一轮缩减时,它本身不会强制 warp 等待。
因此__syncthreads()通常是必需的,并且假设您已正确使用它,则__threadfence_block()通常不需要。
__syncthreads()暗示__threadfence_block()。
__threadfence_block()并不意味着__syncthreads()