GPU中的SM和warp的关系

介绍

我们在cpu上做好了准备工作,然后将指令发送给GPU, 在这里我们看到grid为10,block为128,也就说有10个block,每一block有128个thread,
GPU中的SM和warp的关系_第1张图片
如何分配这些block?
原则

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

你可能感兴趣的:(CUDA编程,c++,适配器模式,开发语言)