2.2 线程层级

在讲解内核函数前,先讲解一下线程层级,不然有点难讲。

CUDA编程是一个多线程编程,数个线程(Thread)组成一个线程块(Block),所有线程块组成一个线程网格(Grid),如下图所示:

CUDA线程层级

图中的线程块,以及线程块中的线程,是按照2维的方式排布的。实际上,CUDA编程模型允许使用1维、2维、3维三种方式来排布。另外,即使线程块使用的是1维排布,线程块中的线程也不一定要按照1维排,而是可以任意排布。

目前的GPU限制一个线程块中,最多可以安排1024个线程。

一个线程块用多少线程,以及一个线程网格用多少线程块,是程序员可以自由安排的。由于32个相邻的线程会组成一个线程束(Thread Warp),而一个线程束中的线程会运行同样的指令。因此一般线程块中线程的数量被安排为32的倍数,选用256是比较合适的。

在线程数定下来之后,一般根据数据的排布情况来确定线程块的个数。

例如:一个数组的长度为4096,安排每个线程处理一个元素。如果安排一个线程块为256个线程,则需要4096/256=16个线程块。

Last updated