以下是接下来讨论CUDA架构将要用到的一些关键术语:

(1)Host:宿主,指CPU,系统的CPU

负责启动应用程序,运行程序的串行部分,将程序的并行的、计算密集的部分offloadGPU上运行,并最终返回程序的运行结果

(2)Device:设备,指GPUCPU的协处理器。

负责程序的并行的、计算密集的部分的处理,并将处理结果返回给Host

(3)Kernel:编译过后的函数或程序。

指为GPU设备编译的一个函数。也就是一个编译好的、在GPU上并行运行的函数。KernelGPU上以多个线程的方式被执行。

(4)Host Memory:宿主内存。

是指安装GPU产品的主机的主板板载内存。

(5)Device Memory:设备内存。

是指GPU设备的板载内存,是高性能的 GDDR5 内存,支持DMA访问。

(6)Block:线程块。

执行Kernel的一组线程组成一个线程块。一个线程块最多可包含512个并行执行的线程,线程之间通过共享内存有效地共享数据,并实现线程的通信和栅栏同步。

(7)线程ID:线程在线程块中的线程号。

基于线程ID的复杂寻址,应用程序可以将线程块指定为任意大小的二维或三维数组,并使用2个或3个索引来标识每个线程。对于大小是(DxDy)的二维线程块,索引为(xy)的线程的线程ID为(x+y*Dx),对于大小为(DxDyDz)的三维线程块,索引为(xyz)的线程的线程ID为(x+y*Dx+z*Dx*Dy)。

(8)Grid:线程块组成的网格。

执行相同Kernel、具有相同维数和大小的线程块可以组合到一个网格中。这样单个Kernel调用中启动的线程数就可以很大。同一网格中的不同线程块中的线程不能互相通信和同步。Grid 是一个线程块阵列,执行相同的内核,从全局内存读取输入,将结果写入全局内存。

(9)Block ID:线程块ID

线程块ID是线程块在Grid中的块号。实现基于块ID的复杂寻址,应用程序可以将Grid指定为任意大小的二维数组,并用2个索引来标识每个线程块。对于大小为(DxDy)的二维线程块,索引为(xy)的块的块ID为(x+yDx)。

(10)Wrap:一个线程块中连续的固定数量的线程组。

将线程块中的线程划分成wrap的方式是:每个wrap包含线程ID连续递增的32个线程,其中第一个wrap中的线程从线程0开始递增到线程31

Nvidia 并行计算架构 CUDA 分析(二)——关键术语-LMLPHP


09-06 11:19