执行部分宽度压缩数据指令的制作方法

文档序号:6416348阅读:154来源:国知局
专利名称:执行部分宽度压缩数据指令的制作方法
技术领域
本发明一般涉及计算机系统领域。更具体地,本发明涉及利用诸如SIMD技术的处理器高效地执行诸如标量压缩数据指令等的部分宽度压缩数据指令的方法与装置。
诸如2D/3D图形、图像处理、视频压缩/解压缩、话音识别算法与音频处理等多媒体应用通常要求在大量数据项上执行相同的操作(称作“数据并行性”)。各种多媒体应用通常实现需要若干诸如加或乘(以后称为MUL)等浮点或整数运算的一种或多种算法。通过提供其执行导致处理器并行地在多个数据项上执行相同运算的宏指令,诸如Pentium处理器体系结构与MMxTM指令集等采用的单指令多数据(SIMD)技术已使在多媒体应用性能上有了明显的改进(Pentium及MMXTM为SantaClara,CA的Intel公司的注册商标或商标)。
SIMD技术特别适用于提供压缩数据格式的系统。压缩数据格式便是将寄存器中的位逻辑上分成若干固定大小的数据元素的数量,各元素表示独立的值的数据格式。例如,可将64位寄存器分解成四个16位元素,每个表示独立的16位值。然后,压缩数据指令便可并行地分开处理这些压缩数据类型中的各元素。
参见

图1,其中示出了示例性压缩数据指令。在这一示例中,压缩加法指令(如SIMD ADD)将第一压缩数据运算数X与第二压缩数据运算数Y的对应数据元素相加生成压缩数据结果Z,即X0+Y0=Z0,X1+Y1=Z1,x2+Y2=Z2及x3+Y3=Z3。将许多数据元素压缩到一个寄存器或存储器单元中并采用并行硬件执行使SIMD体系结构一次能执行多个操作,而得到明显的性能改进。例如,在这一示例中,在以前得出单一结果所需的时间中可得出四个独立的结果。
虽然SIMD体系结构的优点是显而易见的,仍存在着希望只作为压缩数据元素的子集返回单个的结果的情况。
本文描述了用于执行部分宽度压缩数据指令的方法与装置。按照本发明的一个方面,处理器包括多个寄存器、耦合在这多个寄存器上的寄存器重新命名单元、耦合在寄存器重新命名单元上的解码器及耦合在该解码器上的部分宽度执行单元。该寄存器重新命名单元提供了体系结构寄存器文件来存储各包含多个数据元素的压缩数据操作数。将解码器配置成解码其每个指定体系结构寄存器文件中的一个或多个寄存器的第一与第二指令集。第一指令集中的各指令指定要在存储在一个或多个指定的寄存器中的所有数据元素上执行的操作。反之,第二指令集中的各指令指定只要在存储在一个或多个指定的寄存器中的数据元素子集上执行的操作。将部分宽度执行单元配置成执行由第一或第二指令集之一指定的操作。
从附图及详细描述中,本发明的其它特征与优点将是显而易见的。
本发明是参照附图中的图以示例方式而非限制性方式描述的,附图中相同的标号指示相同的元素,附图中图1示出将来自第一压缩数据操作数与第二压缩数据操作数的对应数据元素相加的压缩加法指令。
图2A为展示按照本发明的一个实施例的示例性计算机系统的简化方框图。
图2B为展示按照本发明的一个实施例的示例性逻辑寄存器组的简化方框图。
图2C为展示按照本发明的另一实施例的示例性逻辑寄存器组的简化方框图。
图3为展示按照本发明的一个实施例的指令执行的流程图。
图4概念性地展示执行按照本发明的各种实施例的部分宽度压缩数据指令的结果。
图5A概念地展示用于执行按照本发明的一个实施例的全宽度压缩数据指令及部分宽度压缩数据指令的电路。
图5B概念性地展示用于执行按照本发明的另一实施例的全宽度压缩数据与部分宽度压缩数据指令的电路。
图5C概念性地展示用于执行按照本发明的又另一实施例的全宽度压缩数据及部分宽度压缩数据指令的电路。
图6展示按照SIMD的示例性处理器实现的,能分别作为四个独立的加法执行单元与四个独立的乘法执行单元操作的加法执行单元与乘法执行单元。
图7A-7B概念性地展示分别以“交错”方式执行的全宽度压缩数据操作与部分宽度压缩数据操作。
图8A概念性地展示在同时在操作数的一半宽度上执行操作时从逻辑寄存器中存取全宽度操作数的处理器内的电路。
图8B为进一步展示图8A的电路的定时图。
图9概念性地展示通过将宏指令转换成各处理操作数的一部分全宽度的多条宏指令以“交错”方式在操作数上执行操作的无次序的流水线的一个实施例。
图10为进一步展示图9中描述的实施例的定时图。
图11为展示可采用来完成按照本发明的一个实施例的解码处理的解码逻辑的框图。
本文描述了用于执行部分宽度压缩数据指令的方法与装置。这里名词“全宽度压缩数据指令”意在指称在一个或多个压缩数据操作数的所有数据元素上操作的压缩数据指令(如SIMD指令)。反之,名词“部分宽度压缩数据指令”意在广泛地指称设计成只在一个或多个压缩数据操作数的数据元素的子集上运算并返回压缩数据结果(到诸如压缩数据寄存器文件)的压缩数据指令。例如,标量SIMD指令可能只需要压缩数据操作数的最低位对之间的操作结果。在这一示例中,压缩数据结果的其余数据元素是忽略不计的,因为它们对标量SIMD指令无意义(例如,不关心其余数据元素)。按照本发明的各种实施例,可以以这样的方式来配置执行单元使之高效地提供全宽度压缩数据指令(如SIMD指令)及部分宽度压缩数据指令集(如标量SIMD指令)两者。
在下面的详细描述中,为了说明的目的,提出了许多特定细节以便提供对本发明的彻底理解。然而,对于本技术中的普通技术人员很明显,不一定用这些特定细节来实践本发明。在其它实例中,并未示出或以方框图形式示出众所周知的器件、结构、接口及进程。
考虑已为在单精度浮点数据、双精度浮点数据及整数数据上采用标量运算的标量体系结构(如单指令单数据(SISD)体系结构)编写的软件的数量,希望向开发人员提供将他们的软件移植到诸如SIMD体系结构等支持压缩数据指令的体系结构上的选择,而没有必要改写他们的软件与/或学习新的指令。通过提供部分宽度压缩数据指令,简单的翻译便能将老的标量代码变换成标量压缩数据代码。例如,编译程序非常容易从标量代码生成标量SIMD指令。然后,随着开发人员理解能用SIMD优化的他们的软件部分,他们便可逐渐地利用压缩数据指令。当然采用SIMD技术的计算机系统可能也以同样支持SISD指令来保持向后兼容。然而,许多最近的体系结构改进及这里讨论的其它因素有利于开发人员过渡到并利用SIMD技术,即使首先只采用标量SIMD指令也如此。
提供部分宽度压缩数据指令的另一合理性在于可通过只在全宽度运算数的子集操作可达到的许多好处,其中包含降低功耗、提高速率、简洁的异常模型及提高的存储量。如下所示,根据用部分宽度压缩数据指令提供的指示,通过有选择地关闭对执行当前操作不必要的那些硬件单元可达到功率节省。
另一种不希望强制压缩数据指令返回各对数据元素的单个结果的情况包含在提供部分宽度硬件的环境中的算术运算。由于成本与/或印模限制,通常不提供对诸如除法等某些算术运算的全面支持。从其性质上,即使在实现全宽度硬件(如执行单元与数据元素之间的一一对应)时,除法运算也非常长。因此,在只支持全宽度压缩数据运算同时提供部分宽度硬件的环境中,等待时间变得甚至更长。如下面进一步所示,诸如部分宽度压缩数据除法运算等部分宽度压缩数据运算可有选择地允许其运算数的某些部分绕过除法硬件。以这一方法,只在压缩数据运算数中的数据元素的子集上运算并不承担性能损失。
此外,与外来数据元素一起产生的异常可能导致对开发人员的混淆与/或SISD与SIMD机器之间的不兼容性。因此,只为指令意欲在其上面操作的那些数据元素报告异常是有利的。部分宽度压缩数据指令支持通过限制对关于正在其上面操作数据元素产生的异常条件或有可能导致混淆或SISD与SIMD机器之间不兼容的外来数据元素所产生的异常的触发来允许达到可预测的异常模型。
最后,作为执行部分宽度压缩数据操作的结果,在其中目的地压缩数据操作数部分不受破坏的实施例中,部分宽度压缩数据指令有效地提供用于存储数据的附加寄存器空间。例如,如果正在压缩数据操作数的低位部分上操作,可将数据存储在高位部分中,反之亦然。
图2A为按照本发明的一个实施例的示例性计算机系统的简化方框图。在所描绘的实施例中,计算机系统200包含处理器205、存储设备210及总线215。处理器205用总线215耦合在存储设备上。此外,诸如键盘220及显示器225等若干用户输入/输出设备也耦合在总线215上。还可通过总线215将计算机系统200耦合在网络230上。处理器205表示诸如CISC、RISC、VLIW或混合体系结构等任何类型体系结构的中央处理单元。此外,处理器205可实现在一片或多片芯片上。存储设备210表示一个或多个用于存储数据的机构。例如,存储设备210可包含只读存储器(ROM)、随机存取存储器(RAM)、磁盘存储介质、光学存储介质、快速存储设备与/或其它机器可读的介质。总线215表示一条或多条总线(如AGP、PCI、ISA、X-Bus、EISA、VESA等)及桥接器(也称作总线控制器)。虽然这一实施例是相对于单处理器计算机系统描述的,应理解本发明也可在多处理器计算机系统中实现。此外虽然本实施例是相对于32位与64位计算机系统描述的,本发明不限于这些计算机系统。
图2A附加示出处理器205包含指令集单元260。当然,处理器205包含其它电路;然而,这种其它电路对理解本发明不是必要的。在任何情况中,指令集单元260包含硬件与/或固件来解码与执行一或多个指令集。在所描绘的实施例中,指令集单元260包含解码/执行单元275。解码单元将处理器205接收的指令解码成一或多条微指令。执行单元响应从解码单元接收的微指令执行适当的操作。解码单元可采用若干不同机构实现(如查找表、硬件实现、PLA等)。
在本例中,解码/执行单元275示出为包含既拥有全宽度压缩数据指令又拥有部分宽度压缩数据指令的指令集280。这些压缩数据指令在执行时可导致处理器205去执行全/部分宽度压缩浮点运算与/或全/部分宽度压缩整数运算。除了压缩数据指令,指令集280可包含在现有微处理器中找得到的其它指令。作为示例,在一个实施例中处理器205支持与Intel 32位体系结构(IA-32)与/或Intel 64位体系结构(IA-64)兼容的指令集。
指令集单元260中还包含存储器单元285。存储器单元285可包含处理器205用来存储包含浮点数据及压缩浮点数据的信息的一或多组体系结构寄存器(也称作逻辑寄存器)。此外,可包含其它逻辑寄存器用于存储整数数据、压缩整数数据、及诸如栈顶指示之类各种控制数据。这里使用了名词体系结构寄存器与逻辑寄存器来指称指令指定包含单个操作数的存储区的方式的概念。从而,逻辑寄存器可用任何数目的公知技术在硬件中实现,包含专用的物理寄存器、利用寄存器重新命名机制(下面更详细地描述)的一或多个动态分配的物理寄存器等。在任何情况中,逻辑寄存器代表可用压缩数据指令寻址的最小存储单元。
在所描绘的实施例中,已在存储设备210中存储了操作系统235及压缩数据例程240供计算机系统200执行。压缩数据例程240为可包含诸如标量SIMD指令或SIMD指令等一或多条压缩数据指令的指令序列,如下面进一步讨论的,存在着包含速度、功耗及异常处理在内的这样的情况,希望只在压缩数据操作数或一对压缩数据操作数中的数据元素的子集上执行操作(或返回单个的结果),因此,处理器205能区分全宽度压缩数据指令与部分宽度压缩数据指令并相应地执行它们是有利的。
图2B为展示按照本发明的一个实施例的示范性逻辑寄存器组的简化方框图。在这一示例中,存储器单元285包含多个标量浮点寄存器291(标量寄存器文件)及多个压缩浮点寄存器292(压缩数据寄存器文件)。在执行浮点指令时可将标量浮点寄存器291(如寄存器R0-R7)实现为栈访问的寄存器文件以便与为Intel体系结构编写的现有软件兼容。然而,在替代实施例中,可将寄存器291作为平面寄存器文件对待。在所描绘的实施例中,将各压缩浮点寄存器(如XMM0-XMM7)实现为单一128位逻辑寄存器。然而,应理解可采用更宽或更窄的寄存器来符合使用更多或更少数据元素或更大或更小数据元素的实现。此外,可提供更多或更少的压缩浮点寄存器282。类似于标量浮点寄存器291,在执行压缩浮点指令时可将压缩浮点寄存器292实现为栈访问的寄存器文件或平面寄存器文件。
图2C为展示按照本发明的另一实施例的示范性逻辑寄存器组的简化方框图。在这一示例中,存储器单元285再一次包含多个标量浮点寄存器291(标量寄存器文件)及多个压缩浮点寄存器292(压缩数据寄存器文件)。然而,在所描绘的实施例中,将各压缩浮点寄存器(如XMM0-XMM7)实现为高位293与低位寄存器294的对应的对。如下面进一步讨论的,为了指令解码的目的的而将压缩浮点寄存器292的逻辑寄存器地址空间组织成使高位与低位寄存器对用单一的位区别是有利的。例如,XMM0-XMM7的高位与低位部分可用MSR来区分。最好,各压缩浮点寄存器291宽到足以容纳四个32位单精度浮点数据元素。然而,如上所述,可采用更宽或更窄的寄存器来符合使用更多或更少数据元素或更大或更小数据元素的实现。此外,虽然本例中的逻辑压缩浮点寄存器292各包括对应的64位寄存器对,在替代实施例中各压缩浮点寄存器可包括任何数目的寄存器。
已描述了可在其中实现本发明的一个实施例的示范性计算机系统,下面描述指令执行。
图3为展示按照本发明的一个实施例的指令执行的流程图。在步骤310,处理器205接收指令。在步骤320,根据指令的类型,部分宽度压缩数据指令(如标量SIMD指令)或全宽度压缩数据指令(如SIMD指令),处理以步骤330或340继续。通常在解码单元中指令的类型是根据包含在指令内的信息确定的。例如,信息可包含在附着在操作码上的前缀或后缀中,或通过立即值提供指示对应的操作要在压缩数据操作数的所有数据元素还是其子集上执行。以这一方式,相同的操作码既可用于全宽度压缩数据操作也可用于部分宽度压缩数据操作。作为代替,一组操作码可用于部分宽度压缩数据操作而不同的操作码组可用于全宽度压缩数据操作。
在任何情况中,如果指令为传统的全宽度压缩数据指令,则在步骤330通过在操作数中的各数据元素上执行指令规定的操作来确定压缩数据结果。然而,如果指令为部分宽度压缩数据指令,则在步骤340通过在数据元素的子集上执行指令规定的操作来确定结果的第一部分,而其余结果则设定为一个或多个预定的值。在一个实施例中,预定的值便是操作数之一中对应数据元素的值。这便是,可将数据元素从操作数之一的数据元素“传递通过”到压缩数据结果中的对应数据元素。在另一实施例中,全部清除(清零)结果的其余部分中的数据元素。下面描述用于执行将数据元素从操作数之一传递通过到结果的示范性逻辑及用于清除结果中的数据元素的示范性逻辑。
图4概念性地展示执行按照本发明的各种实施例的部分宽度压缩数据指令的结果。在这一示例中,操作是由执行单元440在两个逻辑源寄存器410与420的数据元素上执行的。执行单元440包含用于执行指令规定的操作的电路与逻辑。此外,执行单元440可包含允许执行单元440在部分宽度压缩数据模式或全宽度压缩数据模式中操作的选择电路。例如,执行单元440可包含传递通过电路将数据元素从逻辑源寄存器410、420之一传递到逻辑目的地寄存器430,或清除电路来清除逻辑目的地寄存器430的一或多个数据元素,等。也可采用各种其它技术来影响操作结果,包括将对操作的输入之一强制成预定的值,诸如导致操作执行其恒等函数的值或可传递通过算术运算而不发出异常信号的值(如静止的非数字(quiet nat-a-number)(QNaN))。
在所示的示例中,只将第一对数据元素(X0与Y0)上的操作结果(Z0)存储在逻辑目的地寄存器430中。假定执行单元440包含传递通过逻辑,便将逻辑目的地寄存器430的其余数据元素设置成来自逻辑源寄存器410的对应数据元素的值(即X3、X2与X1)。虽然将逻辑目的地寄存器430示出为独立的逻辑寄存器,指出它可以同时用作逻辑源寄存器410、420之一是重要的。因此,在这一上下文中应理解将逻辑目的地寄存器430的数据元素设置成来自逻辑源寄存器410、420之一的值可包含什么也不做。例如,在逻辑源寄存器410既是逻辑源又是目的地寄存器的情况中,各种实施例可利用这一点并简单地不触动要传递通过的一或多个数据元素。
作为替代,执行单元440可包含清除逻辑。从而,不是将值从逻辑源寄存器之一传递通过到逻辑目的地寄存器430,而是将结果中不必要的数据元素清除。在本例中再一次只将第一对数据元素(X0与Y0)上的操作结果(Z0)存储在逻辑目的地寄存器430中。“清除”(如设置成零或该问题的任何其它预定值)逻辑目的地寄存器430的其余数据元素。
图5A-5C分别概念性地展示既可执行全宽度压缩数据又可执行部分宽度压缩数据指令的执行单元540、560及580。包含在图5A与5C的执行单元中的选择逻辑表示示范性传递通过逻辑,而图5B的选择逻辑代表可采用的清除逻辑。在所描绘的实施例中,执行单元540、560与580各包含适当的逻辑、电路与/或固件用于在操作数(X与Y)的全宽度上并发执行操作570、571与572。
参见图5A,执行单元540包含选择逻辑(如多路复用器(MUX)555-557)用于在操作570产生的值与来自操作数之一的对应数据元素的值之间进行选择。可用诸如指示当前执行的操作是全宽度压缩数据操作还是部分宽度压缩数据操作的信号来控制MUX555-557。在替代实施例中,通过包含数据元素0的附加MUX与/或独立地控制各MUX可以达到附加的灵活性。提供MUX控制的各种装置都是可能的。按照一个实施例,这种控制可从指令本身始发或导出,或可通过立即值提供。例如,与指令关联的4位立即值可用来使MUX555-557直接受软件控制。可指导对应于立即值中的1的MUX去选择操作的结果,而可导致对应于0的MUX去选择传递通过数据。当然,通过采用更多或更少位来表示立即值可以在各种实现中达到更多或更少的分辨率。
参见图5B,执行单元540包含选择逻辑(如MUX565-567)用于在操作571产生的值与预定的值(如零)之间进行选择。如上所述MUX565-567可在公共控制下或独立地受控制。
图5C的传递通过逻辑(如MUX 575-576)在操作数之一的数据元素与恒等函数值590之间进行选择。通常将恒等函数值590选择为使得在恒等函数值590与数据元素之间执行运算572的结果为数据元素的值。例如,如果运算572为乘法运算,则恒等函数值590为1。类似地,如果运算572为加法运算,恒等函数值590为0。以这一方式,可通过令对应的MUX575-577输出恒等函数值590将数据元素的值有选择地传递通过到逻辑目的地寄存器430。
在上述实施例中,电路是硬布线成使得部分宽度操作是在最低位数据元素部分上执行的。可以理解,操作可在与所示出的不同的数据元素部分上执行。同时,如上所述,通过将所有的操作耦合到MUX之类而不只是图5A-5C中所描绘的操作的子集,可使要在其上操作的数据元素成为软件可配置的。此外,虽然将传递通过与清除逻辑描述为用于对待对应于要忽略的操作的得出的数据元素的两种选择,替代实施例可采用其它技术。例如,可以输入QNaN作为对要忽略其结果的操作的操作数之一。以这一方式,与1985年3月21日公布的IEEE 754标准,IEEEstd.754-1985一致的算术运算将传播NaN通过到结果而不触发算术异常。
虽然由于操作数的全宽度能并行处理而在上述实施例中达不到明显的加速,应理解通过关闭要忽略其结果的那些操作便能降低功耗。从而,可达到明显的功率节省。此外,采用QNaN与/或恒等函数值,可通过防止由不是部分宽度压缩数据操作的一部分的数据元素触发异常而维持可预测的异常模型。因此,所报告的异常局限于与部分宽度压缩数据操作意欲在其上操作的数据元素相关产生的那些。
图6展示可用来执行全宽度压缩数据指令的算术逻辑单元(ALU)的当前处理器实现。图6的ALU包含在操作数的全宽度(即所有数据元素)上执行操作所必需的电路。图6还示出该ALU包含两个不同类型的执行单元,分别用于执行不同类型的运算(如某些ALU使用独立的单元来执行加法与乘法运算)。加法执行单元与乘法执行单元分别能作为四个独立的加法执行单元及四个独立的乘法执行单元操作。作为替代,ALU可包含一或多个乘累加(MAC)单元,各能执行多于单一类型的运算。虽然以下示例假定采用加法与乘法执行单元及浮点运算,应理解诸如MAC与/或整数运算等其它执行也可使用。此外,可能最好采用部分宽度实现(如在执行单元与数据元素之间具有少于一一对应的实现)以及附加逻辑来协调执行单元的重复使用,如下所述。
图7A-7B概念性地展示正以“交错”方式分别执行的全宽度压缩数据操作及部分宽度压缩数据操作。本实施例的上下文中“交错执行”指将指令的操作数各分成独立的段并使用同一硬件顺序处理各段的进程而言。通过在连接的段的处理中引入延时而顺序地处理各段。如图7A-7B中所示,将压缩数据操作数分成“高位段”(数据元素3与2)及“低位段”(数据元素1与0)。在图7A的示例中,低位段正在处理而高位段被延时。随后,处理高位段而获得全宽度结果。在图7B的示例中,低位段正在处理,而高位数据段是否处理则取决于实现。例如,如果对应的结果是要清零的则高位数据段可能不需要处理。此外应理解如果不处理高位数据段,则高位与低位数据段可同时处理。类似地,在全宽度实现(如在执行单元与数据元素之间具有一一对应的实现)则高与低位数据段可同时处理或如图7A中所示。
此外,虽然下面的实施例是描述为只具有加法与乘法执行单元的,也可使用诸如MAC单元等其它类型的执行单元。
虽然存在着能达到交错的指令执行的若干不同方式,以下各节描述两个示范性实施例来说明本发明的这一方面。具体地,所描述的两个示范性实施例都接收指定包含128位操作数的逻辑寄存器的相同宏指令。
在第一示范性实施例中,指定包含128位操作数的逻辑寄存器的各宏指令导致从物理寄存器访问全宽度的操作数。从寄存器访问全宽度操作数之后,将操作数分成低与高位段(如利用锁存器与多路复用器)及使用相同的硬件顺序地执行。采集得出的半宽度结果并同时将它们写入单个逻辑寄存器中。
反之,在第二示范性实施例中将指定包含128位操作数的逻辑寄存器的各宏指令分成至少两条各只在一半操作数上操作的微指令。从而操作数是分成高与低位段的而各微指令独立地导致从寄存器中只访问一半操作数。在SIMD体系结构中这种分法是可能的,因为各操作数是互相独立的。虽然第二实施例的实现能以任何次序执行微指令(以按次序的或无次序的执行模型),微指令分别导致在操作数的低位与高位段上独立地或分开地执行宏指令所指定的操作。此外,各微指令导致将一半得出的操作数写入宏指令所指定的单一目的地逻辑寄存器中。
虽然将实施例描述为在其中将128位操作数分成两段的,替代实施例能使用更大或更小的操作数与/或将这些操作数分成两段以上。此外,虽然将两个示范性实施例描述为用于执行交错执行的,替代实施例可采用其它技术。
图8A概念性地展示从逻辑寄存器存取全宽度操作数但一次在操作数的一半宽度上执行操作的按照第一实施例的处理器内的电路。这一实施例假定处理器执行机能在每一时钟周期中处理一条指令。作为示例,假定执行下述指令序列ADD X,Y;MUL A,B。在时间T上,通过端口1与2从它们各自的物理寄存器中各检索出128位的X及128位的Y。将X与Y两者的低位数据段,即低64位,传递给多路复用器802及804,然后向前传递给执行单元供处理。将X与Y的高位数据段,高64位保存在延时元件M1与M2中。在时间T+1上,从延时元件M1与M2中读取X与Y的高位数据段,然后向前传递到执行单元供处理。通常,将高位数据段存储在延时元件M1与M2中的延时机构允许N位(在本例中N=64)硬件处理2N位数据。然后将来自执行单元的低位结果保存在延时元件M3中直到高位结果就绪为止。然后通过端口3将两个处理步骤的结果写回到寄存器文件800。回忆在部分宽度压缩数据操作的情况中,可将低或高位结果的一或多个数据元素强制到预定值上(如零、X或Y之一中的对应数据元素的值、等)而不是加法或乘法运算的输出。
继续本示例,在时间T+1上,也已起动乘法指令。从而在时间T+1上,可能已通过端口1与2从它们各自的寄存器中检索出各128位的A与B。可将A与B两者的低位数据段,即低64位传递到多路复用器806与808中。从延时元件M1与M2中清除X与Y的高位段并传递到多路复用器806与808中之后,可将A与B的高位段保持存储在延时元件M1与M2中,通过端口3将两个处理步骤的结果写回到寄存器文件800。
从而,按照本发明的实施例,设置了只包含一半硬件的执行单元(诸如两个单精度加法执行单元及两个单精度乘法执行单元),而不是要求执行单元如在当前的处理器中发现的那样去并行处理全宽度的操作数。本实施例利用了揭示多媒体应用利用大约50%加法指令与50%乘法指令这一统计分析。根据这些统计,本实施例假定多媒体指令通常遵照下述模式ADD,MUL,ADD,MUL,等等。通过以上述方式利用加法与乘法执行单元,本实施例提供执行单元的优化使用,从而能以较低的成本达到与当前的处理器相当的性能。
图8B为进一步说明图8A的电路的定时图。更具体地,如图8B中所示,当在时间T上发布指令“ADD X,Y”时,两个加法执行单元首先在低位数据段或图1的两个低位压缩数据段,即X0Y0及X1Y1上执行加法。在时间T+1上,用相同的执行单元在来自操作数的其余两个数据元素上执行加法运算,并将高位数据段的后面两个数据元素相加,即X2Y2与X3Y3。虽然上述实施例是参照利用两个执行单元的加法与乘法运算描述的,替代实施例可利用任何数目的执行单元与/或以交错方式执行任何数目的不同运算。
按照本实施例,可利用64位硬件来处理128位数据。一个128位寄存器可分成四个32位元素,各表示独立的32位值,在时间T上,两个加法执行单元首先在两个低位32位值上执行加法,后面跟随着在时间T+1上在高位32位值上的加法。在乘法运算的情况中,乘法执行单元以相同的方式工作。利用当前可获得的64位硬件去处理128位数据的这一能力代表了对硬件制造商的巨大成本效益。
如上所述,在后一个时钟周期上重复使用按照本实施例的加法与乘法执行单元重复执行第二个加法或乘法运算。当然,在部分宽度压缩数据指令的情况中,重复使用执行单元但没有必要重复执行运算,因为可以有选择地关闭对执行单元的供电。总之,如上所述,为了高效地执行这一重复使用或“交错执行”,利用了多媒体应用的统计表现。
如果第二加法指令跟随第一加法指令,第二加法可被调度单元延时,以便加法执行单元能完成第一加法指令,或更具体地在高位数据段上的第一加法指令。然后开始执行第二加法指令。作为替代,在无序处理器中,调度单元可确定是否可无序地执行指令流中更后面的乘法指令。如果是,调度单元可通知乘法执行单元开始处理该乘法指令。如果在时间T+1上没有可供处理的乘法指令,在第一加法指令后面调度程序将不发布指令,从而允许加法执行单元在开始第二加法指令之前定时完成第一加法指令。
本发明的又另一实施例,通过在一半时钟周期而不是整个时钟周期上在同一执行单元上执行指令而允许发布加倍的加法或乘法指令。在半时钟周期上执行一条指令有效地“双激发”硬件,即使硬件两倍快。以这一方式,可在每一个时钟周期中利用加法或乘法执行单元来处理新指令。双激发的硬件允许硬件单元以只在整个时钟周期上执行的单激发硬件两倍的效率执行。双激发硬件需要明显地更多的硬件以便在半时钟周期上高效地处理指令。
应理解,本发明的修改与变化是被上述教导涵盖的并在所附权利要求的视界内,并不脱离本发明的精神与意向范围。例如,上面虽然只描述了两个执行单元,但可提供任何数目的逻辑单元。
按照本发明的替代实施例,全宽度操作数的交错执行是通过将一条全宽度宏指令转换成至少两条各只在一半操作数上操作的微指令来达到的。如下面进一步描述的,通过消除没有必要确定部分宽度结果的微指令,在宏指令指定部分宽度压缩数据操作时能达到更佳性能。以这一方式,减少了处理器资源制约并且处理器不再被无意义的微指令无必要地占用。虽然下面的描述是按照具体的寄存器重新命名法编写的,应理解也可与本发明协调利用其它寄存器重新命名机制。下面描述的寄存器重新命名方法假设采用寄存器别名表(RAT)、排序缓冲器(ROB)及退役缓冲器,如在美国专利号5,446,912中详细描述的。也可实现诸如在美国专利号5,197,132中描述的替代寄存器重新命名方法。
图9概念性地展示通过将宏指令转换成各处理全宽度操作数的一部分的多条微指令以“交错”方式在操作数上执行操作的流水线的一个实施例。应指出为了避免不必要地使本发明难以理解,并未详细示出诸如取指令阶段等流水线的各种其它阶段。如所示,在流水线的解码阶段,接收全宽度宏指令,指定各存储全宽度操作数(如128位)的逻辑源寄存器。作为示例,所描述的操作数为128位压缩浮点数据操作数。在本例中,处理器支持用于存储压缩浮点数据的Y个逻辑寄存器。将宏指令转换成各导致宏指令在半宽度操作数(如64位)上执行操作的微指令,即“高位操作”与“低位操作”。
两条半宽度微指令然后进入流水线的寄存器重新命名阶段。寄存器重新命名阶段包含各种寄存器图及排序缓冲器。各微指令的逻辑源寄存器为对寄存器映象表(如RAT)中的特定寄存器项的指针。寄存器映象表中的项又指向ROB中或退役寄存器中的物理源单元的位置。按照一个实施例,为了提供上述半宽度高与低位操作,压缩浮点数据的RAT设置有Y*2个项。从而,例如,不是带有8个逻辑寄存器项的RAT,而是建立带16个项的RAT,各项编址为“高”或“低”。各项标识对应于128位逻辑寄存器的高或低部分之一的64位源。
从而各高与低位微指令在对应于各自的操作数的寄存器映象表中具有相关的项。然后微指令进入调度阶段(对无序处理)或执行阶段(对按序处理器)。各微指令检索与分开处理128位操作数的64位段。64硬件单元首先执行操作之一(如低位操作)。然后,同一64位硬件单元执行高位操作。应理解,在低与高位操作之间可执行零或数条指令。
虽然上述实施例描述将宏指令分成两条微指令,替代实施例可将宏指令分成更多的微指令。虽然图9示出将压缩浮点数据返回给带有各指定为高或低的Y*2个64位寄存器的退役寄存器文件,替代实施例可采用带有Y个128位寄存器的退役寄存器文件。此外,虽然将一个实施例描述为具有带排序缓冲器与退役寄存器文件的寄存器重新命名机构的,替代实施例可使用任何寄存器重新命名机构。例如,美国专利号5,197,132的寄存器重新命名机构采用历史队列与后备图。
图10为进一步说明图9中所描述的实施例的定时图。在时间T上,宏指令“ADD X,Y”进入图9的流水线的解码阶段。作为示例,该宏指令为128位指令。将该128位宏指令转换成两条64位微指令,即高位运算“ADD XH,YH”及低位运算“ADD XL,YL”。然后各微指令处理包含两个数据元素的一段数据。例如,在时间T上,可由64位执行单元执行低位操作。然后在不同的时间上(如时间T+N),同一64位执行单元执行高位操作。从而本发明的这一实施例特别适用于利用现有的64位硬件系统处理128位指令,而无须对硬件作重大改变。现有的系统除了现有的逻辑寄存器图之外,很容易扩展成包含新图来处理压缩的浮点。
参见图11,其中描述了按照本发明的一个实施例可以采用的解码逻辑。简要地说,在所描绘的实施例中,多个解码器1110、1120及1130各接收一条宏指令并将其转换成微指令。然后将微操作向下送到流水线的其余部分。当然,执行每一条宏指令不一定需要N条微指令。因此,通常的情况是只排队微指令的子集供流水线的其余部分处理。
如上所述,压缩数据操作可实现为两条半宽度微指令(如高位操作与低位操作)。不是象先有处理器实现所要求的用两个解码器独立地解码宏指令来生成高与低位操作,作为本实施例的特征可用同一解码器生成两条微指令。在本例中,这是用复制逻辑1150完成的,它复制高或低位操作,并随后适当地修正得到的复制操作来建立剩下的操作。重要的是,如上所述,通过小心地编码寄存器地址空间,能用单一的位来区分宏指令引用的寄存器(如逻辑源与目的地寄存器)。结果,最简单的形式的修正逻辑1160可包括一或多个反相器来反相适当的位以便从低位操作产生高位操作及反过来。在任何情况中,然后将复制的宏指令传递给多路复用器1170。多路复用器1170也接收解码器1120生成的微指令。在本例中,多路复用器1170在有效性解码器1180的控制下输出用于压缩数据操作(包含部分宽度压缩数据操作)的复制的微指令,并输出从解码器1120接收的用于压缩数据操作以外的操作的微指令。因此,优化操作码图来简化复制逻辑1150对压缩数据操作的检测是有利的。例如,如果只需要检验宏指令的一小部分来区别压缩数据操作与其它操作,则有效性解码器1180可采用较少的电路。
在为了执行部分宽度压缩数据操作的目的而将源数据元素传递通过到逻辑目的地寄存器的实现中,除了类似于相对于图5A与5C描述的选择逻辑之外,可包含逻辑来消除(消灭)高或低位操作之一,为了性能原因,最好及早在流水线中消除无关的微指令。这一消除可按照通过利用从微指令长度确定电路1190输出的微指令选择信号描绘的实施例来完成。该微指令长度确定逻辑1190检验一部分宏指令并生成指示要在流水线中向下进行的一或多条微指令的特定组合的微指令选择信号。在标量SIMD指令的情况中,只允许进行得出的高与低位操作之一。例如,微指令选择信号可表示为标识哪些微指令要保留及哪些要消除的位屏蔽。作为替代,微指令选择信号可简单地指示从预定的起点开始要消除或保留的微指令的数目。执行上述消除所需的逻辑取决于引导微指令通过流水线的其余部分的导航机制而变化。例如,如果微指令是排队的,可能要增加逻辑来操作微指令队列的头与尾指针以导致用后面生成的有效微指令来改写无效的微指令,许多其它的消除技术对于本技术中的普通技术人员是熟知的。
虽然为了简单起见在所描绘的实施例中一次只示出为解码单一宏指令,但在替代实施例中可同时解码多条宏指令,同时可理解,微指令复制具有比上述实施例所示更广阔的应用性。例如,以类似于上述的方式,可用同一解码器解码全宽度及部分宽度压缩数据宏指令。如果用前缀来区分全宽度与部分宽度压缩数据宏指令,解码器可简单地忽略该前缀并以相同方式解码两种类型的指令。然后,可以修改得出的微操作中的适当的位来有选择地为数据元素全体或其子集启动处理。以这一方式,可从部分宽度压缩数据微操作生成全宽度压缩数据微操作,反之亦然,借此降低解码器的复杂性。
从而公开了用于高效地执行部分宽度压缩数据指令的方法与装置。这里描述的这些特定的装置与方法只是为了展示本发明的原理。本技术中的普通技术人员可作出形式上与细节上的许多修改而不脱离本发明的范围。虽然对于特定的最佳实施例示出了本发明,但不应认为局限于此。反之,本发明只受所附权利要求书的范围的限制。
权利要求
1.一种处理器,包括多个寄存器;寄存器重新命名单元,耦合在多个寄存器上以提供体系结构寄存器文件来存储压缩数据操作数,各所述压缩数据操作数具有多个数据元素;解码器,耦合在所述寄存器重新命名单元上,解码各指定体系结构寄存器文件中一或多个寄存器的第一与第二指令集,第一指令集中的各指令指定在存储在指定的一或多个寄存器中的所有数据元素上的操作,第二指令集中各条指定只在存储在指定的一或多个寄存器中的数据元素的子集上的操作;以及部分宽度执行单元,耦合在解码器上以执行第一或第二指令集所指定的操作。
2.根据权利要求1的处理器,其中存储在指定的一或多个寄存器中的数据元素的子集包括对应的低位数据元素。
3.根据权利要求1的处理器,还包括执行单元,根据指定的操作与第一或第二指令集中哪一个相关,有选择地在指定的一或多个寄存器中的一或多个数据元素上执行指定的操作。
4.根据权利要求3的处理器,其中该执行单元还包括多个多路复用器在指定的操作结果与预定的值之间进行选择。
5.根据权利要求3的处理器,其中该执行单元还包括多个多路复用器在该一或多个数据元素的一个数据元素与恒等函数之间进行选择供输入到指定的操作。
6.一种方法,包括下述步骤接收指定压缩数据寄存器文件中至少两个逻辑寄存器的单一宏指令,其中这两个逻辑寄存器分别存储具有对应的数据元素的第一压缩数据操作数及第二压缩数据操作数;以及利用同一电路在不同的时间上在来自所述第一与第二压缩数据操作数的第一与第二多个对应数据元素上独立地操作,以独立地生成第一与第二多个得出的数据元素,这是通过下述步骤进行的,在第一与第二多个对应的数据元素中的至少一对对应的数据元素上执行该单一宏指令所指定的操作以生成第一与第二多个得出的数据元素的至少一个得出的数据元素,以及将第一与第二多个得出的数据元素的其余得出的数据元素设定为一个或多个预定值;及将该第一与第二多个得出的数据元素作为第三压缩数据操作数存储在单一逻辑寄存器中。
7.根据权利要求6的方法,其中该一个或多个预定值包括来自第一压缩数据操作数或第二压缩数据操作数之一的数据元素之值。
8.根据权利要求6的方法,其中该一或多个预定值包括零。
9.根据权利要求6的方法,其中该一或多个预定值包括非数字(NaN)指示。
全文摘要
提供了用于执行标量压缩数据指令的方法与装置。其中处理器包括:多个寄存器;耦合在该多个寄存器上的寄存器重新命名单元;耦合在寄存器重新命名单元上的解码器;及耦合在解码器上的部分宽度执行单元。
文档编号G06F9/30GK1244675SQ99104620
公开日2000年2月16日 申请日期1999年3月31日 优先权日1998年3月31日
发明者P·鲁塞尔, T·塔卡 申请人:英特尔公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1