架构细究
就像 Nvidia,AMD 选择改善先前架构,而非重头再来。这情况相当类似 R600 的架构,而 RV670 也已重复使用过。
SIMD 核心
此架构首先出现在 Xbox 360 使用的相同 GPU Xenos 中,它是基于一组 SIMD 数组的集合。Xenos 拥有三个 SIMD 数组,R600 与 RV670 则拥有四个。RV770 更进一步提升到十个。
GPU 拥有 800 个 ALU,读者或许已推论出每个 SIMD 数组内含 80 个 ALU。事实也的确如此,但这是现实情况的简化观点。事实上,这 80 个 ALU 并非互相独立。它们是以五路 VLIW 的单元群组化-每个 SIMD 数组 16 个单元。这种组织方式会对执行的指令加诸特定限制;一个 VLIW 管束 (bundle) 的五个指令中的每一个都必须互相独立。并由编译器找出足够的独立指令来饱合 ALU 处理能力-不同于使用较为「硬件」方案的 G80。
以下是说明我们刚刚所述的范例:
- I1 FADD R1, R1, 3.14
- I2 FMUL R2, R1, 1.41
- I3 FMAD R3, R0, 0.5, 0.5
在此情况下,指令 1 与 3 可以共享相同管束,但依赖指令 1 结果的指令 2 就不行。如果编译器无法其指令窗口中找到足够的作业,就必须以什么都不做的 NOP 指令填满该管束,因而降低了芯片的效能。这种情况会造成 Nvidia ALU 因为较不依赖底层程序代码而提高了达到尖峰效能的机会;但缺点是必须较耗用晶体管数目。AMD 的单元强烈依赖编译器的效能 (对驱动程序而言「内接」的编译器,它会重新组织 HLSL 产生的组译器指令),但 AMD 却能够在体积小了许多的裸晶上纳入较多数目的晶体管。
VLIW 单元本身并未大量翻新;上面具有四个单元可以执行一个 FMAD 或一个整数加法,以及一个特殊单元可执行一个 FMAD 或一个整数乘法或一个超越函数 (正弦、余弦、log、指数等)。唯一的改良就是整数的位移位 (bit-shifting) 作业,这在五个单元中的任何一个都可以处理,而在 2900/3800 上只有上述的特殊单元可以执行这些作业。AMD 并未提升此设计的效能,而是将之优化,以降低在裸晶上的大小,藉以增加其数目。


