cuda编程系列-内核调用(三)

1、内核调用介绍
使用ANSI C 和cuda扩展关键字编写的代码称为内核,该代码是运行在gpu上面,通过cpu代码通过内核调用的方式来启动。也就是说,内核调用即cpu代码启动gpu代码。内核调用通常会生成大量的块(Block)和线程(Thread)来在GPU上并行处理数据。内核代码类似普通的C函数,不同的是这段代码是由多个线程并行执行的。
2、内核调用语法介绍

kernel<<>>(parameters for kernel)
  • 第一个参数表示希望执行的块数
  • 第二个参数表示每个块具有的线程
  • 第三个参数可选,它指定内核使用的共享内存的大小

3、配置内核参数
为了在设备上并行执行启动多个线程,我们必须在内核调用中的配置参数,内核调用时在内核启动配置中编写的,它们指定了Grid中块的数量,和每个块中的线程数量。
我们可以并行启动很多块,每个块内又有很多线程。通常,每个块内有512或者1024个线程。一个块内的线程可以通过共享内存进行彼此通信。
假设要并行启动500个线程,你可以根据前面解释的内核调用语法进行修改:

//第一种方式,一个块里面包含了500个线程
kernel<<<1,500>>>(1,4,d_c)
//第二种方式,250个块每个块包含了两个线程
kernel<<<250,2>>>(1,4,d_c)
//注意:每个块的线程不能包括GPU所支持的最大限制

GPU的块和线程还支持多维的,可以更好的进行处理和可视化,举例三位网格块和三维线程块语法如下:

kernel<<>>()

语法介绍

//Nbx,Nby,Nbz分别表示x,y,z轴方向的块数
//Ntx,Nty,Ntz表示一个块沿x,y,z轴方向的线程数
//如果没有指定y和z维数,默认情况取1

4、自我检验
并行启动5000个线程,使用内核配置进行实现,设置三种实现,每个块最大使用512个线程?

你可能感兴趣的:(cuda编程)