和许多多线程并行问题一样,CUDA也存在互斥访问的问题,即当一个线程改变变量X,而另外一个线程在读取变量X的值,执行原子操作类似于有一个自旋锁,只有等X的变量在改变完成之后,才能执行读操作,这样可以保证每一次读取的都是最新的值. 在kernel 程序中,做统计累加,都需要使用原子操作:atomicAdd(); 原子操作很明显的会影响程序性能,所以可以的话,尽可能避免原子操作. CUDA原子操作API: C.1.1 atomicAdd()int atomicAdd(int* address, i…