如果符合以下条件,CUDA中对全局内存的一般读取和写入是原子的:
至少在开普勒和费米上一般4字节读取和写入全局存储器原子在Warp级别或8/16字节指令原子半/四分之一Warp级别如果:
如果关于经线水平原子性的任何假设都是正确的,那么是否有任何方法可以利用这些知识而不会影响未来计算能力的适应性?
答案 0 :(得分:3)
读取和写入通常发生在缓存方面。在将事务发布到全局内存时,除非使用atomic
指令,否则无法保证CUDA编程或内存模型中的原子性。
例如,假设线程块中的线程在Kepler上更新L2中的4字节数量。现在,在另一个warp,threadblock,或内核中的另一个线程可以在该高速缓存行被逐出全局内存之前更新L2中的这4个字节中的一个。当缓存行被驱逐到全局内存时,它可能不代表原始线程甚至第二个线程所写的内容(例如,如果第三个写入来了......)。
请记住,L2是回写式缓存,无法禁用,并且不会被全局读取和写入旁路,但atomic
指令除外。