第1章 算术、浮点和向量类指令实现
算术运算是流水线中执行单元面向的重要应用,是程序运行的基本操作,加快基本操作的执行速度,能更显著地提升处理器计算性能。而浮点类指令的执行通常需要较多的处理器周期,保障浮点类指令的正常执行并进一步优化处理的好处不言而喻。高计算密集应用的普及,对CPU数据并行处理能力提出新要求而孕育而生的向量操作对现有的访存策略、执行方法等提出了挑战。本章主要研究解决以上问题的算术运算、浮点类和向量类这几类特定指令的相关专利技术实现。
1.1 算术运算
高性能多路运算(加法、累加和选择)、乘除法运算以及复杂运算(如指数运算、三角函数)在性能方面的提升对处理器主频、吞吐量的提升具有显著的效果。因此,x86产品技术标杆公司如英特尔等,在响应相关特定算数运算指令时,从执行部件的逻辑实现上布局了相应专利。本节对多路运算、乘除法运算以及复杂运算相关技术分别进行介绍。
1.1.1 多路运算
通常,现有技术的一条指令能够处理两个操作数输入的运算,当需要对多个数据进行运算时通常需要多条指令。本小节中的专利均涉及一类新的单一指令包含两个以上操作数,可以被译码为多路指令。该单一指令可以完成多条现有指令的工作,必要时在执行阶段增加1~2个时钟周期,使得多个操作并发完成而不需要增加较多执行时间,从而能够提升处理器性能。指令执行的运算包括加法(包括累加)、比较、选择等。
1. 多路加法/累加
【相关专利】
US7293056(Variable width,at least six-way addition/accumulation instructions,2002年12月18日申请,已失效,中国同族专利CN 1320450C)
【相关内容】
该专利技术涉及在处理器中提供可变宽度、至少六路(即六个输入)加法指令的译码和执行逻辑。首先将一条单一指令译码为具有多个操作数可变宽度、至少六路的加法指令,执行逻辑进一步使用多个加法器对多个操作数做加法得到并输出总和,并可选地存储进位结果。例如,在每个流水线中利用多个3∶1加法器(三个值相加并输出一个值)可以实现在一个或多个周期内执行的多路加法指令。3∶1加法器比2∶1加法器(两个值相加并输出一个值)略微慢一点,并且只涉及单个进位传送,因此该类指令以流水线方式工作并在两个周期后产生结果,不会影响处理器的周期长度。
专利技术能处理六路加法或累加指令的可变宽度多路加法运算逻辑电路示例见图1.1。图中电路包括多个指令操作数存储单元,如305模块;多个3∶1加法器,如335模块;以及目的寄存器380。输入包括六个源操作数,第一级运算可以采用4个六路加法器得到4个中间结果;第二级运算使用两个3∶1加法器将4个中间结果相加,还可以选择将之前存储在目的寄存器的结果和中间结果进行累加,最终结果存储在目的寄存器。
图1.1 可变宽度多路加法运算逻辑电路
2. 多路加法-比较-选择
【相关专利】
US7454601(N-wide add-compare-select instruction,2002年3月28日申请,已失效)
【相关内容】
US7454601专利技术提供一种N宽度加法-比较-选择指令的设计方法与逻辑实现。基于3∶1加法器与多个2∶1最大值比较器通过对源操作数与分支度量(branch metrics)值,在控制寄存器(包括分支度量寄存器(branch metrics register)、操作数选择寄存器(operand selection register)、极性设置寄存器(polarity setting register)以及比较结果寄存器(compare result register))配置下,执行相加、移位和比较操作,实现两个时钟周期内,对多组操作数相加值的比较,最终输出布尔值比较结果,运算过程如图1.2所示。硬件逻辑包括N宽度加法-比较-选择指令的译码,选择分支度量与操作数,合并多个计算结果,以及最大值比较结果输出。该专利技术应用于调制解调器、音视频等,能够大幅提升运算加速比。
图1.2 N宽度加法-比较-选择指令执行流程图
3. 多路选择
【相关专利】
US7028171(Multi-way select instructions using accumulated condition codes,2002年3月28日申请,已失效)
【相关内容】
US7028171专利技术实现多路选择指令的译码,从并行控制寄存器(parallel control register)存储的多个指令操作数中选择至少一对源操作数,从这一对源操作数中选择一个源操作数作为结果并输出。运算过程如图1.3所示。
图1.3 并行控制译码多路选择指令执行流程图
该专利技术支持的多路选择指令可以在两个时钟周期内执行完毕,其中多路包括4、8、16、32、双4、四4及更多路。专利功能的实现基于2∶1选择器,通过接连多段的选择器层级以及控制实现多路选择。每个选择器的控制端由预设条件码设定,条件码由多段比较或最大/最小值指令生成。多路选择逻辑在全流水方式下执行(每时钟周期执行一条指令),如此可以实现在log2N周期内(甚至更少的时钟周期数内)完成N选一操作。
该专利技术的实现方法与第2部分US7454601专利技术相似,但控制寄存器功能相对简单,仅沿用了US7454601中的比较结果寄存器(包含比较操作),不包含其他的控制寄存器。
1.1.2 乘除法运算
1. 扩展精度的整数除法
【相关专利】
US7523152(Methods for supporting extended precision integer divide macroinstructions in a processor,2002年12月26日申请,已失效,中国同族专利CN 1270230C和CN 100543670C)
【相关内容】
该专利技术提出在处理器内部采用现有的浮点除法硬件电路计算扩展精度的整数除法的方法,以满足不增加整数除法硬件的情况下计算更高精度的整数除法的需求。例如,可以在用于计算64位有效位的浮点数的浮点除法硬件中支持有符号和无符号的128位除以64位的整数除法操作。该专利涉及新指令—扩展精度整数除法指令。
假设128位整数被除数X除以64位整数除数Y,得到64位商Q和64位余数R。如果将128位被除数X分为两份等长的整数XL和XH,即高64位和低64位,即X = XH?264 + XL,则有XL = QL?Y + RL,XH?264 = QH?Y + RH,其中,Q = QH + QL,R = RH + RL。除法将分成高位和低位两次单独的64位处理。
接收扩展精度整数除指令后的计算过程如下:将被除数X的低位部分XL以及除数Y由整数格式转换为浮点格式;在浮点单元执行被除数低位部分除以除数的浮点除法,得到浮点格式的低位部分的商以及余数;之后将浮点格式的低位部分的商以及余数转换为整数格式的QL以及RL。高64位的计算过程与上述低64位过程类似,额外需要增加的操作是浮点格式的商需要执行溢出检查及溢出异常的后续处理;如果高位结果和低位结果没有错误,将两个64位运算的结果相加,计算最终的商和余数。操作流程示例如图1.4和图1.5所示。其中图1.4(a)展示了被除数的低位部分无符号除法操作,图1.4(b)展示了被除数的高位部分无符号除法操作。图1.5展示了从被除数低位和高位分别进行除法操作到得到最终的商和余数的流程。该专利技术还可以处理有符号数的除法操作,除了前述计算过程还需要额外的除前和除后处理过程。除前处理是把除数和被除数从有符号格式转换为无符号格式;除后处理是确定商和余数的符号。
图1.4 无符号扩展精度整数除法
2. 十进制浮点乘法
十进制浮点乘法运算,例如,对于两个表示为 和 的浮点数D1和D2,通常需要系数C1和C2相乘,指数E1和E2相加,然后进行舍入操作。现有二进制指令编码和执行电路无法直接对十进制表示的浮点数进行操作,导致十进制浮点乘法运算复杂度高,运算时间长。
【相关专利】
US7912890(Method and apparatus for decimal number multiplication using hardware for binary number operations,2006年5月11日申请,已失效)