结构
寄存器文件通常划分为多个Bank,4个Register Bank组成的R寄存器文件结构如下,
image.png每个Register Bank又可以包含两个RAM,
image.png容量
GPU中,每个执行核中的寄存器的容量和这个核支持的最大线程数息息相关。
假设每个执行核最多支持A个Warp,每个Warp包含B个线程,每个线程可用的寄存器为:通用寄存器C个、特殊寄存器D个,每个寄存器为E个字节,则这个执行核的寄存器文件的大小为:
访问
将Register File拆分成多个Register Bank是为了提高寄存器的访问效率。因为每个Register Bank都有独立的访问端口,这样多个Bank就可以并行访问,这类似于DDR的设计。
如果一条指令里面的源寄存器访问的都是不同的Bank,那么这无疑就提高了寄存器的访问效率。
通常我们可以这样分配寄存器的地址:
- 寄存器 0、4、8 ... 访问的都是Bank 0;
- 寄存器 1、5、9 ... 访问的都是Bank1;
- 寄存器 2、6、10 ... 访问的都是Bank2;
- 寄存器 3、7、11 ... 访问的都是Bank3;
这样编译器在一条指令中使用寄存器的时候,顺序分配寄存器就可以让一条指令中的寄存器访问不同的Bank,从而提高寄存器的访问效率。
网友评论