用于执行多个乘法操作的方法和装置的制造方法_3

文档序号:9235256阅读:来源:国知局
该样的机器可读存储介质可W包括但不限于通过机器或设备制造或形成的物品 的非瞬态的有形安排,其包括存储介质,诸如;硬盘;任何其他类型的盘,包括软盘、光盘、 紧致盘只读存储器(CD-ROM)、紧致盘可重写(CD-RW) W及磁光盘;半导体器件,例如只读存 储器(ROM)、诸如动态随机存取存储器值RAM)和静态随机存取存储器(SRAM)之类的随机 存取存储器(RAM)、可擦除可编程只读存储器巧PROM)、闪存、电可擦除可编程只读存储器 巧EPROM);相变存储器(PCM);磁卡或光卡;或适于存储电子指令的任何其他类型的介质。 [00化]因此,本发明的各实施例还包括非瞬态的有形机器可读介质,该介质包含指令或 包含设计数据,诸如硬件描述语言(皿L),它定义本文中描述的结构、电路、装置、处理器和 /或系统特征。该些实施例也被称为程序产品。
[0066] 在一些情况下,指令转换器可用来将指令从源指令集转换至目标指令集。例如,指 令转换器可W变换(例如使用静态二进制变换、包括动态编译的动态二进制变换)、变形、 仿真或W其他方式将指令转换成将由核来处理的一条或多条其他指令。指令转换器可W用 软件、硬件、固件、或其组合实现。指令转换器可W在处理器上、在处理器外、或者部分在处 理器上且部分在处理器外。
[0067] 图7是根据本发明的各实施例的对照使用软件指令转换器将源指令集中的二进 制指令转换成目标指令集中的二进制指令的框图。在所示的实施例中,指令转换器是软件 指令转换器,但作为替代,该指令转换器可W用软件、固件、硬件或其各种组合来实现。图7 示出可W使用x86编译器704来编译利用高级语言702的程序,W生成可W由具有至少一 个x86指令集核的处理器716原生执行的x86二进制代码706。具有至少一个x86指令集 核的处理器716表示任何处理器,该些处理器能通过兼容地执行或W其他方式处理W下内 容来执行与具有至少一个X86指令集核的英特尔处理器基本相同的功能;1)英特尔X86指 令集核的指令集的本质部分,或2)目标为在具有至少一个x86指令集核的英特尔处理器上 运行的应用或其他程序的目标代码版本,W便取得与具有至少一个X86指令集核的英特尔 处理器基本相同的结果。x86编译器704表示用于生成x86二进制代码706 (例如,目标代 码)的编译器,该二进制代码706可通过或不通过附加的链接处理在具有至少一个x86指 令集核的处理器716上执行。类似地,图7示出可W使用替代的指令集编译器708来编译 利用高级语言702的程序,W生成可W由不具有至少一个x86指令集核的处理器714(例 如,具有执行加利福巧亚州桑巧维尔市的MIPS技术公司的MIPS指令集、和/或执行加利福 巧亚州桑巧维尔市的ARM控股公司的ARM指令集的核的处理器)原生执行的替代指令集二 进制代码710。指令转换器712被用来将x86二进制代码706转换成可W由不具有x86指 令集核的处理器714原生执行的代码。该转换后的代码不大可能与替代性指令集二进制代 码710相同,因为能够该样做的指令转换器难W制造;然而,转换后的代码将完成一般操作 并由来自替代指令集的指令构成。因此,指令转换器712通过仿真、模拟或任何其他过程来 表示允许不具有x86指令集处理器或核的处理器或其他电子设备执行x86二进制代码706 的软件、固件、硬件或其组合。
[0068] 用于执行多个乘法操作的方法和装置
[0069] 下文所描述的本发明的实施例为乘法指令族提供了在单条指令中执行两个乘法 的架构扩展。在一个实施例中,向英特尔架构(IA)提供架构扩展,但是本发明的基本原理 并不限于任何特定的ISA。
[0070] 在现有的处理器架构中,每条乘法指令执行单个乘法操作。例如,在英特尔架构 中,VMULSS和VMULPS对两个单精度浮点值做乘法,而VMULSD和VMULro对两个双精度浮点 值做乘法。相比之下,本文所描述的双乘法指令族(在一个实施例中标记为VMUL3指令)在 单条指令中执行两个乘法,进而减少了功率并释放解码时隙W用于其他指令。在一个实施 例中,对=个源操作数执行该两乘法运算:第二和第=源操作数可先相乘W生成中间结果, 然后,该中间结果再与第一源操作数相乘。
[0071] 如图8中所示,可在其上实现本发明的实施例的示例性处理器855包括具有用于 执行本文所述的VMUL3指令的VMUL3执行逻辑841的执行单元840。当执行单元840执行 指令流时,寄存器集合805为操作数、控制数据和其他类型的数据提供寄存器存储。
[0072] 为简单起见,在图8中示出单个处理器核("核0")的细节。然而,将会理解,图8 中所示的每个核都可具有与核0相同的逻辑集合。如所示出的那样,每个核可包括根据指 定的高速缓存管理策略的用于高速缓存指令和数据的专用一级(L1)高速缓存812和二级 (L2)高速缓存。L1高速缓存812包括用于存储指令的单独的指令高速缓存820和用于存 储数据的单独的数据高速缓存821。存储在各种处理器高速缓存之内的指令和数据W可W 是固定尺寸(如,64字节、128字节、512字节长度的)高速缓存行的粒度被管理。该示例性 实施例的每个核具有:从主存储器800和/或共享的=级(L3)高速缓存816取出指令的指 令取出单元810 ;用于对指令进行解码(例如,将程序指令解码成微操作或"uops"的)解 码单元820 ;用于执行指令(例如,本文所描述的VMUL3指令)的执行单元840 及用于引 退指令和写回结果的写回单元850。
[0073] 指令取出单元810包括各种公知的组件,包括;用于存储要从存储器800 (或高速 缓存中的一个)取出的下一指令的地址的下一指令指针803 ;用于存储最近使用的虚拟向 物理指令地址的映射W改善地址转换速度的转换后备缓冲器(ILTB)804 ;用于推测地预测 指令分支地址的分支预测单元802 ; W及用于存储分支地址和目标地址的分支目标缓冲器 炬TB) 801。一旦被取出,随后指令被流式地传送到指令流水线的其余的级,包括,解码单元 830、执行单元840和写回单元850。本领域普通技术人员已很好地理解该些单元中的每一 个的结构和功能,将不在此详细对其进行描述W避免使本发明的不同实施例的相关方面不 清楚。
[0074] 在本发明的一个实施例中,VMUL3执行逻辑841执行下列指令族:
[0075]VMUL3SSxmml{kl}{z},xmm2,xmm3/mV{er}
[0076]VMUL3PSzmml化]_} {z},zmm2,zmm3/B32 (mV) {er}
[0077]VMUL3SDxmml{kl}{z},xmm2,xmm3/mV{er}
[007引 VMUL3PDzmml化]_} {z},zmm2,zmm3/B64 (mV) {er}
[0079] 其中,xmml-3和zmml-3是寄存器集合805之内W单精度(32位)或双精度化4 位)浮点格式存储紧缩浮点值或标量浮点值的寄存器。
[0080] 具体来说,在一个实施例中,VMUL3SS将存储在xmml、xmm2和xmm3中的S个标量 单精度浮点值相乘。在操作中,第二操作数(来自xmm2)可与第S操作数(来自xmm3)相 乘,而所乘的结果(具有中间舍入)与第一操作数(来自xmml)相乘,并且将结果存储到目 的地寄存器中。在一个实施例中,目的地寄存器是与用于存储第一操作数的寄存器(如, mxxl)相同的寄存器。
[0081]在一个实施例中,VMUL3PS将存储在zmml、zmm2和zmm3中的S个紧缩单精度浮点 值相乘。在操作中,第二操作数(来自zmm。可与第S操作数(来自zmm^相乘,而所乘的 结果(具有中间舍入)与第一操作数(来自zmml)相乘,并且将结果存储到目的地寄存器 中。在一个实施例中,目的地寄存器是与用于存储第一操作数的寄存器(如,zxxl)相同的 寄存器。
[0082] 在一个实施例中,VMUL3SD将存储在xmml、xmm2和xmm3中的S个标量双精度浮点 值相乘。在操作中,第二操作数(来自xmm2)可与第=操作数(来自xmm3)相乘,而所乘的 结果(具有中间舍入)与第一操作数(来自xmml)相乘,并且将结果存储到目的地寄存器 中。在一个实施例中,目的地寄存器是与用于存储第一操作数的寄存器(如,xmml)相同的 寄存器。
[008引最后,在一个实施例中,VMUL3PD将存储在zmml、zmm2和zmm3中的S个紧缩双精 度浮点值相乘。在操作中,第二操作数(来自zmm。可与第S操作数(来自zmm^相乘,而 所乘的结果(具有中间舍入)与第一操作数(来自zmml)相乘,并且将结果存储到目的地 寄存器中。在一个实施例中,目的地寄存器是与用于存储第一操作数的寄存器(如,zxxl) 相同的寄存器。
[0084] 在一个实施例中,VMUL3指令中的每一个的立即数位巧:0]用于控制乘法的符号。 例如,立即数的位0的值可控制第一操作数的符号(例如,1 =负数,并且0 =正数,或者与 之相反);立即数的位1的值可控制第二操作数的符号;并且立即数的位2的值可控制第S 操作数的符号。
[0085] 在一个实施例中,从单指令多数据(SIMD)寄存器读取第一和第二操作数,同时可 从SIMD寄存器或存储器位置读取第S操作数。
[0086] 图9A示出与VMUL3执行逻辑841的一个实施例相关联的附加细节,VMUL3执行逻 辑841包括用于分配用于每个VMUL3 uop的资源的分配器940和用于调度要由功能单元 912执行的VMUL3 uops的预留站902。在操作中,跟随解码级830(在其中,每条VMUL3指 令被解码成uop)之后,指令解码器806将该些uop传送到包括寄存器别名表(RAT) 941的 分配器单元940。在无序流水线中,分配器单元940将每个传入的uop分配到重排序缓冲 器(ROB) 950中的位置,进而将uop的逻辑目的地地址映射至R0B950中对应的物理目的地 地址。RAT 941维持该映射。
[0087] ROB 950的内容最终可引退到实际寄存器组(RRF) 951中的位置。RAT 941也可存 储实际寄存器组有效位,该有效位指示在引退之后,逻辑地址所指示的值将在ROB 950还 是在RRF 951中的物理地址中找到。如果在RRF中找到,则该值被认为是当前处理器架构 状态的部分。基于此映射,RAT 941也将每个逻辑源地址关联至ROB 950或RRF 951中对 应的位置。
[008引分配器940也将每个传入的uop分配并写入到预留站巧巧902的条目中。预留站 902集中等待由功能单元912执行的VMUL3 uop。在当前的情况下,两个融合的乘法和加法 (FMA)功能单元FMA0 910和FMA1 911如下文所述执行乘法操作W执行VMUL3指令。必要 时,可在写回总线上将结果写回到RS 902。
[0089] 在一个实施例中,预留站条目被逻辑地细分成组W减少读取和写入条目分别所需 的读取和写入端口的数量。在图9A所示的实施例中,两个预留站组巧SO 900和RS1 901) 分别在端口 0和端口 1上调度由FMA0 900和FMA1 901进行的VMUL3 uop的执行。
[0090] 在一个实施例中,可通过流水线将VMUL3指令中的任何指令作为单个uop来执行。 具体说来,首先由执行第二和第=操作数(例如,如上文所讨论的,来自xmm2/xmm3或zmm2/ zmm3)的第一乘法的FMA0 910(经由RS0 900)来执行该uop, W生成中间结果。该uop在缓 冲器单元905之内被延迟,然后,再次由FMA1 911 (经由RS1 901)执行W将该中间结果与 第一操作数(例如,来自xmml/zmml)相乘。如先前所指出的那样,最终结果可存储在xmml/ zmml之内。此外,如所指出的那样,VMUL3指令的立即数值可指定S个源操作数中的每一个 的符号。在一个实施例中,在重新发出该指令之前,该uop的第二次发出被迫等待(经由缓 冲器905)精确的FMA等待时间(latency)(如,5个时钟周期)。
[0091] 各种现有的数据旁路可用于在端口 1上向FMA1 911提供中间结果。在一个实施 例中,该中间结果被临时地存储在ROB950之内,或被临时地存储在FMA1 911可从中读取 或可使用的任何其他的存储位置。在一个实施例中,写回总线可用于向RS1 901提供该中 间结果,该RS1 901随后使该中间结果在端口 1上对于FMA1 911可用。然而,本发明的基 本原理不限于向FMA1 911提供中间结果的任何特定方式。此外,虽然图9A中示出了ROB 905,但是将会理解,在一些处理器实现(如,有序流水线)中,不使用ROB950,并且不同形 式的存储可用于存储中间结果W及执行之后的最终结果。
[0092] 如图9B中所示,两个功能单元并不是实现本发明的基本原理所必需的。具体来 说,在本实施例中,同一个功能单元(FMA0 910)依次执行两次VMUL3uop,W生成最后结 果。也就是说,FMA0 910执行第二和第=操作数之间的第一乘法,并且将中间结果和uop往 回再循环通过其自身来执行第二乘法(该第二乘法一旦完成,将通过流水线的其余部分)。 虽然该UOP的第二迭代示出为通过预留站902,但是,在一个实施例中,该再循环可仅仅在 功能单元级912之内执行(即,使用该功能单元级912之内的临时缓冲器存储直接地从 FMA0 910循环到其自身)。此外,在另一实现中,功能单元912的集合之内的新的专用功能 单元独立地执行VMUL3指令(即,不使用融合的乘法和加法功能单元)。<
当前第3页1 2 3 4 5 6 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1