cuda问题

大学生一枚,刚接触cuda编程,想学习OnGPU2D<<<grid,block>>>(d_MatA,d_MatB,d_MatC);这里面的两个参数怎么规划才能让程序高效的... 大学生一枚,刚接触cuda编程,想学习
OnGPU2D <<< grid, block >>>(d_MatA, d_MatB, d_MatC);
这里面的两个参数怎么规划才能让程序高效的运行
展开
 我来答
泷皖莲6
2016-12-09 · TA获得超过622个赞
知道小有建树答主
回答量:304
采纳率:0%
帮助的人:315万
展开全部

这个就需要根据实际情况而定了,有以下几个基本原则:

  1. block参数指的其实是一个block里面有几个thread,这个数目一般都要是2的幂,最常用的是64,128,256,最大值是1024,但是很少用到512以上,因为考虑到每个thread本身寄存器数目的限制和每个block的共享内存(shared memory)限制,太大的block会使GPU占用率(occupancy)下降

  2. grid参数指的是一个grid中部署多少个block。这个参数一般是根据你如何划分block来确定的。例如,你要处理一个5000 x 5000的矩阵,你每个block设置了16 x 16=256个thread,那么满足这个设置的最少的grid中的block的数量可以这么计算: grid((5000+16-1)/16, (5000+16-1)/16),其实也就是一个ceil运算,一共grid一共需要上述所说的这么的blocks才能完成运算。当然最后一个block可能会有没有用上的thread,因为5000不能整除16。这个就需要你在kernel里面有一个if语句来控制一下,也就是(if (x<5000 && y<5000)其中x、y分别为x、y方向上的索引

  3. 你要知道一些基本原则,例如每个block最大的shared memory的大小可以到64K,每个thread自身的寄存器最多可以到63个,如果超过这些限制,GPU在一个grid中就办法部署整个计算,会用到第二个甚至第三个。这样其实有很大一部分GPU的运算能力是被浪费掉了。


推荐你看一本书:Programming Massively Parallel Processors,网上有电子版的,这个入门很好!谢谢

来自:求助得到的回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式