Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cuda编程减少,无需_syncthreads()即可完全展开_Cuda - Fatal编程技术网

Cuda编程减少,无需_syncthreads()即可完全展开

Cuda编程减少,无需_syncthreads()即可完全展开,cuda,Cuda,最近,我读了《专业CUDA C编程》一书,我发现下面的代码部分我并不完全理解 我对编码的最后一部分感到困惑,它处理的是展开的扭曲。我知道这部分编码试图减少循环消耗和调用\u syncthreads()的次数。但是,我不明白如何才能确保添加操作的顺序。例如,我认为所有线程都应该在vsmem[tid]=vsmem[tid+16]之后执行vsmem[tid]=vsmem[tid+32]。我不知道如何确保这一点。似乎没有同步读取。不需要\u syncthreads()的原因是处理器将有32个并发线程。

最近,我读了《专业CUDA C编程》一书,我发现下面的代码部分我并不完全理解


我对编码的最后一部分感到困惑,它处理的是展开的扭曲。我知道这部分编码试图减少循环消耗和调用
\u syncthreads()
的次数。但是,我不明白如何才能确保添加操作的顺序。例如,我认为所有线程都应该在
vsmem[tid]=vsmem[tid+16]
之后执行
vsmem[tid]=vsmem[tid+32]
。我不知道如何确保这一点。似乎没有同步读取。

不需要
\u syncthreads()
的原因是处理器将有32个并发线程。这些保证在GPU中同时执行,它们同时发生,因此无需“等待”或同步


(第21页)有更详尽的解释

但是你不应该依赖这种行为,因为它在将来可能会改变。使用活动组并同步它们应该不会导致对扭曲同步设备的操作