在之前的几个程序里面, addWithCuda(int *c, const int *a, const int *b, unsigned int size);它在检查完设备正常与否,分配gpu缓存空间,传递数据之后有这么一个调用:addKernel<<<1, size>>>(dev_c, dev_a, dev_b);
启动核函数的调用过程,这里看到调用方式和C不太一样。<<<>>>表示运行时配置符号,里面1表示只分配一个线程组(又称线程块、Block),size表示每个线程组有size个线程(Thread)。本程序中size根据前面传递参数个数应该为5,所以运行的时候,核函数在5个GPU线程单元上分别运行了一次,总共运行了5次。这5个线程是如何知道自己“身份”的?是靠threadIdx这个内置变量,它是个dim3类型变量,接受<<<>>>中第二个参数,它包含x,y,z 3维坐标,而我们传入的参数只有一维,所以只有x值是有效的。通过核函数中int i = threadIdx.x;这一句,每个线程可以获得自身的id号,从而找到自己的任务去执行。
我是初学者参考很多文档啊,博客啊,书籍啊,Augusdi的博客特别好,对我帮助很大。