【发布时间】:2020-10-31 15:11:45
【问题描述】:
我正在阅读有关 Cuda 中的内存模型的内容。特别是在将数据从全局复制到共享内存时,我对shared_mem_data[i] = global_mem_data[i] 的理解是它是以合并的原子 方式完成的,即warp 中的每个线程都以一个不可分割的方式读取global_data[i]交易。对吗?
【问题讨论】:
-
cuda 没有说明线程执行的顺序。因此,您不应该假设一个线程读取的内容和另一个线程读取的内容之间存在任何顺序,即使它们在同一个线程中。关于读取的单个线程的原子性,例如,正确对齐的多字节数量,这些字节应该是连贯的,即使它们是由另一个线程写入的。请参阅here,其中包含指向支持此声明的硬件内存模型文档中特定点的链接
-
在general中,CUDA 没有声明线程执行的顺序。可能有一些例外,例如在指定同步掩码的 warp 集体内在函数的情况下。而且我还没有尝试从我在这些 cmets 中链接的其他答案中捕捉到每一个想法。请阅读它以获得更完整的描述。
标签: cuda