首页 > 电脑常识 > 区块链

CUDA编程记录

admin 区块链 2021-04-26 15:59:30 多线程   并发编程  
后台-系统设置-扩展变量-手机广告位-内容正文底部

CUDA的硬件架构

CUDA core:最基本的处理单元,在AMD被称为streaming processor。最后具体的指令和任务都是在CUDA core上处理的。GPU进行并行计算,也就是很多个CUDA core同时做处理。

SM:多个CUDA core加上其他的一些资源组成一个streaming multiprocessor。也叫GPU大核,其他资源如:warp scheduler,register,shared memory等。register和shared memory是SM的稀缺资源。CUDA将这些资源分配给所有驻留在SM中的threads。因此,这些有限的资源就使每个SM中active warps有非常严格的限制,也就限制了并行能力
可以使用cudaGetDeviceProperties查看SM和CUDA core的个数
我的显卡是GTX950m,有5个Mutiprocessors(SM,也称GPU大核),每个SM有128个CUDA core(SP),总计5*128=640个CUDA core。
在这里插入图片描述

CUDA编程模型

CUDA的编程模型包括以下几个概念:
thread:一个CUDA的并行程序会被以许多个threads来执行。
block:多个threads组成一个block,同一个block中的threads可以同步,也可以通过shared memory通信。
grid:多个blocks构成grid。
warp:每32个线程组成一个warp,warp是GPU执行程序时的调度单位,同在一个warp的线程,以不同数据资源执行相同的指令,这就是所谓 SIMT。

每个块的线程数是有限制的,因为一个块的所有线程都驻留在同一个处理器核心上,并且必须共享该核心的有限内存资源。
我的显卡允许每个线程块中最多1024个线程,每个SM中最多2048个线程。
在这里插入图片描述

There is a limit to the number of threads per block, since all threads
of a block are expected to reside on the same processor core and must
share the limited memory resources of that core. On current GPUs, a
thread block may contain up to 1024 threads.

联系起来看

GPU中每个SM都设计成支持数以百计的线程并行执行,并且每个GPU都包含了多个SM,所以GPU支持成百上千的线程并行执行。
当一个kernel启动后,thread会被分配到这些SM中执行。大量的thread可能会被分配到不同的SM,同一个block中的threads必然在同一个SM中并行(SIMT)执行。每个thread拥有它自己的程序计数器和状态寄存器,并且用该线程自己的数据执行指令,这就是所谓的Single Instruction Multiple Thread。
  一个CUDA core可以执行一个thread,但是实际上并不是所有的thread能够在同一时刻执行。Nvidia把32个threads组成一个warp,warp是调度和运行的基本单元。warp中所有threads并行的执行相同的指令。一个warp需要占用一个SM运行,多个warps需要轮流进入SM。由SM的硬件warp scheduler负责调度。因此,一个GPU上resident thread最多只有 SM*warp个。

文章来源:https://blog.csdn.net/xxxxxzz123/article/details/116082081

后台-系统设置-扩展变量-手机广告位-内容正文底部
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。
本文地址:https://jcdi.cn/diannaochangshi/qukuailian/780.html

留言与评论(共有 0 条评论)
   
验证码:
后台-系统设置-扩展变量-手机广告位-评论底部广告位

教程弟

https://www.jcdi.cn/

统计代码 | 京ICP1234567-2号

Powered By 教程弟 教程弟

使用手机软件扫描微信二维码