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

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

kernel<<<number of block,number of threads per block,size of shared memory>>>(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<<<dim(Nbx,Nby,Nbz),dim(Ntx,Nty,Ntz)>>>()

语法介绍

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

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

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值