CUDA学习(四)-整体结构

本文参考:《CUDA Programming Guides》,《Professional CUDA C Programming》

正文:

整体结构将主要分为逻辑结构,物理结构两个方面进行理解:

首先一定要对怎么cpu与gpu异构模型有一定的了解,CPU 与 GPU通过中间的PCI总线进行连接和传输。根据前文NVCC的编译过程,我们可以了解到,一个.cu文件经过编译之后会更具不同的硬件转化为其相对应的2进制文件,分开传到cpu 和 gpu进行异步执行。如下图:

逻辑结构:

为了方便编程和理解,CUDA根据GPU硬件设计了相应的编程模型,分别分为 grid、block、thread三个层次,如图:

一个grid中有多个block,一个block有多个线程。他们具有层次性,且他们有各自的操作范围,可以设置不同的维度,有利于程序的控制与理解。结合上面的异构模型,当主程序发送一个内核函数时,就是发送对应一个grid。这里可以人为便于自己的定义block,thread的数量和维数。

为什么会有利于程序的控制理解呢?首先要先理解2个图:

每个thread都分配有相应的寄存器和本地内存。在一个block中又有一个共享内存,对于block内的thread时可见的,且shared memory的读取速度很快。对于整个grid有供所有block和thread访问的全局、常量、纹理内存,后两个内存是对thread只读的,且只能通过host端进行赋值设置。

初步了解了cuda的逻辑模型,那这些thread是怎么进行执行的呢?

物理结构:

还是以图来理解比较直观,一个GPU有多个流式多处理器(SM :streaming multiproeessors )组成,如图:

一个SM多个CUDA核心,每个CUDA核心能并行运行一个thread。此外可以看到(左图)SM图中有2个线程束调度器,一个SM的调度单位就是一个warp:32*thread(进程束 = 32个线程)进行执行的,也就是说一个SM最多同时运行32个thread。多个SM就构成了一个GPU。

结合右图和上面的逻辑结构内容,我们可以更好理解逻辑结构与设备结构的对应关系。一个grid(网格)会被映射到整个gpu,一个grid中的多个block会被分配到不同的SM中;一个block会被切割成多个warp,这意味着一个SM可以"并发"执行多个block,可以“并发”执行多个warp;在一般情况下,thread会占据SM的所有CUDA核心,进行并行运算。

注意:

每个SM的寄存器和shared memory都是有限的,当一个block的thread很多时,每个thread被分配的寄存器就少了。同理,更多的block那每个block就有更少的shared memory。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值