手册里说,原子操作是对位于全局或者共享存储里的一个32/64位字执行读取—修改—写入的操作
那请问内核中
如smem[threadIdx.x] = 0;
smem[threadIdx.x] += 2;
这种操作算不算原子操作,如果是那为什么不需要用到atomiAdd函数,原子函数atomic机制主要有何用处,谢谢
手册里说,原子操作是对位于全局或者共享存储里的一个32/64位字执行读取—修改—写入的操作
那请问内核中
如smem[threadIdx.x] = 0;
smem[threadIdx.x] += 2;
这种操作算不算原子操作,如果是那为什么不需要用到atomiAdd函数,原子函数atomic机制主要有何用处,谢谢
原子操作是发生在需要对同一变量进行互斥操作的时候。。
上面的threadIdx.x表示不同的线程,因而进行操作的数也是不同的,所以不是原子操作
像这种情况,比如块中的线程都要对某一变量int x进行写操作,那么为了得到正确的执行结果,必定
有写的先后顺序,这个时候就需要用到原子函数atomic,它能够保证在某一线程对x进行写操作的时候
其他线程不会对x进行写操作;只有当前线程结束之后别的线程才能进行写操作。
原子操作是发生在需要对同一变量进行互斥操作的时候。。
上面的threadIdx.x表示不同的线程,因而进行操作的数也是不同的,所以不是原子操作
像这种情况,比如块中的线程都要对某一变量int x进行写操作,那么为了得到正确的执行结果,必定
有写的先后顺序,这个时候就需要用到原子函数atomic,它能够保证在某一线程对x进行写操作的时候
其他线程不会对x进行写操作;只有当前线程结束之后别的线程才能进行写操作。