关于SM和Block的思考,求解

super2012cz 2014-11-18 10:11:58
最近学习CUDA,写了个小程序,由于程序需要,设置Block的尺寸为:5*5,然后Grid尺寸:4*4。运行之。然后第二次设置Grid尺寸为:8*8,第三次为16*16,第四次为32*32,结果16*16的是最快的(Geforce GT 755M,2个SM)。然后到Tesla(30SM)上去运行相同的程序,结果在相同Grid尺寸情况下,Tesla上还没有GT的块!按理说SM越多程序会越快,但是结果却让我大跌眼镜,不知道是我的程序的Kernel部分没有设计好还是怎么的(结果和单机对比后是正确的,可能多半是Kernel设计有问题)。
查看了一些资料,例如sparrow986831的“CUDA:grid和block维度设计”,第一句话就是“按照CUDA的执行模型,grid中的各个block会被分配到GPU的各个SM中执行”。那么按照这个意思,就算block个数很多,但是它会分配到各个SM上,SM越多程序所花时间越短。
但是在《CUDA中如何选择Block的尺寸》中,如果block尺寸为8*8,一个SM最多2048个线程,那么block个数为2048/64=32,但是每个SM只能容纳16个block,所以每个SM上的线程数是16*64=1024。所以讲block尺寸设置为16*16的话,只需8个block,小于SM要求的16个。
感觉这些东西没懂,有点混乱,求解!
...全文
559 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
super2012cz 2014-11-21
  • 打赏
  • 举报
回复
恩,好的,CUDA程序设计就是要查看硬件信息。
YCMyTot 2014-11-19
  • 打赏
  • 举报
回复
首先了解一下你的显卡的信息, 每个SM中 能够容纳的 Block 数, 每个SM中 最多能够容纳的 线程数,通过一 个比较 : 你的 block 中分配的数* Blcok 数 <= SM 中能够容纳的 thread 数 不同的分块,会导致 SM的利用率的改变,SM 的利用率 越高越好!
super2012cz 2014-11-19
  • 打赏
  • 举报
回复
这倒是,block是CUDA按策略分配给SM的,太多的话调度也是个问题。
adagio_chen 2014-11-19
  • 打赏
  • 举报
回复
block的尺寸太大的话,会造成每个block占用的资源过多,以至于能同时运行的block会变少。

581

社区成员

发帖
与我相关
我的任务
社区描述
CUDA™是一种由NVIDIA推出的通用并行计算架构,该架构使GPU能够解决复杂的计算问题。 它包含了CUDA指令集架构(ISA)以及GPU内部的并行计算引擎。
社区管理员
  • CUDA编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧