专利名称:用于执行点积运算的指令和逻辑的制作方法
技术领域:
本发明涉及执行数学运算的处理装置及相关软件和软件序列的领域。
背景技术:
计算机系统已经越来越深入我们的社会。计算机的处理能力已经提高了各种职业的工人的效率和生产力。由于购买和拥有计算机的费用持续下降,所以越来越多的消费者能够利用更新、更快的机器。此外,许多人由于使用自由而乐于使用笔记本电脑。移动计算机使用户可在离开办公室或旅行时轻松地传输他们的数据以及利用所述移动计算机进行工作。这种情况在营销人员、公司管理人员甚至学生中是常见的。随着处理器技术的进步,还产生了更新的软件代码来在具有这些处理器的机器上运行。用户一般预期并要求来自他们的计算机的更高性能,而不管所使用的软件类型。从处理器内实际执行的指令和操作的种类中可能产生一个这样的问题。根据操作的复杂度和/或所需电路的类型,某些类型的操作需要更多时间来完成。这提供了优化在处理器内部执行某些复杂操作的方式的机会。十多年来,媒体应用推动了微处理器的发展。实际上,媒体应用推动了近年来的大多数计算升级。这些升级主要在消费者方面发生,但是,为了娱乐性增强的教育和通信目的,在企业方面也看到显著的进步。然而,未来的媒体应用需要更高的计算要求。因此,将来的个人计算体验在视听效果方面将更为丰富,并且更容易使用,更重要的是,计算将与通信融合。因此,图像的显示以及统称为内容的音频和视频数据的回放已经逐渐成为当前计算设备的流行应用。滤波和卷积操作是对内容数据、如图像音频和视频数据执行的最常见操作的一部分。这类操作是计算密集的,但是提供可通过采用各种数据存储设备(如单指令多数据(SMD)寄存器)的有效实现来利用的高级数据并行性。多个当前的体系结构还需要多个操作、指令或子指令(通常称作“微操作”或“μop”)来对多个操作数执行各种数学运算,由此减小吞吐量并增加执行数学运算所需的时钟周期数量。例如,可能需要由多个指令组成的指令序列来执行产生点积所必需的一个或多个运算,包括将由处理装置、系统或计算机程序内的各种数据类型所表示的两个或两个以上数值之积相加。但是,这类现有技术可能需要许多处理周期,并且可能使处理器或系统消耗不必要的功率以产生点积。此外,一些现有技术可能在可进行操作的操作数的数据类型方面受到限制。
发明内容
根据本发明的一个方面,提供了一种用于执行点积运算的处理器,包括
解码器,用于对单指令多数据 (SIMD)点积指令进行解码,该点积指令指定存储包括第一数据值和第三数据值的第一打包操作数的第一寄存器,存储包括第二数据值和第四数据值的第二打包操作数的第二寄存器,和控制值;以及逻辑,对解码的SIMD点积指令作出响应,取决于所述控制值从所述第一打包操作数和所述第二打包操作数中选择各自的数据值,以便将它们的乘积包括在点积中,该逻辑包括将所选的第一数据值和第二数据值相乘以产生第一乘积的第一乘法器、将所选的第三数据值和第四数据值相乘以产生第二乘积的第二乘法器,该逻辑还包括至少将所述第一乘积和所述第二乘积相加在一起以产生和数的加法器,并取决于控制值将和数或空值存储为目标寄存器的第一打包值,以及取决于控制值将和数或空值存储为目标寄存器的第二打包值。根据本发明的另一方面,提供了一种用于按照由点积指令指示的控制值执行单指令多数据(SIMD)点积指令的方法,该方法包括按照所述控制值,从第一打包操作数和第二打包操作数中选择各自的数据元素以便将它们的乘积包括在点积中;将第一打包操作数的第一对应的数据元素和第二打包操作数的第一对应的数据元素相乘以产生所选的第一乘积;将第一打包操作数的第二对应的数据元素和第二打包操作数的第二对应的数据元素相乘以产生所选的第二乘积;将所选的第一乘积与所选的第二乘积相加在一起,以至少部分产生点积结果;以及按照所述控制值,或者将所述点积结果或者将零值存储为目标操作数的第一打包值,以及或者将所述点积结果或者将零值存储为目标操作数的第二打包值。根据本发明的又一方面,提供了一种处理系统,包括存储单指令多数据(SIMD)点积指令的存储器;耦合到所述存储器的处理器,用于对多个操作数执行SMD点积指令,每个操作数包括可按照由SIMD点积指令指示的控制值选择的多个对应的打包值,以便将它们的乘积包括在点积中,并取决于控制值将点积或零值存储为目标操作数的第一打包值,以及取决于控制值将点积或零值存储为目标操作数的第二打包值。
通过附图、作为实例而非限制地来说明本发明图IA是根据本发明的一个实施例采用处理器组成的计算机系统的框图,所述处理器包括执行点积操作的指令的执行单元;图IB是根据本发明的一个备选实施例的另一个示范性计算机系统的框图;图IC是根据本发明的另一个备选实施例的再一个示范性计算机系统的框图;图2是根据本发明的一个实施例的处理器的微体系结构的框图,所述处理器包括执行点积操作的逻辑电路;图3A示出根据本发明的一个实施例的多媒体寄存器中的各种打包(packed)数据类型表示;
图3B示出根据一备选实施例的打包数据类型;图3C示出根据本发明的一个实施例的多媒体寄存器中的各种有符号和无符号打包数据类型表示;图3D示出一种操作编码(操作码)格式的一个实施例;图3E示出一种备选操作编码(操作码)格式;图3F示出又一种备选操作编码格式;图4是根据本发明对打包数据操作数执行点积操作的逻辑(logic)的一个实施例 的框图;图5A是根据本发明的一个实施例对单精度打包数据操作数执行点积操作的逻辑的框图;图5B是根据本发明的一个实施例对双精度打包数据操作数执行点积操作的逻辑的框图;图6A是根据本发明的一个实施例用于执行点积操作的电路的框图;图6B是根据本发明的另一个实施例用于执行点积操作的电路的框图;图7是根据一个实施例对数据进行打包符号操作的示意图。图7A是根据一个实施例可通过执行DPPS指令来执行的操作的伪码表示;图7B是根据一个实施例可通过执行DPH)指令来执行的操作的伪码表示。
具体实施例方式以下说明描述了在处理装置、计算机系统或软件程序中执行点积操作的一种技术的实施例。在以下描述中,阐述诸如处理器类型、微体系结构条件、事件、启用机制等的大量具体细节,以提供对本发明的充分理解。然而,本领域的技术人员会理解,没有这类具体细节,也可实施本发明。另外,没有详细说明一些公知的结构、电路等,以免不必要地影响对本发明的理解。虽然参照处理器来描述以下实施例,但是,其它实施例适用于其它类型的集成电路和逻辑设备。本发明的相同技术和理论可容易地应用到可获益于较高流水线吞吐量和改进的性能的其它类型的电路或半导体器件。本发明的理论适用于执行数据操作的任何处理器或机器。但是,本发明不限于执行256位、128位、64位、32位或16位数据操作的处理器或机器,而是可适用于其中需要操纵打包数据的任何处理器和机器。为便于说明,以下描述中阐述了大量具体细节,以便提供对本发明的充分理解。但是,本领域的技术人员会理解,这些具体细节不是实施本发明所必需的。在其它情况下,没有对公知的电气结构和电路进行特别详细的阐述,以免不必要地影响对本发明的理解。另夕卜,为了说明的目的,以下描述提供实例,以及附图示出各种实例。但是,这些实例不应当以限制的意义来理解,因为它们仅旨在提供本发明的实例,而不是提供本发明的所有可能实现的穷尽列表。虽然以下实例在执行单元和逻辑电路的上下文中来描述指令处理和分配,但是,本发明的其它实施例可通过软件来实现。在一个实施例中,本发明的方法以机器可执行指令来体现。这些指令可用于使采用指令编程的通用或专用处理器执行本发明的步骤。本发明可作为计算机程序产品或软件来提供,它可包括其中已存储指令的机器或计算机可读介质,这些指令可用于对计算机(或其它电子设备)编程以执行根据本发明的过程。作为备选的方案,本发明的步骤可由包含用于执行所述步骤的硬连线逻辑的特定硬件部件来执行,或者由已编程计算机部件和定制硬件部件的任何组合来执行。这种软件可存储在系统中的存储器内。类似地,代码可经由网络或者通过其它计算机可读媒体来分配。因此,机器可读介质可包括用于存储或传输机器(例如计算机)可读形式的信息的任何机构,包括但不限于软盘、光盘、光盘只读存储器(CD-ROM)以及磁光盘、只读存储器(ROM)、随机存取存储器(RAM)、可擦除可编程只读存储器(EPROM)、电可擦除可编程只读存储器(EEPROM)、磁或光卡、闪存(flash memory)、通过因特网的传输、电、光、声或其它形式的传播信号(例如载波、红外信号、数字信号等)等。相应地,计算机可读介质包括适于存储或传输机器(如计算机)可读形式的电子指令或信息的任何类型的媒体/机器可读介质。此外,本发明还可作为计算机程序产品来下载。因此,程序可从远程计算机(例如服务器)传送到请求计算机(例如客户机)。程序的传送可通过电、光、声或者在载波或其它传播介质中包含的其它形式的数据信号经由通信链路(例如调制解调器、网络连接等)来进行。设计可能经过从创建到仿真(simulation)直到制造的各种阶段。表示设计的数据可通过多种方式来表示设计。首先,如在仿真中有用的那样,硬件可采用硬件描述语言或者另一种功能描述语言来表示。另外,采用逻辑和/或晶体管门电路的电路级模型可在设计过程的某些阶段产生。此外,在某个阶段,大部分设计达到表示硬件模型中的各种设备的物理设置的数据级。在采用常规半导体制造技术的情况下,表示硬件模型的数据可以是指定用于生产集成电路的掩模的不同掩模层上的各种特征是否存在的数据。在该设计的任何表示中,数据可存储在任何形式的机器可读介质中。经调制或者以其它方式产生来传输这种信息的光或电波、存储器或者磁或光存储装置(storage)(如磁盘)可以是机器可读介质。这些介质的任一种可“携带”或“指示”设计或软件信息。在传输指示或携带代码或设计的电载波达到执行电信号的复制、缓冲或重传的程度时,就制作了新的副本。因此,通信提供商或网络提供商可能制作体现本发明的技术的产品(载波)的复制品。在现代处理器中,多个不同的执行单元用来处理和执行各种代码及指令。并非所有指令都同等地创建,因为一些指令会较快地完成,而其它指令则耗用大量时钟周期。指令的吞吐量越大,处理器的整体性能就越好。因此,让许多指令尽可能快地执行是有利的。但是,存在具有较高复杂度并且在执行时间和处理器资源方面要求更多的某些指令。例如存在浮点指令、加载/存储操作、数据移动等。随着越来越多的计算机系统用于互联网和多媒体应用,随时间引入了附加处理器支持。例如,单指令多数据(SIMD)整数/浮点指令和流式(streaming) SIMD扩展(SSE)是减少执行特定程序任务所需的指令的总体数量的指令,它又可降低功耗。通过并行地对多个数据元素进行操作,这些指令可加速软件执行。因此,可在包括视频、语音和图像/照片处理的大量应用中实现性能增益。微处理器以及相似类型的逻辑电路中的SMD指令的实现通常涉及多个问题。此外,SMD操作的复杂度通常导致需要附加电路,以正确地处理和操纵数据。 当前,SIMD点积指令不可用。在不存在SIMD点积指令的情况下,在诸如音频/视频压缩、处理和操纵之类的应用中可能需要大量指令和数据寄存器来实现同样的结果。因此,根据本发明的实施例的至少一个点积指令可减少代码开销和资源要求。本发明的实施例提供一种实现作为使用SIMD相关硬件的算法的点积操作的方式。当前,对SIMD寄存器中的数据执行点积操作有些困难且冗长。一些算法需要比执行那些操作的指令的实际数量更多的指令来设置用于算术运算的数据。通过实现根据本发明的实施例的点积操作,实现点积处理所需的指令数量可显著减少。本发明的实施例包括用于实现点积操作的指令。点积操作一般包括将至少两个值相乘并将该乘积加到至少两个其它值的乘积上。可对通用点积算法进行其它变更,包括将各个点积操作的结果相加以产生另一个点积。例如,根据一个实施例,应用于数据元素的点积操作可一般表示为DESTl — SRC1*SRC2 ;DEST2 — SRC3*SRC4 ;DEST3 — DEST1+DEST2 ;对于打包SMD数据操作数,该流程可应用于各个操作数的各个数据元素。在以上流程中,“DEST”和“SRC”是表示相应数据或操作的源和目标(destination)的一般术语。在一些实施例中,它们可通过具有不同于所述的名称或功能的寄存器、存储器或其它存储区来实现。例如,在一个实施例中,DESTl和DEST2可以是第一和第二暂时存储区(例如“TEMPI和“TEMP2”寄存器),SRCl和SRC3可以是第一和第二目标存储区(例如“DESTΓ’和“DEST2”寄存器)等。在其它实施例中,SRC和DEST存储区的两个或两个以上可对应于相同存储区(例如SIMD寄存器)中的不同数据存储单元(data storage element)。此外,在一个实施例中,点积操作可产生通过上述一般流程所产生的点积之和。图IA是根据本发明的一个实施例采用处理器组成的示范性计算机系统的框图,所述处理器包括执行点积操作的指令的执行单元。根据本发明,例如在本文所描述的实施例中,系统100包括采用包含执行用于处理数据的算法的逻辑的执行单元的部件,例如处理器 102。系统 100 表不基于可向 Intel Corporation(Snata Clara, California)购买
的PENTIUM III、PENTIUM 4、Xeon 、Itanium 、XScale 如 / 或 StrongARM 微处理器的处理系统,但是也可采用其它系统(包括具有其它微处理器的个人计算机(PC)、工程工作站、机顶盒等)。在一个实施例中,示例系统100可运行可向MicrosoftCorporation (Redmond, Washington)购买的一种版本的WINDOWS 操作系统,但也可采用其它操作系统(例如UNIT和Linux)、嵌入式软件和/或图形用户接口。因此,本发明的实施例不限于硬件电路和软件的任何特定结合。实施例不限于计算机系统。本发明的备选实施例可用于其它设备(如手持设备)和嵌入式应用。手持设备的一些实例包括蜂窝电话、因特网协议装置、数字照相机、个人数字助理(PDA)和手持PC。嵌入式应用可包括微控制器、数字信号处理器(DSP)、片上系统、网络计算机(NetPC)、机顶盒、网络集线器、广域网(WAN)交换机或者对操作数执行点积操作的任何其它系统。此外,已经实现一些体系结构以使指令能够同时对若干数据进行操作,从而提高多媒体应用的效率。随着数据的类型和容量增加,必须增强计算机及其处理器以通过更有效的方法来操纵数据。图IA是根据本发明的一个实施例采用处理器102组成的计算机系统100的框图,所述处理器包括一个或 多个执行单元108来执行计算一个或多个操作数中的数据元素的点积的算法。一个实施例可在单处理器台式或服务器系统的上下文中来描述,但是备选实施例可包含在多处理器系统中。系统100是中心(hub)体系结构的一实例。计算机系统100包括处理数据信号的处理器102。处理器102可以是复杂指令集计算机(CISC)微处理器、简化指令集计算(RISC)微处理器、超长指令字(VLIW)微处理器、实现指令集的组合的处理器或者例如数字信号处理器之类的任何其它处理器设备。处理器102耦合到可在处理器102与系统100中的其它部件之间传输数据信号的处理器总线110。系统100的元件执行本领域的技术人员公知的常规功能。在一个实施例中,处理器102包括第一级(LI)内部高速缓冲存储器104。根据该体系结构,处理器102可具 有单个内部高速缓存或多级内部高速缓存。作为备选的方案,在另一个实施例中,高速缓冲存储器可位于处理器102的外部。根据具体实现和需要,其它实施例也可包括内部和外部两种高速缓存的组合。寄存器文件(register file) 106可在包括整数寄存器、浮点寄存器、状态寄存器和指令指针寄存器的各种寄存器中存储不同类型的数据。包含执行整数和浮点运算的逻辑的执行单元108也位于处理器102中。处理器102还包括存储某些宏指令的微码的微码(μ code)ROM。对于该实施例,执行单元108包括处理打包指令集109的逻辑。在一个实施例中,打包指令集109包括用于计算多个操作数的点积的打包点积指令。通过在通用处理器102的指令集中包含打包指令集109,结合执行指令的相关电路,许多多媒体应用使用的操作可采用通用处理器102中的打包数据来执行。因此,通过采用处理器的数据总线的全宽度(full width)对打包数据执行操作,可加速并且更有效地执行许多多媒体应用。这可消除通过处理器的数据总线来传送较小的数据单元以一次对一个数据元素执行一个或多个操作的需要。执行单元108的备选实施例也可用于微控制器、嵌入式处理器、图形设备、DSP和其它类型的逻辑电路。系统100包括存储器120。存储器120可以是动态随机存取存储器(DRAM)设备、静态随机存取存储器(SRAM)设备、闪存设备或者其它存储设备。存储器120可存储通过可由处理器102执行的数据信号所表示的指令和/或数据。系统逻辑芯片116耦合到处理器总线110和存储器120。所述实施例中的系统逻辑芯片116是存储器控制器中心(memory controller hub) (MCH)。处理器102可经由处理器总线110与MCH 116通信。MCH 116为指令和数据存储以及为图形命令、数据和文本的存储提供到存储器120的高带宽存储器通路118。MCH 116引导处理器102、存储器120和系统100中的其它部件之间的数据信号,并且作为处理器总线110、存储器120和系统1/0122之间的数据信号的桥梁。在一些实施例中,系统逻辑芯片116可提供用于耦合到图形控制器112的图形端口。MCH 116通过存储器接口 118耦合到存储器120。图形卡112通过加速图形端口(AGP)互连114耦合到MCH 116。系统100采用专有中心(hub)接口总线122将MCH 116耦合到1/0控制器中心(ICH) 130。ICH 130通过本地1/0总线提供对一些1/0装置的直接连接。本地1/0总线是用于将外围设备连接到存储器120、芯片组和处理器102的高速1/0总线。一些实例是音频控制器、固件中心(闪速BIOS) 128、无线收发器126、数据存储设备124、包含用户输入和键盘接口的传统1/0控制器、诸如通用串行总线(USB)之类的串行扩展端口和网络控制器134。数据存储设备124可包括硬盘驱动器、软盘驱动器、⑶-ROM设备、闪存设备或者其它海量存储设备。
对于系统的另 一个实施例,执行具有点积指令的算法的执行单元可与片上系统配合使用。片上系统的一个实施例包括处理器和存储器。一种这样的系统的存储器是闪存。闪存可与处理器和其它系统部件位于相同的管芯上。另外,诸如存储控制器或图形控制器等其它逻辑块也可设置在片上系统中。图IB示出实现本发明的一个实施例的原理的数据处理系统140。本领域的技术人员容易理解,本文所述的实施例可与备选处理系统配合使用,而不会背离本发明的范围。计算机系统140包括能够执行包括点积操作的SMD操作的处理核心159。对于一个实施例,处理核心159表示任何类型的体系结构的处理单元,包括但不限于CISC、RISC或VLIW类型的体系结构。处理核心159还可适于以一种或多种加工技术制造,并且通过在机器可读媒体上充分详细地表示,可适合于促进所述制造。处理核心159包括执行单兀142、寄存器文件集合145和解码器144。处理核心159还包括对本发明的理解不必要的附加电路(图中未示出)。执行单元142用于执行处理核心159所接收的指令。除了识别典型的处理器指令之外,执行单元142还可识别用于对打包数据格式执行操作的打包指令集143中的指令。打包指令集143包括用于支持点积操作的指令,并且还可包括其它打包指令。执行单元142通过内部总线耦合到寄存器文件145。寄存器文件145表示处理核心159上用于存储包括数据在内的信息的存储区。如前所述,会理解到,用于存储打包数据的存储区不是关键的。执行单元142耦合到解码器144。解码器144用于将处理核心159所接收的指令解码为控制信号和/或微码入口点(entrypoint)。响应这些控制信号和/或微码入口点,执行单元142执行适当的操作。处理核心159与总线141耦合,用于与各种其它系统设备进行通信,它们例如可包括但不限于同步动态随机存取存储器(SDRAM)控制装置(control) 146、静态随机存取存储器(SDRAM)控制装置147、突发(burst)闪存接口 148、个人计算机存储卡国际联盟(PCMCIA)/压缩闪存(compact flash) (CF)卡控制装置149、液晶显示器(LCD)控制装置150、直接存储器存取(DMA)控制器151以及备选总线主接口 152。在一个实施例中,数据处理系统140还可包括I/O桥接器154,用于经由I/O总线153与各种I/O设备进行通信。这类I/O设备例如可包括但不限于通用异步接收器/发射器(UART) 155、通用串行总线(USB) 156、蓝牙无线UART 157和I/O扩展接口 158。数据处理系统140的一个实施例提供移动、网络和/或无线通信以及能够执行包括点积操作在内的SMD操作的处理核心159。处理核心159可采用各种音频、视频、成像和通信算法来编程,所述算法包括诸如沃尔什-哈达玛变换、快速傅立叶变换(FFT)、离散余弦变换(DCT)及其各自的逆变换之类的离散变换,诸如色彩空间变换、视频编码运动估计或视频解码运动补偿之类的压缩/解压缩技术,以及诸如脉冲编码调制(PCM)之类的调制/解调(MODEM)功能。本发明的一些实施例还可适用于图形应用,例如三维(“3D”)建模、呈现(rendering)、对象冲突检测、3D对象变换和照明等。图IC示出能够执行SMD点积操作的数据处理系统的又一备选实施例。根据一个备选实施例,数据处理系统160可包括主处理器166、SIMD协处理器161、高速缓冲存储器167和输入/输出系统168。输入/输出系统168可任选地耦合到无线接口 169。SIMD协处理器161能够执行包括点积操作在内的SMD操作。处理核心170可适合于以一种或多种加工技术制造,并且通过在机器可读媒体上充分详细地表示,可适合于促进包括处理核心170在内的数据处理系统160的全部或部分的制造。对于一个实施例,SMD协处理器161包括执行单元162和寄存器文件集合164。主处理器165的一个实施例包括解码器165,以识别供执行单元162执行的包括SMD点积计算指令在内的指令集163的指令。对于备选实施例,SMD协处理器161还包括解码器165B的至少一部分,以对指令集163的指令进行解码。处理核心170还包括对本发明的实施例的理解不必要的附加电路(图中未示出)。在操作中,主处理器166执行数据处理指令流,所述指令控制包括与高速缓冲存储器167和输入/输出系统168进行交互在内的一般类型的数据处理操作。嵌入数据处理指令流中的是SMD协处理器指令。主处理 器166的解码器165将这些SMD协处理器指令识别为属于应当由附属的SMD协处理器161来执行的类型。因此,主处理器166在协处理器总线166上发出这些SMD协处理器指令(或者表示SMD协处理器指令的控制信号),它们从所述总线上由任何附属的SMD协处理器来接收。在这种情况下,SIMD协处理器161将接受并执行发送给它的任何所接收的SMD协处理器指令。数据可经由无线接口 169来接收,以供SMD协处理器指令进行处理。对于一个实例,可采取数字信号的形式来接收语音通信,其可由SMD协处理器指令进行处理,以再生(regenerate)表示语音通信的数字音频样本。对于另一个实例,可采取数字比特流的形式来接收压缩音频和/或视频,其可由SMD协处理器指令进行处理,以再生数字音频样本和/或运动视频帧。对于处理核心170的一个实施例,主处理器166和SMD协处理器161集成到包括执行单元162、寄存器文件集合164和解码器165的单个处理核心170中,以识别包括SIMD点积指令在内的指令集163的指令。图2是根据本发明的一个实施例的处理器200的微体系结构的框图,所述处理器包括执行点积指令的逻辑电路。对于点积指令的一个实施例,该指令可将第一数据元素与第二数据元素相乘,并且将该乘积与第三和第四数据元素之积相加。在一些实施例中,点积指令可实现成对于具有字节、字、双字、四字等大小以及诸如单和双精度整数及浮点数据类型之类的数据类型的数据元素进行操作。在一个实施例中,有序前端201是处理器200的组成部分,它取出待执行的宏指令,并对它们进行准备以供之后在处理器流水线中使用。前端201可包括若干单元。在一个实施例中,指令预取器226从存储器中取出宏指令,并将其馈送到指令解码器228,指令解码器228转而将这些宏指令解码为称作微指令或微操作(又称作micro op或μ op)的机器可执行的原语。在一个实施例中,追踪高速缓存(tracecache) 230取出解码后的μ op,并将其组装为μ op队列234中的程序排序序列或路线(trace)供执行。当追踪高速缓存230遇到复杂宏指令时,微码ROM 232提供完成该操作所需的μ op。许多宏指令被转换为单个微操作,而其它的则需要若干微操作来完成整个操作。在一个实施例中,若需要四个以上微操作来完成宏指令,则解码器228访问微码ROM 232来对宏指令进行处理。对于一个实施例,可将打包点积指令解码为少量微操作以在指令解码器228上进行处理。在另一个实施例中,若需要多个微操作来完成该操作,则打包点积算法的指令可存储在微码ROM 232中。追踪高速缓存230参照入口点可编程逻辑阵列(PLA)来确定用于读取微码ROM 232中的点积算法的微码序列的正确微指令指针。在微码ROM 232完成当前宏指令的定序(sequencing)微操作之后,机器的前端201继续从追踪高速缓存230中取出微操作。某种SMD和其它多媒体类型的指令被看作复杂指令。大多数浮点相关的指令也是复杂指令。因此,当指令解码器228遇到复杂宏指令时,在适当位置上对微码ROM 232进行访问,以检索那个宏指令的微码序列。将执行那个宏指令所需的各个微操作传送给无序执行引擎203,以在适当的整数和浮点执行单元上执行。无序执行引擎203是在其中准备微指令供执行的单元。无序执行逻辑具有多个缓冲器以在微指令沿流水线前进并被安排执行时对所述微指令的流程进行平滑处理及重新排序来优化性能。分配器逻辑分配各μ op执行所需的机器缓冲器和资源。寄存器重命名逻辑将逻辑寄存器重命名到寄存器文件的条目上。在以下指令调度器之前,分配器还分配两个μ op队列之一中的各μ op的条目,所述两个队列中的一个用于存储器操作,一个用于非存储器操作存储器调度器,快速调度器202,慢速/通用浮点调度器204,以及简单浮点调度器206。μ op调度器202、204、206根据它们的相关输入寄存器操作数源的预备状态以及μ op完成其操作所需的执行资源的可用性来确定何时μ op准备好执行。该实施例的快速调度器202可在主时钟周期的每一半上进行调度,而其它调度器在每个主处理器时钟周期只可调度一次。调度器对分配端口进行仲裁,以调度μ op来执行。寄存器文件208、210位于调度器202、204、206与执行块211中的执行单元212、214、216、218、220、222、224之间。存在分别用于整数和浮点操作的独立寄存器文件208、210。该实施例的各寄存器文件208、210还包括旁路网络(bypass network),它可向新的相关μ op分流(bypass)或转发还未写入寄存器文件的刚完成的结果。整数寄存器文件208和浮点寄存器文件210还能互相传送数据。对于一个实施例,整数寄存器文件208被分为两个独立寄存器文件,一个寄存器文件用于数据的低阶32位,而第二寄存器文件用于数据的高阶32位。一个实施例的浮点寄存器文件210具有128位宽的条目,因为浮点指令通常具有从64到128位宽的操作数。执行块211包含执行单元212、214、216、218、220、222、224,指令实际上在这些执行单元中执行。该部分包括寄存器文件208、210,它们存储微指令需要执行的整数和浮点数据操作数值。该实施例的处理器200包括多个执行单元地址生成单元(AGU)212,AGU 214,快速ALU 216,快速ALU 218,慢速ALU 220,浮点ALU 222,浮点移动单元224。对于该实施例,浮点执行块222、224执行浮点、MMX, SIMD和SSE操作。该实施例的浮点ALU 222包括64位除64位浮点除法器,以执行除法、平方根及求余(remainder)微操作。对于本发明的实施例,涉及浮点值的任何动作采用浮点硬件进行。例如,整数格式与浮点格式之间的转换涉及浮点寄存器文件。类似地,浮点除法操作在浮点除法器上进行。另一方面,非浮点数值和整数类型采用整数硬件资源来处理。非常频繁的简单ALU运算转到高速ALU执行单元216、218。该实施例的快速ALU 216、218可采用半个时钟周期的有效等待时间来执行快速运算。对于一个实施例,大多数复杂整数操作转到慢速ALU 220,因为慢速ALU 220包括用于长等待时间类型的操作的整数执行硬件,所述操作例如乘数、移位、标志(flag)逻辑和分支处理。存储器加载/存储操作由AGU 212、21 4执行。对于该实施例,在对64位数据操作数执行整数操作的上下文中描述整数ALU216、218、220。在备选实施例中,ALU 216、218、220可被实现为支持包括16、32、128、256等的各种数据位。类似地,浮点单元222、224可被实现为支持具有各种宽度的位的一系列操作数。对于一个实施例,结合SIMD和多媒体指令,浮点单元222、224可对128位宽的打包数据操作数进行操作。在该实施例中,4 0 调度器202、204、206在父加载已经完成执行之前分派(dispatch)相关操作。由于μ op在处理器200中推测地调度和执行,所以处理器200还包括处理存储器未命中的逻辑。若数据加载在数据高速缓存中未命中,则在流水线中可能存在为调度器留下了暂时不正确数据的执行中(in flight)相关操作。重放(r印lay)机构跟踪并重新执行采用不正确数据的指令。只有相关操作才需要被重放,而允许不相关操作完成。处理器的一个实施例的 调度器和重放机构还设计成捕捉点积操作的指令序列。术语“寄存器”在本文中用来表示用作标识操作数的宏指令的一部分的板载(on-board)处理器存储单元。换言之,本文提到的寄存器是从处理器外部(从程序员的角度)可见的。但是,实施例的寄存器的含义不应当限于特定类型的电路。而是,实施例的寄存器只需要能够存储和提供数据以及执行本文所述的功能。本文所述的寄存器可通过处理器中的电路采用任何数量的不同技术来实现,例如专用物理寄存器、采用寄存器重命名的动态分配物理寄存器、专用和动态分配物理寄存器的组合等。在一个实施例中,整数寄存器存储32位整数数据。一个实施例的寄存器文件还包含用于打包数据的16个XMM和通用寄存器、8个多媒体(例如“EM64T”加法)多媒体SIMD寄存器。对于以下论述,寄存器被理解为设计成保存打包数据的数据寄存器,例如采用Intel Corporation (Santa Clara,California)开发的MMX技术实现的微处理器中的64位宽MMX 寄存器(在某些情况下又称作“mm”寄存器)。可用于整数和浮点这两种形式的这些MMX寄存器可与伴随SIMD和SSE指令的打包数据元素配合操作。类似地,与SSE2、SSE3、SSE4或者以上(一般性地称作“SSEx”)的技术有关的128位宽XMM寄存器也可用于保存这类打包数据操作数。在该实施例中,在存储打包数据和整数数据时,寄存器无需区分这两种数据类型。在以下附图的实例中,描述了多个数据操作数。图3A示出根据本发明的一个实施例的多媒体寄存器中的各种打包数据类型表示。图3A示出128位宽操作数的打包字节310、打包字320和打包双字(dword)330的数据类型。该实例的打包字节格式310是128位长的,并包含16个打包字节数据元素。字节在这里定义为8位的数据。各字节数据元素的信息是这样存储的字节O存储在O至7位,字节I存储在8至15位,字节2存储在16至23位,以及最后,字节15存储在120至127位。这样,寄存器中的所有可用的位都被使用。这种存储设置增加了处理器的存储效率。另外,通过访问16个数据元素,现在可并行地对16个数据元素执行一个操作。一般来说,数据元素是与相同长度的其它数据元素一起存储在单个寄存器或存储单元中的一段单独的数据。在与SSEx技术相关的打包数据序列中,XMM寄存器中存储的数据元素的数量是128位除以单独的数据元素的位的长度。类似地,在与MMX和SSE技术相关的打包数据序列中,MMX寄存器中存储的数据元素的数量是64位除以单独的数据元素的位的长度。虽然图3A所示的数据类型为128位长,但是,本发明的实施例还可与64位宽或者其它大小的操作数配合操作。该实例的打包字格式320是128位长的,并且包含8个打包字数据元素。各打包字包含16位的信息。图3A的打包双字格式330是128位长,并且包含四个打包双字数据元素。各打包双字数据元素包含32位的信息。打包四字是128位长的,并包含两个打包四字数据元素。图3B示出备选的寄存器中数据存储格式。各打包数据可包括一个以上独立数据元素。示出三种打包数据格式,即打包半字341、打包单字342和打包双字343。打包半字341、打包单字342和打包双字343的一个实施例包含定点数据元素。对于一备选实施例,打包半字341、打包单字342和打包双字343这三者中的一个或多个可包含浮点数据元素。打包半字341的一个备选实施例是包含八个16位数据元素的128位长的。打包单字342的一个实施例为128位长,并且包含四个32位数据元素。打包双字343的一个实施例为128位长,并且包含两个64位数据元素。大家会理解,这类打包数据格式还可扩展到其它寄存器长度,例如扩展到96位、160位、192位、224位、256位或者更大的长度。图3C示出根据本发明的一个实施例的多媒体寄存器中的各种有符号和无符号打包数据类型表示。无符号打包字节表示344示出在SMD寄存器中的无符号打包字节的存储。各字节数据元素的信息是这样存储的字节零存储在零至七位,字节一存储在八至十五位,字节二存储在十六至二十三位,以及最后,字节十五存储在一百二十至一百二十七位。这样,寄存器中的所有可用的位都被使用。这种存储设置可增加处理器的存储效率。另外,通过访问十六个数据元素,现在可通过并行方式对十六个数据元素执行一个操作。有符号打包字节表示345示出有符号打包字节的存储。注意,每一个字节数据元素的第八位是符号指示符。无符号打包字表示346示出如何在SMD寄存器中存储字七至字零。有符号打包字表示347与无符号打包字的寄存器内(in-register)表示346相似。注意,各字数据元素的第十六位是符号指示符。无符号打包双字表示348示出如何存储双字数据元素。有符号打包双字表示349与无符号打包双字的寄存器内表示348相似。注意,必要的符号位是各双字数据元素的第三十二位。图3D是对操作编码(操作码)格式360的一个实施例的描述,其中具有三十二或者更多位,以及寄存器/存储器操作数寻址模式符合在以下文献中描述的一种类型的操作码格式“IA-32Intel体系结构软件开发人员手册第2卷指令集参考”,可在万维网(www)的 intel. com/design/litcentr 上从 Intel Corporation (Santa Clara, CA)获得。在一个实施例中,点积操作可通过字段361和362这两者中的一个或多个来编码。可识别每个指令总共两个操作数位置,包括总共两个源操作数标识符364和365。对于点积指令的一个实施例,目标操作数标识符366与源操作数标识符364相同,而在其它实施例中,它们是不同的。对于一备选实施例,目标操作数标识符366与源操作数标识符365相同,而在其它实施例中,它们是不同的。在点积指令的一个实施例中,通过源操作数标识符364和365标识的源操作数之一被点积操作的结果重写,而在其它实施例中,标识符364对应于源寄存器元件,以及标识符365对应于目标寄存器元件。对于点积指令的一个实施例,操作数标识符364和365可用来标识32位或64位源和目标操作数。图3E是对具有四十或更多位的另一种备选操作编码(操作码)格式370的描述。操作码格式370与操作码格式360 —致,并包括任选的前置字节378。点积操作的类型可通过字段378、371和372这三者中的一个或多个来编码。可通过源操作数标识符374和375以及通过前置字节378来标识每个指令总共两个操作数位置。对于点积指令的一个实施 例,前置字节378可用来标识32位或64位源和目标操作数。对于点积指令的一个实施例,目标操作数标识符376与源操作数标识符374相同,而在其它实施例中,它们是不同的。对于一备选实施例,目标操作数标识符376与源操作数标识符375相同,而在其它实施例中,它们是不同的。在一个实施例中,点积操作将操作数标识符374和375所标识的操作数之一与操作数标识符374和375所标识的另一个操作数相乘,该点积操作的结果会重写所述操作数中的一个,而在其它实施例中,标识符374和375所标识的操作数的点积被写入另一个寄存器中的另一个数据元素。操作码格式360和370允许部分由MOD字段363和373以及由任选的scale-index-base和偏移字节(displacement byte)指定的寄存器到寄存器(register to regis ter)、存储器到寄存器(memory to register)、寄存器通过存储器(register by memory)、寄存器通过寄存器(register by register)、寄存器通过立即寻址(register by immediate)、寄存器至Ij存储器(register to memory)的寻址。接下来看图3F,在一些备选实施例中,64位单指令多数据(SMD)算术运算可通过协处理器数据处理(CDP)指令来执行。操作编码(操作码)格式380示出具有CDP操作码字段382和389的一种这样的⑶P指令。对于点积操作的备选实施例,⑶P指令的类型可通过字段383、384、387和388这四者中的一个或多个来编码。可标识每个指令总共三个操作数位置,包括总共两个源操作数标识符385、390和一个目标操作数标识符386。协处理器的一个实施例可对8、16、32和64位的值进行操作。对于一个实施例,对整数数据元素执行点积操作。在一些实施例中,可采用选择字段381来有条件地执行点积指令。对于一些点积指令,源数据大小可通过字段383来编码。在点积指令的一些实施例中,可在SMD字段上进行零(Z)、负值(N)、进位(C)和溢出(V)检测。对于一些指令,饱和的类型可通过字段384来编码。图4是根据本发明对打包数据操作数执行点积操作的逻辑的一个实施例的框图。本发明的实施例可实现为与诸如以上所述之类的各种类型的操作数配合工作。对于一种实现,根据本发明的点积操作实现为对指定数据类型进行操作的指令集。例如,提供点积打包单精度(DPPS)指令以确定包括整数和浮点在内的32位数据类型的点积。类似地,提供点积打包双精度(DPPD)指令以确定包括整数和浮点在内的64位数据类型的点积。虽然这些指令具有不同名称,但它们执行的一般点积操作是相似的。为了简洁起见,以下论述和实例在处理数据元素的点积指令的上下文中进行。在一个实施例中,点积指令识别各种信息,包括第一数据操作数DATAA410的标识符和第二数据操作数DATAB420的标识符,以及点积操作的所得结果RESULTANT440的标识符(在一个实施例中,它可能与第一数据操作数标识符之一相同)。对于以下论述,DATAA, DATAB和RESULTANT —般称作操作数或数据块,但不限于此,并且还包括寄存器、寄存器文件和存储单元。在一个实施例中,将各点积指令(DPPS、DPPD)解码为一个微操作。在一备选实施例中,可将各指令解码为各种数量的微操作,以对数据操作数执行点积操作。对于该实例,操作数410、420是在具有字宽数据元素的源寄存器/存储器中存储的128位宽的信息段。在一个实施例中,操作数410、420保存在128位长的SMD寄存器(如128位SSEx XMM寄存器)中。对于一个实施例,RESULTANT 440也是XMM数据寄存器。此外,RESULTANT 440也可能是与源操作数之一相同的寄存器或存储单元。根据具体实现,操作数和寄存器可能是诸如32、64和256位等的其它长度,并且具有字节、双字或四字大小的数据元素。虽然该实例的数据元素为字大小,但是,同样的概念可扩展到字节和双字大小的元素。在其中的数据操作数为64位宽的一个实施例中,MMX寄存器用来代替XMM寄存器。该实例中的第一操作数410包括八个数据元素的集合A3、A2、Al和A0。各个单独的数据元素对应于所得结果440中的数据元素位置。第二操作数420包括八个数据段的另一个集合B3、B2、B1和BO。在这里,数据段具有相等长度,并且各包括数据的单字(32位)。但是,数据元素和数据元素位置可具有与字不同的其它粒度(granularity)。若各数据元素为字节(8位)、双字(32位)或四字(64位),则128位操作数分别具有十六字节宽、四个双字宽或者两个四字宽的数据元素。本发明的实施例不限于特定长度的数据操作数或数据段,而是可能对于各实现来适当地确定大小。
操作数410、420可驻留在寄存器或存储单元或寄存器文件或者它们的组合中。数据操作数410、420与点积指令一起被发送到处理器中的执行单元的点积计算逻辑430。在一个实施例中,当点积指令到达执行单元时,先前应当已经在处理器流水线中对指令进行了解码。因此,点积指令可能采取微操作(μορ)或者某种其它已解码格式的形式。对于一个实施例,在点积计算逻辑430上接收两个数据操作数410、420。点积计算逻辑430产生第一操作数410的两个数据元素的第一乘积,以及处于第二操作数420的对应数据元素位置中的两个数据元素的第二乘积,以及将第一和第二乘积之和存储在所得结果440中的适当位置中,所得结果可能与第一或第二操作数对应于相同的存储单元。在一个实施例中,第一和第二操作数中的数据元素为单精度(例如32位),而在其它实施例中,第一和第二操作数中的数据元素为双精度(例如64位)。对于一个实施例,并行处理所有数据位置的数据元素。在另一个实施例中,一次可一起处理某个部分的数据元素位置。在一个实施例中,根据是执行DPro还是DPPS,所得结果440分别包括两个或四个可能的点积结果位置dot-productA31_q、dot_productA63_32、D0T-PR0DUCTA95_64、D0T-PR0DUCTA127_96 (对于 DPPS 指令的结果),以及 dot-productA63_。、D0T-PR0DUCTa127_64 (对于 DPPD 指令的结果)。在一个实施例中,所得结果440中的点积结果的位置取决于与点积指令相关联的选择字段。例如,对于DPPS指令,所得结果440中的点积结果的位置在选择字段等于第一值时为Dot-PRoDucta3K,在选择字段等于第二值时为dot-productA63_32,在选择字段等于第三值时为dot-productA95_64,以及在选择字段等于第四值时为dot-producta127_64。在DPro指令的情况下,所得结果440中的点积结果的位置在选择字段为第一值时是D0T-PR0DUCTA63_q,在选择字段为第二值时是dot-producta127_64。图5A示出根据本发明的一个实施例的点积指令的操作。具体来说,图5A示出根据一个实施例的DPPS指令的操作。在一个实施例中,图5A所示的实例的点积操作实质上可由图4的点积计算逻辑430来执行。在其它实施例中,图5A的点积操作可由包括硬件、软件或者它们的某种结合在内的其它逻辑来执行。在其它实施例中,图4、图5A和图5B所示的操作可按照任何组合或顺序来执行,以产生点积结果。在一个实施例中,图5A示出包括总共存储各为32位的四个单精度浮点或整数值A0-A3的存储单元的128位源寄存器501a。类似地,图5A中所示的是包括总共存储各为32位的四个单精度浮点或整数值B0-B3的存储单元的128位目标寄存器505a。在一个实施例中,源寄存器中存储的各值A0-A3与目标寄存器的对应位置中存储的对应值B0-B3相乘,以及各所得值A0*B0、A1*B 1、A2*B2、A3*B3(本文中称作“乘积”)存储在包括总共存储各为32位的四个单精度浮点或整数值的存储单元的第一 128位临时寄存器(“TEMPI”) 510a的对应存储单元中。在一个实施例中,将乘积对相加在一起,以及各个和数(本文中称作“中间和数”)存储到第二 128位临时寄存器(“TEMP2”) 515a和第三128位临时寄存器(“TEMP3”)520a的存储单元中。在一个实施例中,乘积存储到第一和第二临时寄存器的最低有效32位元素存储单元中。在其它实施例中,它们可存储在第一和第二临时寄存器的其它元素存储单元中。此外,在一些实施例中,乘积可存储在相同寄存器(如第一或第二临时寄存器)中。在一个实施例中,中间和数相加在一起(本文中称作“最终和数”),并存储到第四128位临时寄存器(“TEMP4”)525a的存储单元中。在一个实施例中,最终和数存储到TEMP4 的最低有效32位存储单元中,而在其它实施例中,最终和数存储到TEMP4的其它存储单元中。最终和数然后存储到目标寄存器505a的存储单元中。最终和数将要存储到其中的准确存储单元可取决于点积指令中可配置的变量。在一个实施例中,包含多个位存储单元的立即字段(“IMMy[x]”)可用来确定最终和数将要存储到其中的目标寄存器存储单元。例如,在一个实施例中,若IMM8
字段包含第一值(例如“I”),则最终和数存储到目标寄存器的存储单元BO中,若IMM8[1]字段包含第一值(例如“I”),则最终和数存储到存储单元BI中,若IMM8[2]字段包含第一值(例如“I”),则最终和数存储到目标寄存器的存储单元B2中,以及若IMM8 [3]字段包含第一值(例如“ I”),则最终和数存储到目标寄存器的存储单元B3中。在其它实施例中,其它立即字段可用来确定最终和数将要存储到其中的目标寄存器中的存储单元。在一个实施例中,立即字段可用来控制各乘法和加法运算是否在图5A所示的操作中执行。例如,IMM8[4]可用来表明(例如通过设置为“O”或“1”)A0是否将与BO相乘且结果被存储到TEMPI中。类似地,IMM8[5]可用来表明(例如通过设置为“O”或“I”)Al是否将与BI相乘且结果被存储到TEMPI中。同样,IMM8[6]可用来表明(例如通过设置为“O”或“1”)A2是否将与Β2相乘且结果被存储到TEMPI中。最后,IMM8[7]可用来表明(例如通过设置为“O”或“I”)A3是否将与B3相乘且结果被存储到TEMPI中。图5B示出根据一个实施例的DPH)指令的操作。DPPS与DPTO指令之间的一个差别在于,DPro对双精度浮点和整数值(例如64位值)而不是单精度值进行操作。相应地,在一个实施例中,执行DPro指令与执行DPPS指令相比,存在更少要管理的数据元素,因此涉及更少的中间操作和存储装置(例如寄存器)。在一个实施例中,图5B示出包括总共存储各为64位的两个双精度浮点或整数值AO-Al的存储单元的128位源寄存器501b。类似地,图5B中所示的是包括总共存储各为64位的两个双精度浮点或整数值BO-Bl的存储单元的128位目标寄存器505b。在一个实施例中,源寄存器中存储的各个值AO-Al与目标寄存器的对应位置中存储的对应值BO-Bl相乘,以及各所得结果值A0*B0、A1*B1 (本文中称作“乘积”)存储在包括总共存储各为64位的两个双精度浮点或整数值的存储单元的第一 128位临时寄存器(“TEMPl”)510b的对应存储单元中。在一个实施例中,乘积对相加在一起,以及各个和数(本文中称作“最终和数”)存储到第二 128位临时寄存器(“TEMP2”)515b的存储单元中。在一个实施例中,乘积与最终和数分别存储到第一和第二临时寄存器的最低有效64位元素存储单元中。在其它实施例中,它们可存储在第一和第二临时寄存器的其它元素存储单元中。在一个实施例中,最终和数存储到目标寄存器505b的存储单元中。最终和数将要存储到其中的准确存储单元可取决于点积指令中可配置的变量。在一个实施例中,包含多个位存储单元的立即字段(“IMMy[x]”)可用来确定最终和数将要存储到其中的目标寄存器存储单元。例如,在一个实施例中,若IMM8
字段包含第一值(例如“1”),则最终和数存储到目标寄存器的存储单元BO中,若IMM8[1]字段包含第一值(例如“I”),则最终和数存储到存储单元BI中。在其它实施例中,其它立即字段可用来确定最终和数将要存储到其中的目标寄存器中的存储单元。在一个实施例中,立即字段可用来控制各乘法运算是否在图5B所示的点积操作中执行。例如,IMM8 [4]可用来表明(例如通过设置为“O”或“1”)A0是否将与BO相乘且结果被存储到TEMPI中。类似地,IMM8[5]可用来表明(例如通过设置为“O”或“I”)Al是否将与B I相乘且结果被存储到TEMPI中。在其它实施例中,可采用用于确定是否执行点积的乘法运算的其它控制技术。图6A是根据一个实施例对单精度整数或浮点值执行点积操作的电路600a的框图。该实施例的电路600a通过乘法器610a_613a将两个寄存器601a和605a的对应单精度元素相乘,其结果可采用立即字段IMM8 [7:4]由复用器615a-618a进行选择。作为备选的方案,复用器615a-618a可选择零值而不是各元素的乘法运算的对应乘积。复用器615a_618a选择的结果然后由加法器620a相加在一起,且相加的结果被存储在结果寄存器630a的单元的任一个中,根据立即字段IMM8 [3:0]的值,所述结果寄存器采用复用器625a-628a来选择来自加法器620a的对应和数结果。在一个实施例中,若和数结果没有被选择来存储在结果单元中,则复用器625a-628a可选择零值来填充结果寄存器630a的单元。在其它实施例中,更多加法器可用来产生各个乘积之和。此外,在一些实施例中,中间存储单元可用来存储乘积或和数结果,直到对它们进行进一步操作为止。图6B是根据一个实施例对单精度整数或浮点值执行点积操作的电路600b的框图。该实施例的电路600b通过乘法器610b、612b将两个寄存器601b和605b的对应单精度元素相乘,其结果可采用立即字段IMM8[7:4]由复用器615b、617b进行选择。作为备选的方案,复用器615b、618b可选择零值而不是各元素的乘法运算的对应乘积。复用器615b、618b选择的结果然后由加法器620b相加在一起,且相加的结果被存储在结果寄存器630b的单元的任一个中,根据立即字段IMM8 [3:0]的值,所述结果寄存器采用复用器625b、627b来选择来自加法器620b的对应和数结果。在一个实施例中,若和数结果没有被选择来存储在结果单元中,则复用器625b-627b可选择零值来填充结果寄存器630b的单元。在其它实施例中,更多加法器可用来产生各个乘积之和。此外,在一些实施例中,中间存储单元可用来存储乘积或和数结果,直到对它们进行进一步操作为止。图7A是根据一个实施例执行DPPS指令的操作的伪码表示。图7A所示的伪码表明,源寄存器(“SRC”)中在31-0位中存储的单精度浮点或整数值将与目标寄存器(“DEST”)中在31-0位中存储的单精度浮点或整数值相乘,且仅当立即字段(“IMM8[4]”)中存储的立即值等于“I”时,才将结果存储在临时寄存器(“TEMPI”)的31-0位中。否则,位存储单元31-0可包含空值,如全零。图7A中还示出了伪码来表明,SRC寄存器中在63-32位中存储的单精度浮点或整数值将与DEST寄存器中在63-32位中存储的单精度浮点或整数值相乘,且仅当立即字段(“IMM8[5]”)中存储的立即值等于“I”时,才将结果存储在TEMPI寄存器的63-32位中。否则,位存储单元63-32可包含空值,如全零。
类似地,图7A中还示出了伪码来表明,SRC寄存器中在95-64位中存储的单精度浮点或整数值将与DEST寄存器中在95-64位中存储的单精度浮点或整数值相乘,且仅当立即字段(“IMM8[6]”)中存储的立即值等于“I”时,才将结果存储在TEMPI寄存器的95-64位中。否则,位存储单元95-64可包含空值,如全零。最后,图7A中还示出了伪码来表明,SRC寄存器中在127-96位中存储的单精度浮点或整数值将与DEST寄存器中在127-96位中存储的单精度浮点或整数值相乘,且仅当立即字段(“IMM8[7]”)中存储的立即值等于“I”时,才将结果存储在TEMPI寄存器的127-96位中。否则,位存储单元127-96可包含空值,如全零。接下来,图7A示出TEMPI的31-0位被加到TEMPI的63-32位,且结果被存储到第二临时寄存器(“TEMP2”)的位存储单元31-0中。类似地,TEMPI的95-64位被加到TEMPI的127-96位,且结果被存储到第三临时寄存器(“TEMP3”)的位存储单元31-0中。最后,TEMP2的31-0位被加到TEMP3的31-0位,且结果被存储到第四临时寄存器(“TEMP4”)的位存储单元31-0中。在一个实施例中,临时寄存器中存储的数据然后被存储到DEST寄存器中。要存储数据的DEST寄存器中的具体位置可取决于DPPS指令中的其它字段,如IMM8[x]中的字段。具体来说,图7A说明,在一个实施例中,TEMP4的31-0位在IMM8
等于“ I”时存储到DEST位存储单元31-0中,在IMM8[1]等于“I”时存储到DEST位存储单元63-32中,在IMM8[2]等于“ 1 ”时存储到DEST位存储单元95-64中,或者在IMM8 [3]等于“ I ”时存储到DEST位存储单元127-96中。否则,对应的DEST位存储单元将包含空值,如全零。图7B是根据一个实施例执行DPF1D指令的操作的伪码表示。图7B所示的伪码表明,源寄存器(“SRC”)中在63-0位中存储的单精度浮点或整数值将与目标寄存器(“DEST”)中在63-0位中存储的单精度浮点或整数值相乘,且仅当立即字段(“IMM8[4]”)中存储的立即值等于“I”时,才将结果存储在临时寄存器(“TEMPI”)的63-0位中。否则,位存储单元63-0可包含空值,如全零。图7B中还示出了伪码来表明,SRC寄存器中在127-64位中存储的单精度浮点或整数值将与DEST寄存器中在127-64位中存储的单精度浮点或整数值相乘,且仅当立即字段(“IMM8[5]”)中存储的立即值等于“I”时,才将结果存储在TEMPI寄存器的127-64位中。否则,位存储单元127-64可包含空值,如全零。接下来,图7B示出,TEMPI的63-0位被加到TEMPI的127-64位,且结果被存储到第二临时寄存器(“TEMP2”)的位存储单元63-0中。在一个实施例中,临时寄存器中存储的数据然后可存储到DEST寄存器中。要存储数据的DEST寄存器中的具体位置可取决于DPPS指令中的其它字段,如IMM8[x]中的字段。具体地说,图7A示出,在一个实施例中,若IMM8 [O]等于“ I ”,则TEMP2的63-0位存储到DEST位存储单元63-0中,或者若IMM8 [I]等于“ I ”,则TEMP2的63-0位存储在DEST位存储单元127-64中。否则,对应的DEST位存储单元将包含空值,如全零。图7A和图7B中公开的操作只是可用于本发明的一个或多个实施例的操作的一种表示。具体地说,图7A和图7B所示的伪码对应于按照具有128位寄存器的一个或多个处理器体系结构所执行的操作。其它实施例可在具有任何大小的寄存器或者其它类型的存储区的处理器体系结构中执行。此外,其它实施例可能不采用与图7A和图7B中所示的寄存器完全相同的寄存器。例如,在一些实施例中,不同数量的临时寄存器或者根本没有寄存器可用来存储操作数。最后,本发明的实施例可采用任何数量的寄存器或数据类型在众多处理器或处理核心之间来执行。
这样,公开了用于执行点积操作的技术。虽然在附图中描述和示出了某些示范性实施例,但是要理解,这些实施例只是对宽泛的发明的说明而不是限制,并且本发明不限于所示及所述的具体构造和设置,因为本领域的技术人员在研究本公开之后可能会想到其它各种修改。在例如成长迅速并且不易预见进一步发展的这样的技术领域中,通过实现技术发展来推动,可在不背离本公开的原理或所附权利要求的范围的前提下,容易地对所公开的实施例在设置和细节方面进行修改。
权利要求
1.一种用于执行点积运算的处理器,包括解码器,用于对单指令多数据(SIMD)点积指令进行解码,该点积指令指定存储包括第一数据值和第三数据值的第一打包操作数的第一寄存器,存储包括第二数据值和第四数据值的第二打包操作数的第二寄存器,和控制值;以及逻辑,对解码的SIMD点积指令作出响应,取决于所述控制值从所述第一打包操作数和所述第二打包操作数中选择各自的数据值,以便将它们的乘积包括在点积中,该逻辑包括将所选的第一数据值和第二数据值相乘以产生第一乘积的第一乘法器、将所选的第三数据值和第四数据值相乘以产生第二乘积的第二乘法器,该逻辑还包括至少将所述第一乘积和所述第二乘积相加在一起以产生和数的加法器,并取决于控制值将和数或空值存储为目标寄存器的第一打包值,以及取决于控制值将和数或空值存储为目标寄存器的第二打包值。
2.如权利要求I所述的处理器,其中,所述第二寄存器与所述目标寄存器相同。
3.如权利要求I或2所述的处理器,其中,所述第一打包操作数还包括第五数据值且所述第二打包操作数包括第六数据值,且其中所述逻辑还包括将所选的第五数据值和第六数据值相乘以产生第三乘积的第三乘法器,至少将所述第一乘积、所述第二乘积和所述第三乘积相加在一起以产生和数的加法器。
4.如权利要求3所述的处理器,其中,所述逻辑还取决于控制值将所述和数或空值存储为目标寄存器的第三打包值。
5.如权利要求3或4所述的处理器,其中,所述第一打包操作数还包括第七数据值且所述第二打包操作数包括第八数据值,且其中所述逻辑还包括将所选的第七数据值和第八数据值相乘以产生第四乘积的第四乘法器,至少将所述第一乘积、所述第二乘积、所述第三乘积和所述第四乘积相加在一起以产生和数的加法器。
6.如权利要求5所述的处理器,其中,所述逻辑还取决于控制值将所述和数或空值存储为目标寄存器的第四打包值。
7.如权利要求1-6中任一项所述的处理器,其中,所述逻辑还包括取决于控制值的第一位,在所述第一乘积和空值之间进行选择的第一复用器。
8.如权利要求7所述的处理器,其中,所述逻辑还包括取决于控制值的第二位,在所述第二乘积和空值之间进行选择的第二复用器。
9.如权利要求8所述的处理器,其中,所述逻辑还包括在将要存储在目标寄存器的第一单元中的所述和数和空值之间进行选择的第三复用器。
10.如权利要求9所述的处理器,其中,所述逻辑还包括在将要存储在目标寄存器的第二单元中的所述和数和空值之间进行选择的第四复用器。
11.如权利要求I或2所述的处理器,其中,所述第一打包操作数和第二打包操作数包括为64位整数值的数据值。
12.如权利要求I或2所述的处理器,其中,所述第一打包操作数和第二打包操作数包括为64位浮点值的数据值。
13.如权利要求1-10中任一项所述的处理器,其中,所述第一打包操作数和第二打包操作数包括为32位整数值的数据值。
14.如权利要求1-10中任一项所述的处理器,其中,所述第一打包操作数和第二打包操作数包括为32位浮点值的数据值。
15.如权利要求1-14中任一项所述的处理器,其中,所述第一寄存器和第二寄存器将存储至少128位数据。
16.一种用于按照由点积指令指示的控制值执行单指令多数据(SIMD)点积指令的方法,该方法包括 按照所述控制值,从第一打包操作数和第二打包操作数中选择各自的数据元素以便将它们的乘积包括在点积中; 将第一打包操作数的第一对应的数据元素和第二打包操作数的第一对应的数据元素相乘以产生所选的第一乘积; 将第一打包操作数的第二对应的数据元素和第二打包操作数的第二对应的数据元素相乘以产生所选的第二乘积; 将所选的第一乘积与所选的第二乘积相加在一起,以至少部分产生点积结果;以及按照所述控制值,或者将所述点积结果或者将零值存储为目标操作数的第一打包值,以及或者将所述点积结果或者将零值存储为目标操作数的第二打包值。
17.如权利要求16所述的方法,还包括 将第一打包操作数的第三对应的数据元素和第二打包操作数的第三对应的数据元素相乘以产生所选的第三乘积; 将所选的第一乘积、所选的第二乘积与所选的第三乘积相加在一起,以至少部分产生点积结果;以及 按照所述控制值,或者将所述点积结果或者将零值存储为目标操作数的第三打包值。
18.如权利要求17所述的方法,还包括 将第一打包操作数的第四对应的数据元素和第二打包操作数的第四对应的数据元素相乘以产生所选的第四乘积; 将所选的第一乘积、所选的第二乘积、所选的第三乘积与所选的第四乘积相加在一起,以至少部分产生点积结果;以及 按照所述控制值,或者将所述点积结果或者将零值存储为目标操作数的第四打包值。
19.如权利要求16-18中任一项所述的方法,其中,所述第一打包操作数的第一和第二对应的数据元素以及所述第二打包操作数的第一和第二对应的数据元素为32位浮点值。
20.如权利要求16所述的方法,其中,所述第一打包操作数的第一和第二对应的数据元素以及所述第二打包操作数的第一和第二对应的数据元素为64位浮点值。
21.—种处理系统,包括 存储单指令多数据(SIMD)点积指令的存储器; 耦合到所述存储器的处理器,用于对多个操作数执行SMD点积指令,每个操作数包括可按照由SIMD点积指令指示的控制值选择的多个对应的打包值,以便将它们的乘积包括在点积中,并取决于控制值将点积或零值存储为目标操作数的第一打包值,以及取决于控制值将点积或零值存储为目标操作数的第二打包值。
22.如权利要求21所述的处理系统,其中,为了将它们的乘积包括在点积中而按照控制值选择的对应的打包值包括 第一打包操作数的第一对应的数据元素和第二打包操作数的第一对应的数据元素;以及第一打包操作数的第二对应的数据元素和第二打包操作数的第二对应的数据元素。
23.如权利要求22所述的处理系统,其中,为了将它们的乘积包括在点积中而按照控制值选择的对应的打包值包括第一打包操作数的第三对应的数据元素和第二打包操作数的第三对应的数据元素。
24.如权利要求23所述的处理系统,其中,所述处理器对所述多个操作数执行SMD点积指令并且还取决于控制值将点积或零值存储为目标操作数的第三打包值。
25.如权利要求24所述的处理系统,其中,为了将它们的乘积包括在点积中而按照控制值选择的对应的打包值包括第一打包操作数的第四对应的数据元素和第二打包操作数的第四对应的数据元素,以及其中所述处理器还取决于控制值将点积或零值存储为目标操作数的第四打包值。
26.如权利要求21-25中任一项所述的处理系统,其中,所述SMD点积指令包含源操作数指示符、目标操作数指示符以及至少一个立即值指示符。
27.如权利要求26所述的处理系统,其中,所述源操作数指示符包括具有存储多个打包值的多个单元的源寄存器的地址。
28.如权利要求26或27所述的处理系统,其中,所述目标操作数指示符包括具有存储多个打包值的多个单元的目标寄存器的地址。
29.如权利要求26-28中任一项所述的处理系统,其中,所述立即值指示符包括多个控制位。
30.如权利要求23-29中任一项所述的处理系统,其中,多个对应的打包值各为双精度整数。
31.如权利要求23-29中任一项所述的处理系统,其中,多个对应的打包值各为双精度浮点值。
32.如权利要求23-29中任一项所述的处理系统,其中,多个对应的打包值各为单精度整数。
33.如权利要求23-29中任一项所述的处理系统,其中,多个对应的打包值各为单精度浮点值。
全文摘要
本发明的名称是“用于执行点积运算的指令和逻辑”。本发明提供了用于执行点积操作的方法、装置和程序部件。在一个实施例中,装置包括执行第一指令的执行资源。响应第一指令,所述执行资源将等于至少两个操作数的点积的结果值存储到某个存储单元中。
文档编号G06F7/544GK102622203SQ20111046073
公开日2012年8月1日 申请日期2007年9月20日 优先权日2006年9月20日
发明者C·德西尔瓦, M·塞科尼, M·布克斯顿, R·佐哈, R·帕塔萨拉蒂, S·钦努帕蒂 申请人:英特尔公司