1.主机与主机代码
将CPU及系统的内存(内存条)称为主机。主机代码在CPU上运行,CPU代码用来管理设备端的环境、代码和数 据。
2.设备与设备代码
GPU及其内存(设备内存)称为设备,设备代码在GPU上运行,主要用来提高并行数据集的执行速度,是硬件的 加速器。
3.线程(thread)
线程是 GPU 运算中的最小执行单元,线程能够完成一个最小的逻辑意义操作。
4. 线程束(warp)
线程束是 GPU 中的基本执行单元。GPU 是一组 SIMD 处理器的集合,因此每个线程束中的线程是同时执行的。这个概念是为了隐藏对显存进行读写带来的延迟所引入的。一个 SM 中的所有 SP 在物理上分成 warp 的,共享同一个 memory 和 instruction unit。warp 是 GPU 执行程序时的调度单位,目前 CUDA 的 warp 的大小为 32,这个 warp 中的 32 个 threads(SP) 是一起工作的,执行相同的指令。也就是当进行并行计算时,线程数尽量为 32 的倍数,如果线程数不是 32 的倍数,假如是 1,则 Warp 会生成一个掩码,当一个指令控制器对一个 Warp 单位的线程发送指令时,32 个线程中只有一个线程在真正执行,其他 31 个进程会进入静默状态。
5. 线程块(block)
一个线程块包含多个线程束,在一个线程块内的所有线程,都可以使用共享内存来进行通信、同步。但一个线程块能拥有的最大线程/线程束,和显卡型号有关。
6. 线程网格(grid)
多个线程块被组织成一维、二维或三维的线程网格,一个网格内的线程块数往往由被处理的数据量而不是系统的 处理器数决定,前者往往远超后者。
7. 流多处理器(SM)
多个 SP 加上其他的一些资源组成一个 SM,GPU 硬件的并行性就是由 SM 决定的。流多处理器就相当于 CPU 中的核,负责线程束的执行。同一时刻只能有一个线程束执行。
8. 流处理器(SP)
最基本的处理单元, 最后具体的指令和任务都是在 SP 上处理的。GPU 进行并行计算,也就是很多个 SP 同时做处理。SP 也可以称为 CUDA Core 或者 thread,一个 SP 对应一个 thread。