从而错过了刚刚SM 10上(的线程)写入的新值,而此时, 有了volatile关键字, 编译器会在遭遇到后, 不仅仅不使用刚才(1)点所说的情况, 而会重新发出一次访存,同时还会控制访存指令的cache...普通的访存指令和原子操作指令之间是没有完成次序性的.这个代码通过在两个指令之间, 插入了一句threadfence函数,导致了之前的所有将要结束的kernel, 只有暂停了足够时间, 让自己写入的部分的和已经成功的被生效到了全局可见的时候...他说的比较委婉.此外, 需要说明的是, 本主题中, 我同事还同时说明了,存在方法3, 也同样需要一步kernel启动即可.就是将原本方法2的第二次启动, 或者方法1的后半部分,直接改写成一次原子累加即可...在目前版本的手册说明上, 它还同时具有之前地__threadfence_block的效果(例如硬件的访存写入生效性控制, 或者编译器类似在fence前后的语句顺序调整安排).因此在常见的情况下, block....主要因为这是并行的, 所以很多东西你需要考虑的, 特别说同时进行数据地生成和消费.所以这是为何推荐之前地2步版本的规约求和的原因.它通过2次顺序执行的kernel启动, 每次都不会同时消费本次生成的数据