(共21页)
我们已经多次提到矢量处理单元,那么什么是矢量处理单元? Larrabee的计算密度来自16个宽矢量处理单元(矢量处理单元,VPU),它们可以执行整数算术,单精度浮点和双精度浮点指令集。尽管VPU和VPU的寄存器仅约占CPU内核面积的三分之一,但它们提供了大多数整数运算和浮点运算性能。下图描述了VPU和L1缓存的结构。


我们认为16英寸宽的VPU是在增加计算密度和获得VPU高利用率的难度之间的权衡。先前的分析认为,如果16个通道每次可以处理16个单独的像素,则16个着色器像素的利用率可以达到88%。可以说,在处理16个像素时,16宽VPU的每条指令处理一种颜色,而不是使用多个颜色通道一次处理。 Nvidia GeForce 8的操作模式相似,内置32套标量SIMD处理器,它们可以执行相同的指令。 Larrabee和Nvidia GeForce 8系列之间的最大区别是Larrabee的内部循环控制,缓存管理和其他操作采用代码形式,与矢量处理单元并行操作,而不是像GeForce 8系列那样。 ,执行这些操作时要依靠固定功能逻辑芯片。
Larrabee的VPU指令集可以支持3个源操作数(源操作数),其中之一可以从L1高速缓存中直接调用。当预先获取数据并将其发送到高速缓存时,L1高速缓存实际上成为扩展寄存器文件。可以从缓存中读取8位unorm,8位uint,16位sint和16位浮点数据并将其转换为32位浮点数或32位整数,此过程不会造成任何性能损失。这大大增加了缓存中存储的数据量,同时也减少了分离数据转换指令的需要。

接下来,是时候将数据依次排列在寄存器和存储单元中以及VPU单元中的处理通道中了。首先,寄存器中的数据以多种方式模糊不清,例如支持矩阵乘法。此外,可以通过VPU处理通道复制存储单元中的数据。这种操作可以大大提高缓存性能。实际上,这种操作在其他图形和非图形并行数据处理中也很常见。

VPU单元可以支持整数和浮点数据形式的大量指令集。它的指令系统可以提供标准算术运算,包括融合乘加(FMA)和标准逻辑运算(标准逻辑运算),其中包括用于从像素单元中提取非字节对齐字段的指令集。这些都是加载操作格式的指令,可从某些寄存器或存储单元读取这些指令,并将运算结果写入矢量寄存器。其他加载和存储指令可以更好地支持有效浮点与相对罕见或更复杂的数据格式之间的数据转换。在当前的GPU中可以看到这种相对稀少或更复杂的数据格式。由于这些数据格式具有独立的指令集,因此Larrabee以非常小的性能成本实现了非常客观的节能和减少芯片面积。
此外,VPU指令系统还可以支持分散/收集(分散收集)功能,该功能可以将数据加载并存储在内存中非相邻地址处。这16个元素不是从单个地址加载到16个宽向量单元,而是从16个不同地址加载或存储到16个地址,这16个地址在另一个矢量寄存器中指定。此方法支持16个并行运行的着色实例,并且这些实例不间断运行。尽管如此,许多工作负载都以高度连接的模式出现,因此实际上并不需要16个周期即可完成这些任务。
最后,Larrabee VPU指令集将由每个向量通道的1字节掩码寄存器确定。例如,通过使用某个指令集将掩码寄存器基于比较,可以将某个标量if-then-else控制结构映射到VPU单元,然后执行if和else子句的相反操作。掩码寄存器。并控制是否写入结果;如果掩码寄存器中的所有“ 0”或“ 1”,将完全跳过要执行的语句。这样,可以减少由一些短子句引起的分支预测错误的惩罚,并在编写指令时给予程序员充分的自由。
此外,VPU还使用此屏蔽功能批量加载和存储指令,从而可以更有效地处理某些连续存储单元,并使程序员可以收集较少的执行单元来更有效地执行向量运算。
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/shenmilingyu/article-351686-1.html
期待你带给我们更多更好的作品