我读到了一些关于Cuda中内存模型的内容。特别是,当将数据从全局内存复制到共享内存时,我对shared_mem_data[i] = global_mem_data[i]
的理解是,它是以联合原子的方式完成的,即warp中的每个线程在一个不可分割的事务中读取global_data[i]
。这是正确的吗?
tl;医生:没有
AFAIK不能保证在单个事务中读取所有值。事实上,GPU的内存总线甚至不能保证足够宽,以供单个事务检索全扭曲宽度的数据(1024位用于每个4字节的全扭曲读取(。从理论上讲,在读取过程中,从内存中的位置读取的某些值会发生变化。