用于执行点积运算的指令和逻辑的制作方法

文档序号:6614076阅读:211来源:国知局
专利名称:用于执行点积运算的指令和逻辑的制作方法
技术领域
本发明涉及执行数学运算的处理装置及相关软件和软件序列的 领域。
背景技术
计算机系统已经越来越深入我们的社会。计算机的处理能力已 经提高了各种职业的工人的效率和生产力。由于购买和拥有计算机 的费用持续下降,所以越来越多的消费者能够利用更新、更快的机 器。此外,许多人由于使用自由而乐于使用笔记本电脑。移动计算 机使用户可在离开办公室或旅4亍时轻松地传输数据以及进行工作。 这种情况是营销人员、公司管理人员甚至学生常见的。
随着处理器技术的进步,还产生了更新的软件代码来在具有这 些处理器的机器上运行。用户一般预期并要求他们的计算机的更高 性能,而不管所使用的软件类型。从处理器内实际执行的指令和操 作的种类中可能产生 一 个这样的问题。根据操作的复杂度和/或所需 电路的类型,某些类型的操作需要更多时间来完成。这提供了优化 在处理器内部执行某些复杂操作的方式的机会。
十多年来,媒体应用推动了微处理器的发展。实际上,媒体应 用推动了近年来的大多数计算升级。这些升级主要在消费者方面发 生,但是,对于娱乐增强教育和通信目的,在企业方面也看到显著 的进步。然而,还有媒体应用需要更高的计算要求。因此,将来的 个人计算体验在视听效果方面更为丰富,并且更容易使用,更重要 的是,计算将与通信融合。
因此,图像的显示以及共同称作内容的音频和视频数据的回放 已经逐渐成为当前计算装置的流行应用。滤波和巻积操作是对内容 数据、如图像音频和视频数据所执行的最常见操作的一部分。这类 操作是计算密集的,但是提供可通过采用各种数据存储装置(如单
指令多数据(SIMD)寄存器)的有效实现来利用的高级数据并行性。 许多当前的体系结构还需要多个操作、指令或子指令(往往称作"微
操作"或>op")来对多个操作数执行各种数学运算,由此减小吞
吐量并增加执行数学运算所需的时钟周期数量。
例如,可能需要由多个指令组成的指令序列来执行产生点积所 需的一个或多个运算,包括相加由处理装置、系统或计算机程序中 的各种数据类型所表示的两个或两个以上数值之积。但是,这类现 有技术可能需要许多处理周期,并且可能使处理器或系统消耗不必 要的功率以产生点积。此外, 一些现有技术可能在可进行操作的操 作数的数据类型方面受到限制。

发明内容
根据本发明的一个方面,提供了一种已在其中存储了指令的机 器可读介质,所述指令在由机器执行时,使所述机器执行包括以下
步骤的方法确定各具有第 一数据类型的多个打包值的至少两个操 作数的点积结果;存储所述点积结果。
根据本发明的另一方面,提供了一种装置,包括第一逻辑, 对第 一数据类型的至少两个打包操作数执行单指令多数据点积指 令。
根据本发明的又一方面,提供了一种系统,包括第一存储器,
存储单指令多数据点积指令;处理器,连接到所述第一存储器以执
行所述单指令多数据点积指令。
根据本发明的再一方面,提供了一种方法,包括将第一打包 操作数的第一数据元素与第二打包操作数的第一数据元素相乘,以
产生第一乘积;将所述第一打包操作数的第二数据元素与所述第二
打包操作数的第二数据元素相乘,以产生第二乘积;将所述第一乘 积与所述第二乘积相加,以产生点积结果。
此外,本发明还提供了一种处理器,包括源寄存器,存储包 括第一数据值和第二数据值的第一打包操作数;目标寄存器,存储 包括第三数据值和第四数据值的第二打包操作数;根据所述点积指 令所指示的控制值来执行单指令多数据点积指令的逻辑,所述逻辑 包括将所述第 一数据值和第三婆t据值相乘以产生第 一乘积的第 一乘 法器、将所述第二数据值和第四数据值相乘以产生第二乘积的第二 乘法器,所述逻辑还包括将所述第 一乘积和第二乘积相加以产生至 少一个和数的至少一个加法器。


通过附图、作为实例而非限制地来说明本发明
图1A是采用处理器组成的计算机系统的框图,包括根据本发明 的一个实施例执行点积操作的指令的执行单元;
图1B是根据本发明的一个备选实施例的另一个示范性计算机系 统的框图1C是根据本发明的另一个备选实施例的再一个示范性计算机 系统的框图2是一个实施例的处理器的微体系结构的框图,包括根据本 发明执行点积操作的逻辑电路;
图3A示出根据本发明的一个实施例的多媒体寄存器中的各种打 包数据类型表示;
图3B示出根椐一个备选实施例的打包数据类型;
图3C示出根据本发明的一个实施例的多媒体寄存器中的各种有 符号和无符号打包数据类型表示;
图3D示出一种操作编码(操作码)格式的一个实施例;图3E示出一种备选操作编码(操作码)格式; 图3F示出又一种备选操作编码格式;
图4是根据本发明对打包数据操作数执行点积操作的逻辑的一个 实施例的框图5A是根据本发明的一个实施例对单精度打包数据操作数执行 点积操作的逻辑的框图5B是根据本发明的一个实施例对双精度打包数据操作数^M亍 点积操作的逻辑的框图6A是根据本发明的一个实雄例用于执行点积操作的电路的框
图;'
图6B是根据本发明的另一个实施例用于执行点积操作的电路的 框图7是根据一个实施例对数据进行打包符号操作的示意图; 图7A是根据一个实施例可通过执行DPPS指令来执行的操作的 伪码表示;
图7B是根据一个实施例可通过执行DPPD指令来执行的操作的
伪码表示。
具体实施例方式
以下说明描述在处理装置、计算机系统或软件程序中执行点积操 作的一种技术的实施例。在以下描述中,阐述诸如处理器类型、微体 系结构条件、事件、启用机制等的大量具体细节,以提供对本发明的 透彻理解。然而,本领域的技术人员会理解,没有这类具体细节,也 可实施本发明。另外,没有详细说明一些公知的结构、电路等,以免 不必要地影响对本发明的理解。
虽然参照处理器来描述以下实施例,但是,其它实施例适用于其 它类型的集成电路和逻辑装置。本发明的相同技术和理论可容易地应 用到可获益于较高流水线吞吐量和改进性能的其它类型的电路或半 导体装置。本发明的理论适用于执行数据操作的任何处理器或
机器。但是,本发明不限于执行256位、128位、64位、32位或16 位数据操作的处理器或机器,而是可适用于其中需要操作打包数据 的任何处理器和机器。
为便于说明,以下描述中l^出了大量具体细节,以便透彻地理 解本发明。但是,本领域的技术人员会理解,为了实施本发明,这 些具体细节不是必需的。在其它情况下,公知的电气结构和电路没 有进行具体的详细阐述,以免不必要地影响对本发明的理解。另外, 以下描述提供实例,以及为了"i兌明的目的,附图示出各种实例。但 是,这些实例不应当以限制的意义来理解,因为它们只是要提供本 发明的实例,而不是提供本发明的所有可能实现的穷尽列表。
虽然以下实例在执行单元和逻辑电路的上下文中来描述指令处 理和分配,但是,本发明的其它实施例可通过软件来实现。在一个 实施例中,本发明的方法以机器可执行指令来体现。这些指令可用 于使采用指令编程的通用或专用处理器执行本发明的步骤。本发明 可作为计算机程序产品或软件来提供,它可包括其中已存储指令的 机器或计算机可读介质,这些指令可用于对计算机(或其它电子设 备)编程以执行根据本发明的过程。作为备选的方案,本发明的步 骤可由包含用于执行所述步骤的硬连线逻辑的特定硬件部件来执 行,或者由已编程计算机部件和定制硬件部件的任何组合来执行。 这种软件可存储在系统的存储器中。类似地,代码可经由网络或者 通过其它计算机可读介质来分配。
因此,机器可读介质可包括用于存储或传输机器(例如计算机) 可读形式的信息的任何装置,包括但不限于软盘、光盘、光盘只读 存储器(CD-ROM)以及^兹光盘、只读存储器(ROM)、随机存取 存储器(RAM)、可擦除可编程只读存储器(EPROM)、电可擦除 可编程只读存储器(EEPROM)、磁或光卡、闪存、通过因特网的 传输、电、光、声或其它形式的传播信号(例如载波、红外信号、 数字信号等)等。相应地,计算机可读介质包括适于存储或传输机
器(如计算机)可读形式的电子指令或信息的任何类型的媒体/机器 可读介质。此外,本发明还可作为计算机程序产品来下载。因此, 程序可从远程计算机(例如服务器)传送到请求计算机(例如客户 机)。程序的传送可通过电气、光学、声音或者在载波或其它传播 媒体中包含的其它形式的数据信号经由通信链路(例如调制解调器、 网络连接等)来进行。
设计可能经过从创建到仿真直到制造的各种阶段。表示设计的 数据可通过多种方式来表示设计。首先,如在仿真中可用的那样, 硬件可采用硬件描述语言或者另 一种功能描述语言来表示。另外, 采用逻辑和/或晶体管门电路的电路级模型可在设计过程的某些阶段
产生。此外,在某个阶段,大部分设计达到表示硬件模型中的各种 装置的物理设置的数据级。在采用常规半导体制造技术的情况下, 表示硬件模型的数据可以是指定用于生产集成电路的掩模的不同掩 模层上的各种特征是否存在的数据。在设计的任何表示中,数据可 存储在任何形式的机器可读介质中。经调制或者以其它方式产生来 传输这种信息的光或电波、存储器或者磁或光存储装置(如光盘) 可以是机器可读介质。这些介质的任一种可"携带"或"指示"设 计或软件信息。在传输指示或携带代码或设计的电载波以执行电信 号的复制、緩冲或重传时,制作新的副本。因此,通信提供商或网 络提供商可制作体现本发明的技术的产品(载波)的复制品。
在现代处理器中,多个不同的执行单元用来处理和执行各种代 码及指令。并非所有指令都同等地创建,因为一些会较快地完成, 而另一些的则耗用大量时钟周期。指令的吞吐量越大,则处理器的 整体性能越好。因此,让许多指令尽可能快地执行是有利的。但是, 存在具有较高复杂度并且在执行时间和处理器资源方面要求更多的 某些指令。例如存在浮点指令、加载/存储操作、数据移动等。
随着越来越多的计算机系统用于互联网和多媒体应用,随时间 引入附加处理器支持。例如,单指令多数据(SIMD)整数/浮点指令
和流式(streaming) SIMD扩展(SSE)是减少执行特定程序任务所 需的指令的整体数量,它又可减小功率消耗。通过并行地对多个数 据元素进行操作,这些指令可加速软件执行。因此,可在包括视频、 语音和图像/照片处理的大量应用中实现性能提高。微处理器以及相 似类型的逻辑电路中的SIMD指令的实现通常涉及多个问题。此外, SIMD操作的复杂度往往导致需要附加电路,以正确地处理和操作数 据。
当前,SIMD点积操作不可用。在不存在SIMD点积指令的情况 下,在诸如音频/视频压缩、处理和操作之类的应用中可能需要大量 指令和数据寄存器来实现同样的结果。因此,根据本发明的实施例 的至少 一 个点积指令可减少代码开销和资源要求。本发明的实施例 提供一种实现作为利用SIMD相关硬件的算法的点积操作的方式。 当前,对SIMD寄存器中的数据执行点积操作有些困难且冗长。一
些算法需要比执行那些操作的指令的实际数量更多的指令来安排用 于算术运算的数据。通过实现才艮据本发明的实施例的点积操作,实
现点积处理所需的指令数量可显著减少。
本发明的实施例包括用于实现点积操作的指令。点积操作一般
包括将至少两个值相乘并将该乘积加到至少其它两个值的乘积上。
可对通用点积算法进行其它变更,包括将各个点积操作的结果相加
以产生另一个点积。例如,应用于数据元素的根据一个实施例的点
积操作可一般表示为
DEST1 e SRC1 * SRC2; DEST2《SRC3 * SRC4; DEST3 — DEST1 + DEST2;
对于打包SIMD数据操作^,该流程可应用于各操作数的每个 数据元素。
在以上流程中,"DEST"和"SRC"是表示相应数据或操作的 源和目标的一Jl殳术语。在一些实施例中,它们可通过具有不同于所 述的名称或功能的寄存器、存^f诸器或其它存储区来实现。例如,在
一个实施例中,DEST1和DEST2可以是第一和第二暂时存储区(例 如"TEMPI和"TEMP2"寄存器),SRC1和SRC3可以是第一和 第二目标存储区(例如"DEST1"和"DEST2"寄存器)等。在另 一些实施例中,SRC和EST存储区的两个或两个以上可对应于相同 存储区中的不同数据存储元件(例如SIMD寄存器)。此外,在一 个实施例中,点积操作可产生通过上述一般流程所产生的点积之和。
图1A是采用处理器组成的示范性计算机系统的框图,包括根据 本发明的一个实施例执行点积操作的指令的执行单元。根据本发明, 例如在本文所述的实施例中,系统100包括采用包含执行处理数据 的算法的逻辑的执行单元的部件,例如处理器102。系统100表示基 于可向Intel Corporation ( Snata Clara, California)购买的PENTIUM III、 PENTIUM 4、 XeonTM、 Itanium 、 XScale 和/或StrongARM 微处理器的处理系统,但是也可采用其它系统(包括具有其它微处 理器、工程工作站、机顶盒等的个人计算机(PC))。在一个实施 例中,示例系统100可运行可向Microsoft Corporation (Redmond, Washington)购买的一种版本的WINDOWS 操作系统,但也可采 用其它操作系统(例如UNIT和Linux )、嵌入式软件和/或图形用户 界面。因此,本发明的实施例不限于硬件电路和软件的任何特定组 合。
实施例不限于计算机系统。本发明的备选实施例可用于其它装 置(如手持装置〗和嵌入式应用。手持装置的一些实例包括蜂窝电 话、因特网协议装置、数字相才几、个人数字助理(PDA)和手持PC。 嵌入式应用可包括微控制器、数字信号处理器(DSP)、片上系统、 网络计算机(NetPC)、机顶盒、网络集线器、广域网(WAN)交 换机或者对操作数执行点积操作的其它任何系统。此外,已经实现 一些体系结构以使指令能够同时对若干数据进行操作,从而改进多 媒体应用的效率。随着数据的类型和容量增加,必须增强计算机及
其处理器以通过更有效的方法来处理数据。
图1A是采用处理器102组成的计算机系统100的框图,包括根
据本发明的 一个实施例,执行计算一个或多个操作数中的数据元素
的点积的算法的一个或多个执行单元108。 一个实施例可在单处理器 台式或服务器系统的上下文中来描述,但是备选实施例可包含在微 处理器系统中。系统100是集线器体系结构的一个实例。计算机系 统100包括处理lt据信号的处理器102。处理器102可以是复杂指令 集计算机(CISC)微处理器、简化指令集计算(RISC)微处理器、 超长指令字(VLIW)微处理器、实现指令集的组合的处理器或者例 如数字信号处理器之类的其它任何处理器装置。处理器102连接到 可在处理器102与系统100的其它部件之间传输数据信号的处理器 总线110。系统100的元件执行本领域的技术人员公知的常规功能。
在一个实施例中,处理器102包括第一级(Ll)内部高速緩冲 存储器104。根据该体系结构,处理器102可具有单个内部高速緩存 或多级内部高速緩存。作为备选的方案,在另一个实施例中,高速 緩冲存储器可位于处理器102的外部。根据具体实现和需要,另一 些实施例也可包括内部和外部两种高速緩存的组合。寄存器文件106 可在包括整数寄存器、浮点寄存器、状态寄存器和指令指针寄存器 的各种寄存器中存储不同类型的数据。
包含执行整数和浮点运算的逻辑的执行单元108也位于处理器 102中。处理器102还包括存储某些宏指令的微码的微码(pcode) ROM。对于该实施例,执行单元108包括处理打包指令集109的逻 辑。在一个实施例中,打包指令集109包括用于计算多个操作数的 点积的打包点积指令。通过在通用处理器102以及的指令集中包含 打包指令集109,结合执行指令的相关电路,许多多媒体应用使用的 操作可采用通用处理器102中的打包数据来执行。因此,通过采用 处理器的数据总线的全宽度对打包数据执行操作,可加速并且更有 效地执行许多多媒体应用。这可消除通过处理器的数据总线传送较
小的数据单元的需要以一次对一个数据元素执行一个或多个操作。
执行单元108的备选实施例也可用于微控制器、嵌入式处理器、
图形装置、DSP和其它类型的逻辑电路。系统100包括存储器120。 存储器120可以是动态随机存取存储器(DRAM)装置、静态随机 存取存储器(SRAM)装置、闪存装置或者其它存储装置。存储器120 可存储通过可由处理器102执行的数据信号所表示的指令和/或数 据。
系统逻辑芯片116连接到处理器总线IIO和存储器120。所述实 施例中的系统逻辑芯片116是存储控制器集线器(MCH)。处理器 102可经由处理器总线IIO与MCH 116通信。MCH 116为指令和数 据存储以及为图形命令、数据和文本的存储提供到存储器120的高 带宽存储器通路118。 MCH 116引导处理器102、存储器120和系统 100的其它部件之间的数据信号,并且桥接处理器总线110、存储器 120和系统I/0 122之间的数据信号。在一些实施例,系统逻辑芯片 116可提供用于连接到图形控制器112的图形端口。 MCH 116通过 存储器接口 118连接到存储器120。图形卡112通过加速图形端口 (AGP )互连114连接到MCH 116。
系统100采用专有集线器4妄口总线122将MCH 116连接到I/O 控制器集线器(ICH ) 130。 ICH 130通过本地I/O总线提供到一些I/O 装置的直接连接。本地1/0总线是用于将外部设备连接到存储器120、 芯片组和处理器102的高速I/0总线。 一些实例是音频控制器、固件 集线器(闪速BIOS) 128、无线收发器126、数据存储装置124、包 含用户输入和键盘接口的遗留1/0控制器、诸如通用串行总线(USB) 之类的串行扩展端口和网络控制器134。数据存储装置124可包括硬 盘驱动器、软盘驱动器、CD-ROM装置、闪存装置或者其它海量存 储装置。
对于系统的另 一个实施例,执行具有点积指令的算法的执行单 元可与片上系统配合使用。片上系统的一个实施例包括处理器和存
储器。 一种这样的系统的存储器是闪存。闪存可与处理器和其它系 统部件位于相同的晶片上。另夕卜,诸如存储控制器或图形控制器等 其它逻辑块也可设置在片上系统中。
图1B示出实现本发明的一个实施例的原理的数据处理系统 140。本领域的技术人员容易理解,本文所述的实施例可与备选处理 系统配合使用,而不会背离本发明的范围。
计算机系统140包括能够执行包括点积操作的SIMD操作的处 理核心159。对于一个实施例,处理核心159表示任何类型的体系结 构的处理单元,包括但不限于CISC、 RISC或VLIW类型的体系结 构。处理核心159还可适于一种或多种加工技术的制造,并且通过 在机器可读介质上充分详细地表示,可适合于促进所述制造。
处理核心159包括执行单元142、寄存器文件集合145和解码器 144。处理核心159还包括对本发明的理解不是必要的附加电路(图 中未示出)。执行单元142用于执行处理核心159所接收的指令。 除了识别典型的处理器指令之外,执行单元142还可识别用于对打 包数据格式执行操作的打包指令集143中的指令。打包指令集143 包括用于支持点积操作的指令,并且还可包括其它打包指令。执行 单元142通过内部总线连接到寄存器文件145。寄存器文件145表示 处理核心159上用于存储包括凄t据在内的信息的存储区。如前面所 述,会理解到,用于存储打包数据的存储区不是关键。执行单元142 连接到解码器144。解码器144用于将处理核心159所接收的指令解 码为控制信号和/或微码入口点。响应这些控制信号和/或微码入口 点,执行单元142执行适当的操作。
处理核心159与总线141连接,用于与其它各种系统装置进行 通信,它们例如可包括但不限于同步动态随冲几存取存储器(SDRAM) 控制装置146、静态随机存取存储器(SDRAM)控制装置147、突 发闪存接口 148、个人计算机存^f诸卡国际联盟(PCMCIA) /小型闪卡 (CF)控制装置、液晶显示器(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的一个实施例提供移动、网络和/或无线通信 以及能够执行包括点积操作在内的SIMD操作的处理核心159。处理 核心159可采用各种音频、视频、成像和通信算法来编程,所述算 法包括诸如沃尔什-哈达玛变换、快速傅立叶变换(FFT)、离散余 弦变换(DCT),及其各自的逆变换之类的离散变换,诸如彩色空间 变换、视频编码运动估计或视频解码运动补偿之类的压缩/解压缩技 术,以及诸如脉冲编码调制(PCM)之类的调制/解调(MODEM) 功能。本发明的一些实施例还可适用于图形应用,例如三维("3D") 建模、呈现、对象冲突检测、3D对象变换和照明等。
图1C说明能够执行SIMD点积操作的数据处理系统的备选实施 例。根据一个备选实施例,数据处理系统160可包括主处理器166、 SIMD协处理器161、高速緩冲存储器167和输入/输出系统168。输 入/输出系统168可任选地连接到无线接口 169。 SIMD协处理器161 能够执行包括点积操作在内的SIMD操作。处理核心170可适合于 一种或多种加工技术的制造,并且通过在机器可读介质上充分详细 地表示,可适合于促进包括处理核心170在内的数据处理系统160 的全部或部分的制造。
对于一个实施例,SIMD协处理器161包括执行单元162和寄存 器文件集合164。主处理器165的一个实施例包括解码器165,以识 别供执行单元162执行的SIMD点积计算指令在内的指令集163的 指令。对于备选实施例,SIMD协处理器161还包括解码器165B的 至少一部分,以对指令集163的指令进行解码。处理核心170还包 括对本发明的实施例的理解不是必要的附加电路(图中未示出)。
在操作中,主处理器166执行数据处理指令流,它们控制包括
与高速緩冲存储器167和输入/llr出系统168进行交互在内的一般类 型的数据处理操作。嵌入数据处理指令流中的是SIMD协处理器指 令。主处理器166的解码器165将这些SIMD协处理器指令识别为 属于应当由附属的SIMD协处理器161来执行的类型。因此,主处 理器166在协处理器总线166上发出这些SIMD协处理器指令(或 者表示SIMD协处理器指令的控制信号),由此,它们由任何附属 的SIMD协处理器来接收。在这种情况下,SIMD协处理器161将接 收和执行发送给它的任何所接收SIMD协处理器指令。
数据可经由无线接口 169来接收,以供SIMD协处理器指令进 行处理。对于一个实例,可采取数字信号的形式来接收语音通信, 它可通过SIMD协处理器指令进行处理,以再生表示语音通信的数 字音频样本。对于另一个实例,可采取数字比特流的形式来接收压 缩音频和/或视频,它可通过SIMD协处理器指令进行处理,以再生 数字音频样本和/或运动^L频帧。对于处理核心170的一个实施例, 主处理器166和SIMD协处理器161集成到包括执行单元162、寄存 器文件集合164和解码器165的单个处理核心170中,以识别包括 SIMD点积指令在内的指令集163的指令。
图2是处理器200的微体系结构的框图,包括根据本发明的一 个实施例执行点积指令的逻辑电路。对于点积指令的 一个实施例, 指令可将第一数据元素与第二^:据元素相乘,并且将该乘积与第三 和第四数据元素之积相加。在一些实施例中,点积指令可实现成对 于具有字节、字、双字、四字等大小以及诸如单和双精度整数及浮
点数据类型之类的数据类型的凄t据元素进行^:作。在一个实施例中,
有序前端201是处理器200的组成部分,它取出待执行的宏指令, 并使它们准备以后在处理器流水线中使用。前端201可包括若干单 元。在一个实施例中,指令预取器226从存储器中取出宏指令,并 将其馈送到指令解码器228,指令解码器228又将其解码为称作微指
令或微操作(又称作micro-op或pop )的机器可执行的原语。在一个 实施例中,追踪高速緩存230取出解码pop,并将其组装为|iop队列 234中的程序排序序列或路线(trace)供执行。当追踪高速緩存230 遇到复杂宏指令时,微码ROM 232提供完成该操作所需的|iop。
许多宏指令被转换为单个^i:操作,而其它的则需要若干微操作 来完成全面操作。在一个实施例中,若需要四个以上微操作来完成 宏指令,则解码器228访问微码ROM 232来执行宏指令。对于一个 实施例,可将打包点积指令解码为少量微操作以在指令解码器228 上进行处理。在另一个实施例中,若需要多个微操作来完成该操作, 则打包点积算法的指令可存储在微码ROM232中。追踪高速緩存230 参照入口点可编程逻辑阵列(PLA)来确定用于读取^f敬码ROM 232 中的点积算法的微码序列的正确微指令指针。在微码ROM 232完成 当前宏指令的定序微操作之后,机器的前端201继续从追踪高速緩 存230中取出微操作。
某种SIMD和其它多媒体类型的指令被看作复杂指令。大多数 浮点相关的指令也是复杂指令。因此,当指令解码器228遇到复杂 宏指令时,在适当位置上对微码ROM 232进行访问,以;险索那个宏 指令的微码序列。将执行那个宏指令所需的各个微操作传送给无序 执行引擎203,以在适当的整数和浮点执行单元上执行。
无序执行引擎203是在其中准备微指令以执行的单元。无序执 行逻辑具有多个緩冲器以在微指令沿流水线传输并被安排执行时对 其流程进行平滑处理及重新排序来优化性能。分配器逻辑分配给各 pop执行所需的机器緩冲器和资源。寄存器将逻辑寄存器重命名到寄 存器文件的条目上。在以下指令调度器之前,分配器还分配两个ia叩 队列之一中的各pop的条目, 一个用于存储器操作,以及一个用于 非存储器操作'存储器调度器,快速调度器202,慢速/通用浮点调 度器204,以及简单浮点调度器206。 调度器202、 2(M、 206根 据它们的相关输入寄存器操作数源的预备状态以及pop完成其操作
所需的执行资源的可用性来确定pop预备执行的时间。该实施例的 快速调度器202可在主时钟周期的每一半进行调度,而其它调度器
在每个主处理器时钟周期只可调度一次。调度器对分配端口进行仲
裁,以调度用于执行的|LlOp。
寄存器文件208、 210位于调度器202、 204、 206与执行块211 的执行单元212、 214、 216、 218、 220、 222、 224之间。存在分别 用于整数和浮点操作的独立寄存器文件208、 210。该实施例的各寄 存器文件208、 210还包括旁^各网络,它可向新的相关p叩分流 (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位浮 点除法器,以执行除法、平方#>及其余微操作。对于本发明的实施 例,涉及浮点值的任何动作采用浮点硬件进行。例如,整数格式与 浮点格式之间的转换涉及浮点寄存器文件。类似地,浮点除法操作 在浮点除法器上进行。另一方面,非浮点数值和整型采用整数硬件 资源来处理。非常频繁的简单ALU运算转到高速ALU执行单元216、 218。该实施例的快速ALU 216、 218可采用半个时钟周期的有效等 待时间来执行快速运算。对于一个实施例,大多数复杂整数操作转
到慢速ALU 220,因为慢速ALU 220包括用于长等待时间类型的操 作的整数执行硬件,例如乘法器、移位、标志(flag)逻辑和分支处 理。存储器加载/存储操作由AGU 212、 214执行。对于该实施例, 在对64位数据操作数执行整数^f作的上下文中描述整数ALU 216、 218、 220。在备选实施例中,可实现ALU 216、 218、 220来支持包 括16、 32、 128、 256等的各种数据位。类似地,可实现浮点单元222、 224来支持具有各种宽度的位的一系列操作数。对于一个实施例,结 合SIMD和多媒体指令,浮点单元222、 224可对128位宽的打包数 据操作数进行操作。
在该实施例中,pop调度器202、 204、 206在父负荷已经完成执 行之前分发相关操作。由于p叩在处理器200中推测地调度和执行, 所以处理器200还包括处理存储器未命中的逻辑。若数据负荷不在 数据高速緩存中,则在流水线中可能存在使调度器具有暂时不正确 数据的即时相关操作。重放机构跟踪并重新执4亍采用不正确数据的 指令。只有相关操作才需要被重放,并允许不相关操作继续完成。 处理器的 一个实施例的调度器和重放机构还设计成捕捉点积操作的 指令序列。
术语"寄存器"在本文中用来表示用作标识操作数的宏指令的 一部分的板载(on-board)处理器存储单元。换言之,本文提到的寄 存器是从处理器外部(从程序员的角度)可见的。但是,实施例的 寄存器的含义不应当限于特定的电路类型。相反,实施例的寄存器 只需要能够存储和提供数据以及执行本文所述的功能。本文所述的 寄存器可通过处理器中的电路采用任何数量的不同技术来实现,例 如专用寄存器、采用寄存器重命名的动态分配物理寄存器、专用和 动态分配物理寄存器的组合等。在一个实施例中,整数寄存器存储32 位整数数据。 一个实施例的寄存器文件还包含用于打包数据的16个 XMM和通用寄存器、8个多媒体(例如"EM64T"加法)多媒体SIMD 寄存器。对于以下论述,寄存器被理解为设计成保存打包数据的数
据寄存器,例如采用Intel Corporation (Santa Clara, California)开 发的MMX技术的微处理器中的64位宽MMXTM寄存器(在某些情 况下又称作'mm,寄存器)。以整数和浮点两种形式可用的这些MMX 寄存器可与伴随SIMD和SSE指令的打包数据元素配合操作。类似 地,与SSE2、 SSE3、 SSE4或者以上( 一般称作"SSEx")的技术 相关的128位宽XMM寄存器也可用于保存这类打包数据操作数。 在该实施例中,在存储打包数据和整数数据时,寄存器无需区分两 种数据类型。
在以下附图的实例中,描迷多个数据操作数。图3A示出根据本 发明的一个实施例的多媒体寄存器中的各种打包数据类型表示。图3A 示出128位宽操作数的打包字节310、打包字320和打包双字(dword) 330的数据类型。该实例的打包字节格式310是128位长,并包含16 个打包字节数据元素。字节在这里定义为8位数据。对于各字节数 据元素的信息,字节0存储在0至7位,字节1存储在8至15位, 字节2存储在16至23位,以及最后,字节15存储在120至127位。 这样,所有可用的位都用于寄存器中。这种存储方案增加了处理器 的存储效率。另外,通过访问16个数据元素,现在可并行地对16 个数据元素执行一个操作。
一般来说,数据元素是与相同长度的其它数据元素一起存储在 单个寄存器或存储单元中的一段单独的数据。在与SSEx技术相关的 打包数据序列中,XMM寄存器中存储的数据元素的数量是128位除 以单独的数据元素的位的长度。类似地,在与MMX和SSE技术相 关的打包数据序列中,MMX寄存器中存储的数据元素的数量是64 位除以单独的数据元素的位的长度。虽然图3A所示的数据类型为128 位长,但是,本发明的实施例还可与64位宽或者其它大小的操作凄t 配合操作。该实例的打包字格式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示出在 SIMD寄存器中的无符号打包字节的存储。对于各字节数据元素的信 息,字节零存储在零至七位,字节一存储在八至十五位,字节二存 储在十六至二十三位,以及最后,字节十五存储在一百二十至一百 二十七位。这样,所有可用的位都用于寄存器中。这种存储方案可 增加处理器的存储效率。另外,通过访问十六个数据元素,现在可 通过并行方式对十六个数据元素执行一个操作。有符号打包字节表 示345示出有符号打包字节的存储。注意,每一个字节数据元素的 第八位是符号指示符。无符号打包字表示346示出如何在SIMD寄 存器中存储字七至字零。有符号打包字表示347与无符号打包字寄 存器内表示346相似。注意,各字数据元素的第十六位是符号指示 符。无符号打包双字表示348示出如何存储双字数据元素。有符号 打包双字表示349与无符号打包双字寄存器内表示348相似。注意, 必要的符号位是各双字数据元素的第三十二位。
图3D是对操作编码(操作码)格式360的一个实施例的描述, 其中具有三十二或者更多位,以及寄存器/存储器操作数寻址模式符 合在以下文献中描述的一种类型的操作码格式"IA-32 Intel体系结 构软件开发人员手册第2巻指令集参考",可在万维网(www) 的intel.com/design/litcentr上乂人Intel Corporation ( Santa Clara, CAA ) 获得。在一个实施例中,点积4喿作可通过字,史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所识别的^t喿作数之一与操作数标识符374和375 所识别的另 一个操作数相乘,该点积操作的结果将重写寄存器中的数据元素,而在其它实施例中,标识符374和375所标识的操作数 的点积被写入另一个寄存器中的另一个数据元素。操作码格式360 和370允许部分由MOD字段363和373以及由可选scale-index-base 和移位字节所指定的寄存器到寄存器、存储器到寄存器、寄存器通 过存储器、寄存器通过寄存器、寄存器通过立即寻址、寄存器寻址 方式到存储器的寻址。
接下来看图3F,在一些备选实施例中,64位单指令多数据 (SIMD)算术运算可通过协处理器数据处理(CDP)指令来执行。 操作编码(操作码)格式380示出具有CDP操作码字段382和389 的一种这样的CDP指令。对于点积操作的备选实施例,CDP指令的 类型可通过字段383、 384、 387和388的一个或多个来编码。可标 识每个指令总共三个操作数位置,包括总共两个源操作数标识符 385、 390和一个目标操作数标识符386。协处理器的一个实施例可 对8、 16、 32和64位的值进行操作。对于一个实施例,对整数数据 元素执行点积操作。在一些实施例中,可采用选择字段381有条件 地执行点积指令。对于一些点积指令,源数据大小可通过字段383 来编码。在点积指令的一些实施例中,可在SIMD字段上进行零(Z)、 负值(N)、进位(C)和溢出(V)检测。对于一些指令,饱和的 类型可通过字段384来编码。
图4是根据本发明对打包数据操作数执行点积操作的逻辑的一 个实施例的框图。本发明的实施例可实现为与诸如以上所述之类的 各种类型的操作数配合工作。对于一种实现,根据本发明的点积操 作实现为对指定数据类型进行操作的指令集。例如,提供点积打包 单精度(DPPS)指令以确定包括整数和浮点在内的32位数据类型的 点积。类似地,提供点积打包双精度(DPPD)指令以确定包括整数 和浮点在内的64位数据类型的点积。虽然这些指令具有不同名称, 但它们执行的一般点积操作是相似的。为了简洁起见,以下论述和 实例在处理数据元素的点积指令的上下文中进行。
在一个实施例中,点积指令识别各种信息,包括第一数据操
作数DATA A 410的标识符和第二数据操作数DATA B 420的标识 符,以及点积操作的所得结果RESULTANT440的标识符(在一个实 施例中,它可能与第一数据操作数标识符之一相同)。对于以下论 述,DATA A、 DATA B和RESULTANT—般称作操作数或数据块, 但不限于此,并且还包括寄存器、寄存器文件和存储单元。在一个 实施例中,将各点积指令(DPPS、 DPPD)解码为一个孩i操作。在一 个备选实施例中,可将各指令解码为各种数量的微操作,以对数据 操作数执行点积操作。对于该实例,操作数410、 420是在具有字宽 数据元素的源寄存器/存储器中存储的128位宽的信息段。在一个实 施例中,操作数410、 420保存在128位长的SIMD寄存器(如128 位SSExXMM寄存器)中。对于一个实施例,RESULTANT440也 是XMM数据寄存器。此外,RESULTANT 440也可能是与源操作数 之一相同的寄存器或存储单元。根据具体实现,操作数和寄存器可 能是诸如32、 64和256位的其它长度,并且具有字节、双字或四字 大小的数据元素。虽然该实例的数据元素为字大小,但是,同样的 概念可扩展到字节和双字大小的元素。在其中的数据操作数为64位 宽的一个实施例中,MMX寄存器用来代替XMM寄存器。
该实例中的第一操作数410包括八个数据元素的集合A3、 A2、 Al和AO。各个单独的数据元素对应于所得结果440中的数据元素位 置。第二操作数420包括八个教:据段的另一个集合:B3、 B2、 Bl和 BO。在这里,数据段具有相等长度,并且各包括数据的单字(32位)。 但是,数据元素和数据元素位置可具有与字不同的粒度。若各数据 元素为字节(8位)、双字(32位)或四字(64位),则128位操 作数分别具有十六字节宽、四个双字宽或者两个四字宽的数据元素。 本发明的实施例不限于特定长度的数据操作数或数据段,而是可能 对于各实现适当地确定大小。
操作数410、 420可驻留在寄存器或存储单元或寄存器文件或者
它们的组合中。数据操作数410、 420与点积指令一起被发送到处理 器中的执行单元的点积计算逻辑430。当点积指令到达执行单元时, 在一个实施例中,先前应当已经在处理器流水线中对指令进行解码。 因此,点积指令可能采取微操作(pop)或者其它某种已解码格式的 形式。对于一个实施例,在点积计算逻辑430上接收两个数据操作 数410、 420。点积计算逻辑430产生第一操作数410的两个数据元 素的第一乘积,其中的两个数据元素的第二乘积处于第二操作数420 的对应数据元素位置中,以及将第一和第二乘积之和存储在所得结 果440的可能对应于与第一或第二操作数相同的存储单元的适当位 置上。在一个实施例中,第一和第二操作数中的数据元素为单精度
(例如32位),而在其它实施例中,第一和第二操作数中的数据元 素为双精度(例如64位)。
对于一个实施例,并行处理所有数据位置的数据元素。在另一 个实施例中, 一次可共同处理^:据元素位置的某个部分。在一个实 施例中,根据是执行DPPD还是DPPS,所得结果440分别包括两个 或四个可能的点积结果位置D0T-PR0DUCTA31。.。 、 DOT-PRODUCTA63—32、 DOT-PRODUCTA95_64、 DOT-PRODUCTA127.96 (对于 DPPS指令结果),以及DOT-PRODUCTA63.0、 DOT-PRODUCTA127.64
(对于DPPD指令结果)。
在一个实施例中,所得结果440中的点积结果的位置取决于关 联点积指令的选择字段。例如,对于DPPS指令,所得结果440中 的点积结果的位置在选择字段等于第 一值时为DOT-PRODUCTA3,.0 , 在选择字段等于第二值时为DOT-PRODUCTA63.32,在选择字段等于 第三值时为DOT-PRODUCTA95_64,以及在选择字段等于第四值时为 DOT-PRODUCTA127.64。在DPPD指令的情况下,所得结果440中的 点积结果的位置在选择字段为第一值时是DOT-RPODUCTA63.。,在选 择字段为第二值时是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相乘,以及各所得 值AO*BO、 A1*B1、 A2*B2、 A3*B3 (本文中称作"乘积,,)存储在 包括总共存储各为32位的四个单精度浮点或整数值的存储单元的第 一128位临时寄存器("TEMPI" ) 510a的对应存储单元。
在一个实施例中,将乘积只寸相加在一起,以及每个和lt(本文 中称作"中间和数")存储到第二 128位临时寄存器("TEMP2") 515a和第三128位临时寄存器("TEMP3" ) 520a的存储单元中。 在一个实施例中,乘积存储到第一和第二临时寄存器的最低有效32
位元素存储单元中。在另一些实施例中,它们可存储在第一和第二 临时寄存器的其它元素存储单元中。此外,在一些实施例中,乘积
可存储在相同寄存器(如第一或第二临时寄存器)中。
在一个实施例中,中间和凄丈相加在一起(本文中称作"最终和 数,,),并存储到第四128位临时寄存器("TEMP4" ) 525a的存 储单元中。在一个实施例中,最终和数存储到TEMP4的最低有效32 位存储单元中,而在其它实施例中,最终和数存储到TEMP4的其它 存储单元中。最终和数然后存j渚到目标寄存器505a的存储单元中。 最终和数存储到其中的准确的存储单元可取决于点积指令中可配置 的变量。在一个实施例中,包含多个位存储单元的立即字段("IMMy[x]")可用来确定最终和数将要存储到其中的目标寄存器 存储单元。例如,在一个实施例中,若IMM8
字段包含第一值(例 如"1"),则最终和数存储到目标寄存器的存储单元BO,若IMM8[1] 字段包含第一值(例如"1"),则最终和数存储到Bl的存储单元, 若IMM8[2]字段包含第一值(例如'T'),则最终和数存储到目标 寄存器的存储单元B2,以及若IMM8[3]字段包含第一值(例如"1"), 则最终和数存储到目标寄存器的存储单元B3。在另一些实施例中, 其它立即字段可用来确定最终和数将要存储到其中的目标寄存器的 存储单元。
在一个实施例中,立即字段可用来控制各乘法和加法运算是否 在图5A所示的操作中执行。例如,IMM8[4]可用来表明(例如通过 设置为"0"或"1" ) AO是否将与BO相乘且结果被存储到TEMPI 。 类似地,IMM8[5]可用来表明(例如通过设置为"0"或"1" ) Al 是否将与Bl相乘且结果被存储到TEMPI。同样,IMM8[6]可用来表 明(例如通过设置为"0"或"1" ) A2是否将与B2相乘且结果被 存储到TEMPI。最后,IMM8[7]可用来表明(例如通过设置为"0" 或"1" ) A3是否将与B3相乘且结果被存储到TEMP1。
图5B示出根据一个实施例的DPPD指令的操作。DPPS与DPPD 指令之间的一个差别在于,DPPD对双精度浮点和整数值(例如64 位值)而不是单精度值进行操作。相应地,在一个实施例中,与DPPS 指令相比,存在更少要管理的数据元素,因此存在更少涉及执行DPPD 指令的中间操作和存储装置(例如寄存器)。
在一个实施例中,图5B示出包括总共存储各为64位的两个双 精度浮点或整数值AO-Al的存储单元的128位源寄存器501b。类似 地,图5B中所示的是包括总共存储各为64位的两个双精度浮点或 整数值B0-B1的存储单元的128位目标寄存器505b。在一个实施例 中,源寄存器中存储的每个值A0-A1与目标寄存器的对应位置中存 储的对应值B0-B1相乘,以及各所得^直AO*BO、 A1*B1 (本文中称
作"乘积")存储在包括总共存储各为64位的两个双精度浮点或整
数值的存储单元的第一 128位临时寄存器("TEMPI" ) 510b的对 应存储单元中。
在一个实施例中,乘积对相加在一起,以及每个和数(本文中 称作"最终和数")存储到第二 128位临时寄存器("TEMP2" )515b 的存储单元。在一个实施例中,乘积和最终和数分别存储到第一和 第二临时寄存器的最低有效64位元素存储单元。在其它实施例中, 它们可存储在第一和第二临时寄存器的其它元素存储单元中。
在一个实施例中,最终和数存储到目标寄存器505b的存储单元 中。最终和数存储到其中的准确的存储单元可取决于点积指令中可 配置的变量。在一个实施例中,包含多个位存储单元的立即字段 ("IMMy[x]")可用来确定最终和数将要存储到其中的目标寄存器 存储单元。例如,在一个实施例中,若IMM8
字段包含第一值(例 如"1"),则最终和数存储到目标寄存器的存储单元BO,若IMM8
字段包含第一值(例如'T,),则最终和数存储到存储单元B1。在 其它实施例中,其它立即字段可用来确定最终和数将要存储到其中 的目标寄存器的存储单元。
在一个实施例中,立即字段可用来控制各乘法运算是否在图5B 所示的点积操作中执行。例如,IMM8[4]可用来表明(例如通过设置 为"0"或"1" ) AO是否将与BO相乘且结果被存储到TEMP1。类 似地,IMM8[5]可用来表明(例如通过设置为"0"或"1" ) Al是 否将与Bl相乘且结果被存储到TEMP1。在另一些实施例中,可采 用用于确定是否执行点积的乘法运算的其它控制技术。
图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")中在0-31位上存储的单 精度浮点或整数值将与目标寄存器("DEST")中在0-31位上存储 的单精度浮点或整数值相乘,且仅当立即字段("IMM8[4]")中存 储的立即值等于'T'时,才将结果存储在临时寄存器("TEMPI") 的0-31位中。否则,位存储单元31-0可包含空值,如全零。
图7A中还示出了伪码来表明,SRC中在63-32位上存储的单精
度浮点或整数值将与DEST中在63-32位上存储的单精度浮点或整数 值相乘,且仅当立即字段("IMM8[5]")中存储的立即值等于"1" 时,才将结果存储在TEMPI寄存器的63-32位中。否则,位存储单 元63-32可包含空值,如全零。
类似地,图7A中还示出了伪码来它表明,SRC中在95-64位上 存储的单精度浮点或整数值将与DEST中在95-64位上存储的单精度 浮点或整数值相乘,且仅当立即字段("IMM8[6]")中存储的立即 值等于"1"时,才将结果存储在TEMPI寄存器的95-64位中。否 则,位存储单元95-64可包含空值,如全零。
最后,图7A中还示出了伪码来表明,SRC中在127-96位上存 储的单精度浮点或整数值将与DEST中在127-96位上存储的单精度 浮点或整数值相乘,且仅当立即字段("IMM8[7]")中存储的立即 值等于'T'时,才将结果存储在TEMPI寄存器的127-96位中。否 则,位存储单元127-96可包含空值,如全零。
接下来,图7A示出31-0 ^f立被加入TEMPI的63-32位,且结果 被存储到第二临时寄存器("TEMP2")的位存储单元31-0。类似 地,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
等于"1"时存储到DEST 位存储单元31-0,在IMM8[1]等于T时存储到DEST位存储单元 61-32,在IMM8[2]等于T时存储到DEST位存储单元95-64,或 者在IMM8[3]等于'T,时存储到DEST位存储单元127-96。否则, 对应的DEST位存储单元将包含空值,如全零。
图7B是根据一个实施例执行DPPD指令的操作的伪码表示。图 7B所示的伪码表明,源寄存器("SRC")中在63-0位上存储的单 精度浮点或整数值将与目标寄存器("DEST")中在63-0位上存储 的单精度浮点或整数值相乘,且仅当立即字段("IMM8[4]")中存 储的立即值等于'T,时,才将结果存储在临时寄存器("TEMPI") 的位63-0中。否则,位存储单元63-0可包含空值,如全零。
图7B中还示出了伪码来表明,SRC中在127-64位上存储的单 精度浮点或整数值将与DEST中在127-64位上存储的单精度浮点或 整数值相乘,且仅当立即字段("IMM8[5]")中存储的立即值等于 "1"时,才将结果存储在TEMPI寄存器的位127-64中。否则,位 存储单元127-64可包含空值,如全零。
接下来,图7B示出,63-0位净皮加入TEMPI的127-64位,且 结果被存储到第二临时寄存器("TEMP2")的位存储单元63-0。 在一个实施例中,临时寄存器中存储的数据然后可存储到DEST寄 存器。要存储数据的DEST寄存器中的具体位置可取决于DPPS指令 中的其它字4殳,如IMM8[x]中的字,史。具体地说,图7A示出,在一 个实施例中,若IMM8
等于T ,则TEMP2的63-0位存储到DEST 位存储单元63-0,或者若IMM8[1]等于T ,则TEMP2的63-0位 存储在DEST位存储单元127-64中。否则,对应的DEST位存储单 元将包含空值,如全零。
图7A和图7B中公开的操作只是可用于本发明的一个或多个实 施例的操作的一种表示。具体地说,图7A和图7B所示的伪码对应 于按照具有128位寄存器的一个或多个处理器体系结构所执行的操 作。其它实施例可在具有任何大小的寄存器或者其它类型的存储区 的处理器体系结构中执行。此外,其它实施例可能完全不采用如图7A 和图7B所示的寄存器。例如,在一些实施例中,不同数量的临时寄 存器或者根本没有任何寄存器可用来存储操作数。最后,本发明的 实施例可采用任何数量的寄存器或数据类型在众多处理器或处理核
心之间来执行。
这样,公开了用于执行点积操作的技术。虽然在附图中描述和 说明了某些示范性实施例,但是要理解,这些实施例只是对宽泛的 发明的说明而不是限制,以及本发明不限于所示及所述的具体构造 和配置,因为本领域的技术人员在研究本公开之后可能会想到其它 各种修改。例如增长迅速并且不易预见进一步发展的这样的技术的 领域中,通过实现技术发展来进行促进,可在不背离本公开的原理 或所附权利要求的范围的条件下,容易地对所公开的实施例进行配 置和细节方面的修改。
权利要求
1.一种已在其中存储了指令的机器可读介质,所述指令在由机器执行时,使所述机器执行包括以下步骤的方法确定各具有第一数据类型的多个打包值的至少两个操作数的点积结果;存储所述点积结果。
2. 如权利要求1所述的机器可读介质,其特征在于,所述第一 数据类型为整型。
3. 如权利要求1所述的;f几器可读介质,其特征在于,所述第一 数据类型为浮点型。
4. 如权利要求1所述的4几器可读介质,其特征在于,所述至少 两个操作数各仅具有两个打包^(直。
5. 如权利要求1所述的^L器可读介质,其特征在于,所述至少 两个操作数各仅具有四个打包^(直。
6. 如权利要求1所述的^L器可读介质,其特征在于,所述多个 打包值的每一个为单精度值,并且由32位来表示。
7. 如权利要求1所述的才儿器可读介质,其特征在于,所述多个 打包值的每一个为双精度值,并且由64位来表示。
8. 如权利要求1所述的^L器可读介质,其特征在于,所述至少 两个操作数和所述点积结果将存储在至少两个存储多达128位数据的寄存器中。
9. 一种装置,包括第 一逻辑,对第 一数据类型的至少两个打包操作数执行单指令 多数据点积指令。
10. 如权利要求9所述的装置,其特征在于,所述SIMD点积指 令包含源操作数指示符、目标操作数指示符以及至少一个立即值指 示符。
11. 如权利要求10所述的装置,其特征在于,所述源操作数指 示符包括具有存储多个打包值的多个单元的源寄存器的地址。
12. 如权利要求11所述的装置,其特征在于,所述目标操作数 指示符包括具有存储多个打包值的多个单元的目标寄存器的地址。
13. 如权利要求12所述的装置,其特征在于,所述立即值指示 符包括多个控制位。
14. 如权利要求9所述的装置,其特征在于,所述至少两个打包 操作数各为双精度整数。
15. 如权利要求9所述的装置,其特征在于,所述至少两个打包 操作数各为双精度浮点值。
16. 如权利要求9所述的装置,其特征在于,所述至少两个打包 操作数各为单精度整数。
17. 如权利要求9所述的装置,其特征在于,所述至少两个打包 操作数各为单精度浮点值。
18. —种系统,包括第一存储器,存储单指令多数据点积指令; 处理器,连接到所述第一存储器以执行所述单指令多数据点积 指令。
19. 如权利要求18所述的系统,其特征在于,所述单指令多数 据点积指令包含源操作数指示符、目标操作数指示符以及至少一个 立即值指示符。
20. 如权利要求19所述的系统,其特征在于,所述源操作数指 示符包括具有存储多个打包值的多个单元的源寄存器的地址。
21. 如权利要求20所述的系统,其特征在于,所述目标操作数 指示符包括具有存储多个打包值的多个单元的目标寄存器的地址。
22. 如权利要求21所述的系统,其特征在于,所述立即值指示符包括多个控制位。
23. 如权利要求18所述的系统,其特征在于,所述至少两个打包操作数各为双精度整数。
24. 如权利要求18所述的系统,其特征在于,所述至少两个打包操作数各为双精度浮点值。
25. 如权利要求18所述的系统,其特征在于,所述至少两个打 包操作数各为单精度整数。
26. 如权利要求18所述的系统,其特征在于,所述至少两个打 包操作数各为单精度浮点值。
27. —种方法,包括将第一打包操作数的第一^t据元素与第二打包操作数的第 一数 据元素相乘,以产生第一乘积;将所述第 一打包操作数的第二数据元素与所述第二打包操作数 的第二数据元素相乘,以产生第二乘积;将所述第一乘积与所述第二乘积相加,以产生点积结果。
28. 如权利要求27所述的方法,其特征在于,还包括将所述第 一打包操作数的第三数据元素与所述第二打包操作数的第三数据元 素相乘,以产生第三乘积。
29. 如权利要求28所述的方法,其特征在于,还包括将所述第 一打包操作数的第四数据元素与所述第二打包操作数的第四数据元 素相乘,以产生第四乘积。
30. —种处理器,包括源寄存器,存储包括第 一数据值和第二数据值的第 一打包操作数;目标寄存器,存储包括第三数据值和第四数据值的第二打包操作数;根据所述点积指令所指示的控制值来执行单指令多数据点积指 令的逻辑,所述逻辑包括将所述第一数据值和第三数据值相乘以产 生第 一 乘积的第 一 乘法器、将所述第二数据值和第四数据值相乘以 产生第二乘积的第二乘法器,所述逻辑还包括将所述第一乘积和第二乘积相加以产生至少 一个和凄t的至少 一个加法器。
31. 如权利要求30所述的处理器,其特征在于,所述逻辑还包 括根据所述控制值的第一位在所述第一乘积与空值之间进行选择的 第一复用器。
32. 如权利要求31所述的处理器,其特征在于,所述逻辑还包 括根据所述控制值的第二位在所述第二乘积与空值之间进行选择的 第二复用器。
33. 如权利要求32所述的处理器,其特征在于,所述逻辑还包 括在将被存储在所述目标寄存器的第一单元中的所述和数与空值之 间进行选择的第三复用器。
34. 如权利要求33所述的处理器,其特征在于,所述逻辑还包 括在将被存储在所述目标寄存器的第二单元中的所述和数与空值之 间进行选择的第四复用器。
35. 如权利要求30所述的处理器,其特征在于,所述第一数据 值、第二数据值、第三数据值和第四数据值为64位整数值。
36. 如权利要求30所述的处理器,其特征在于,所述第一数据 值、第二数据值、第三数据值和第四数据值为64位浮点值。
37. 如权利要求30所述的处理器,其特征在于,所述第一数据 值、第二数据值、第三数据值和第四数据值为32位整数值。
38. 如权利要求30所述的处理器,其特征在于,所述第一数据 值、第二数据值、第三数据值和第四数据值为32位浮点值。
39. 如权利要求30所述的处理器,其特征在于,所述源寄存器 和目标寄存器将存储至少128位数据。
全文摘要
本发明提供了用于执行点积操作的方法、装置和程序部件。在一个实施例中,装置包括执行第一指令的执行资源。响应第一指令,所述执行资源将等于至少两个操作数的点积的结果值存储到某个存储单元中。
文档编号G06F9/38GK101187861SQ20071018064
公开日2008年5月28日 申请日期2007年9月20日 优先权日2006年9月20日
发明者C·德西尔瓦, M·塞科尼, M·布克斯顿, R·佐哈, R·帕塔萨拉蒂, S·钦努帕蒂 申请人:英特尔公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1