在计算机体系结构中,FX流水线是如何实现的?
FX流水线可以实现为通用单元或专用单元。此外,处理器可以包含单个通用单元或多个通用单元。
单个通用FX单元
所有早期的和一些当前的设计都采用单个通用FX流水线,这是一个单个FX单元,如图所示。这里的“通用”指的是执行处理器所有整数和布尔运算的能力。除了20世纪80年代早期的流水线处理器外,i486、IBM Power1 (RS/6000)、R (4000)、HP 7100、DEC α 21064、PowerPC 601和Power603都具有单个通用FX流水线,因此只有一个FX单元。
所有早期设计和一些当前设计,例如i486,也使用相同的通用FX流水线来执行加载/存储和分支指令。这似乎很自然,因为加载/存储和控制转移指令需要地址计算,这可以使用整数流水线轻松完成。
缺点是所有加载/存储和分支都限制为与整数和布尔运算顺序执行,这大大影响了性能。
多个通用FX单元
通过应用多个FX流水线,即多个流水线FX单元,可以进一步提高性能。关于FX单元的数量,值得参考动态指令分配,这表明所有执行指令中30-40%是整数和布尔运算。因此,为了利用更多并行性,提供多个FX单元似乎是不可避免的。
在这种方法中,必须指出整数除法通常不是流水线的。对于所有处理器,除法都需要相当多的周期(大约10-100个)。
有两种可能的方法来增加FX流水线的数量,第一种方法是使用多个通用流水线,从而为所有支持的整数和布尔指令使用多个通用FX单元。另一种可能性是为不同类别的整数和布尔指令采用多个专用流水线,实现为多个专用FX单元。
专用FX单元
另一种方法是使用一组专用单元,例如简单的FX单元、乘法器/除法器或单独的乘法器和除法器、移位器等等。如图所示,早期的1960 CA(第一个超标量处理器)或一些高端超标量处理器,如PowerPC 604、PowerPC 620或R8000,都是这种方法的例子。
除了早期的1960 CA之外,这些处理器通常包含两个简单的FX单元(提供乘法/除法功能),并使用公共专用乘法器/除法器单元(如PowerPC 604或R8000)或几个单独的乘法器和一个单独的除法器(如MC 88110)来实现多周期整数运算。