对OpenCL和AMD Gpu架构的了解

时间:2018-06-27 10:05:49

标签: opencl gpu amd

因此,我正在阅读论文here提供的GCN第一代GPU的体系结构,我对向量ALU和其他一些东西的大小有些困惑。

1)据此,每个计算单元具​​有1个标量单元和4个SIMD。这4个SIMD中的每一个都有16个ALU来执行矢量运算。论文指出,ALU本身以全速执行单精度浮点和24位整数,而以降低的速度执行DP和32位整数。

我想知道的是为什么当32位SP浮点可以正确执行时为什么32位整数以降低的速度执行?

2)其次,我们知道对于AMD GCN GPU,每个SIMD阵列在4个周期内执行四分之一的波前。将指令分配给SIMD单元后,它是否可以在所有4个单元中复制?还是每个SIMD单元需要4个不同的周期才能获得指令?

如果所有4个SIMD单元执行相同的指令,则理论上每4个周期可获得4个波前。如果是第二种情况,那么在第四个周期中只有1个波前完成。

尽管请注意,根据GCN白皮书,本地数据共享(LDS)每个周期从2个不同的SIMD单元合并16条通道,因此每4个周期可获得2个完整的波前。这似乎暗示着这是第一种情况,因为如果不跨SIMD单元复制指令,则每4个周期最多只能完成1个波前完成。

3)最后,我想问一个情况。

假设我有一个分配给计算单元的2D工作组。工作组由8x8 = 64个工作项组成。计算单元会形成1个波前并在1个SIMD单元中执行4个周期,而其他3个SIMD单元保持空闲吗?还是会发生其他事情?

1 个答案:

答案 0 :(得分:0)

  

当32位SP浮点可以正确执行时,为什么32位整数以降低的速度执行?

如果查看如何表示32位浮点数,您会注意到这里有24位尾数,符号位和7位指数。大概GPU可以直接使用浮点ALU的功能来对通常以尾数存储的24位整数进行运算。为了对更大的整数进行运算,将需要进行某种形式的显式长乘法(例如32位CPU上的64位算术运算),从而减慢运算速度。