NVIDIA GPU 的计算功能集:
NVIDIA 将 GPU 支持的各种功能统称为计算功能集
nvcc -arch=sm_11
//告诉编译器需要1.1版本或者更高
nvcc -arch=sm_12
//告诉编译器需要1.2版本或者更高
原子操作简介:
在执行过程中不能分解为更小的部分,将满足这种条件限制的操作称为原子操作,当有数千个线程在内存访问上发生竞争时,这些操作可以保证在内存上实现安全的操作
对于 读取-修改-写入 三个操作,我们需要通过某种方式一次性的执行完,并且在执行过程中不会被其他线程中断,这些操作就是原子操作
计算直方图:
#define SIZE (100*1024*1024)
int main(void){
unsigned char *buffer = (unsigned char*)big_random_block(SIZE);
unsigned int histo[256];
for(int i=0;i<256;i++)
histo[i]=0;
for(itn i=0;i<SIZE;i++)
histo[buffer[i]]++;
在 gpu 上计算时,可以由不同的线程来读取不同的部分输入数据,但多个线程可能同时对输出直方图的同一个元素进行递增,这种情况下就需要使用原子操作