介绍
我们在cpu上做好了准备工作,然后将指令发送给GPU, 在这里我们看到grid为10,block为128,也就说有10个block,每一block有128个thread,
如何分配这些block?
原则
- 在GPU中一个block是不能拆分到两个SM中
- 一个SM中的block要满足SM的条件限制
SM有哪些限制?
简单有这些,当然还有其他的没有展示,这里数值都是我瞎编的,具体的可以去官网文档查看参数:
一个block需要哪些资源?
一个SM能给的资源如上,那么一个block需要哪些资源呢?简单如下:
分配结果如下:
可以看到还有4个block没地方搁,不用担心,中间的调度器会一直轮询所有SM的,只要有空闲的位置就会将还没安排的block安排上去。
block里面所有线程都是同时执行吗?
在SM中,block继续分割为warp.一个warp为32个thread,共用一套指令,至于为啥是32,这和硬件有关系,比如人家卡里就32个cuda core,那可不是一次就只能执行1个warp(32个线程)。
warp如何执行?
好了,到现在为止warp也切割好了,具体执行方式如下:
这个就不详细解释了,跟CPU调度类似,就是你io耽误了,其他的任务上,你IO结束了,你在继续占有计算资源。