Cuda编程减少,无需_syncthreads()即可完全展开
最近,我读了《专业CUDA C编程》一书,我发现下面的代码部分我并不完全理解Cuda编程减少,无需_syncthreads()即可完全展开,cuda,Cuda,最近,我读了《专业CUDA C编程》一书,我发现下面的代码部分我并不完全理解 我对编码的最后一部分感到困惑,它处理的是展开的扭曲。我知道这部分编码试图减少循环消耗和调用\u syncthreads()的次数。但是,我不明白如何才能确保添加操作的顺序。例如,我认为所有线程都应该在vsmem[tid]=vsmem[tid+16]之后执行vsmem[tid]=vsmem[tid+32]。我不知道如何确保这一点。似乎没有同步读取。不需要\u syncthreads()的原因是处理器将有32个并发线程。
我对编码的最后一部分感到困惑,它处理的是展开的扭曲。我知道这部分编码试图减少循环消耗和调用
\u syncthreads()
的次数。但是,我不明白如何才能确保添加操作的顺序。例如,我认为所有线程都应该在vsmem[tid]=vsmem[tid+16]
之后执行vsmem[tid]=vsmem[tid+32]
。我不知道如何确保这一点。似乎没有同步读取。不需要\u syncthreads()
的原因是处理器将有32个并发线程。这些保证在GPU中同时执行,它们同时发生,因此无需“等待”或同步
(第21页)有更详尽的解释 但是你不应该依赖这种行为,因为它在将来可能会改变。使用活动组并同步它们应该不会导致对扭曲同步设备的操作