CN107741842A - 用于执行点积运算的指令和逻辑 - Google Patents
用于执行点积运算的指令和逻辑 Download PDFInfo
- Publication number
- CN107741842A CN107741842A CN201710964492.XA CN201710964492A CN107741842A CN 107741842 A CN107741842 A CN 107741842A CN 201710964492 A CN201710964492 A CN 201710964492A CN 107741842 A CN107741842 A CN 107741842A
- Authority
- CN
- China
- Prior art keywords
- instruction
- data
- register
- processor
- product
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/38—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
- G06F7/48—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
- G06F7/544—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices for evaluating functions by calculation
- G06F7/5443—Sum of products
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F17/00—Digital computing or data processing equipment or methods, specially adapted for specific functions
- G06F17/10—Complex mathematical operations
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/38—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
- G06F7/48—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/3001—Arithmetic instructions
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Mathematical Optimization (AREA)
- Pure & Applied Mathematics (AREA)
- Computational Mathematics (AREA)
- Mathematical Analysis (AREA)
- Computing Systems (AREA)
- Mathematical Physics (AREA)
- Data Mining & Analysis (AREA)
- Algebra (AREA)
- Databases & Information Systems (AREA)
- Executing Machine-Instructions (AREA)
- Complex Calculations (AREA)
- Image Processing (AREA)
Abstract
本发明涉及一种用于执行点积运算的指令和逻辑。本发明提供了用于执行点积操作的方法、装置和程序部件。在一个实施例中,装置包括执行第一指令的执行资源。响应第一指令,所述执行资源将等于至少两个操作数的点积的结果值存储到某个存储单元中。
Description
本申请是分案申请,其母案申请的发明名称是“用于执行点积运算的指令和逻辑”,其母案申请的申请日是2007年9月20日,其母案申请的申请号是:200710180647.7。
技术领域
本发明涉及执行数学运算的处理装置及相关软件和软件序列的领域。
背景技术
计算机系统已经越来越深入我们的社会。计算机的处理能力已经提高了各种职业的工人的效率和生产力。由于购买和拥有计算机的费用持续下降,所以越来越多的消费者能够利用更新、更快的机器。此外,许多人由于使用自由而乐于使用笔记本电脑。移动计算机使用户可在离开办公室或旅行时轻松地传输他们的数据以及利用所述移动计算机进行工作。这种情况在营销人员、公司管理人员甚至学生中是常见的。
随着处理器技术的进步,还产生了更新的软件代码来在具有这些处理器的机器上运行。用户一般预期并要求来自他们的计算机的更高性能,而不管所使用的软件类型。从处理器内实际执行的指令和操作的种类中可能产生一个这样的问题。根据操作的复杂度和/或所需电路的类型,某些类型的操作需要更多时间来完成。这提供了优化在处理器内部执行某些复杂操作的方式的机会。
十多年来,媒体应用推动了微处理器的发展。实际上,媒体应用推动了近年来的大多数计算升级。这些升级主要在消费者方面发生,但是,为了娱乐性增强的教育和通信目的,在企业方面也看到显著的进步。然而,未来的媒体应用需要更高的计算要求。因此,将来的个人计算体验在视听效果方面将更为丰富,并且更容易使用,更重要的是,计算将与通信融合。
因此,图像的显示以及统称为内容的音频和视频数据的回放已经逐渐成为当前计算设备的流行应用。滤波和卷积操作是对内容数据、如图像音频和视频数据执行的最常见操作的一部分。这类操作是计算密集的,但是提供可通过采用各种数据存储设备(如单指令多数据(SIMD)寄存器)的有效实现来利用的高级数据并行性。多个当前的体系结构还需要多个操作、指令或子指令(通常称作“微操作”或“μop”)来对多个操作数执行各种数学运算,由此减小吞吐量并增加执行数学运算所需的时钟周期数量。
例如,可能需要由多个指令组成的指令序列来执行产生点积所必需的一个或多个运算,包括将由处理装置、系统或计算机程序内的各种数据类型所表示的两个或两个以上数值之积相加。但是,这类现有技术可能需要许多处理周期,并且可能使处理器或系统消耗不必要的功率以产生点积。此外,一些现有技术可能在可进行操作的操作数的数据类型方面受到限制。
发明内容
根据本发明的一个方面,提供了一种已在其中存储了指令的机器可读介质,所述指令在由机器执行时,使所述机器执行包括以下步骤的方法:确定各具有第一数据类型的多个打包值的至少两个操作数的点积结果;存储所述点积结果。
根据本发明的另一方面,提供了一种装置,包括:第一逻辑,对第一数据类型的至少两个打包操作数执行单指令多数据点积指令。
根据本发明的又一方面,提供了一种系统,包括:第一存储器,存储单指令多数据点积指令;处理器,耦合到所述第一存储器以执行所述单指令多数据点积指令。
根据本发明的再一方面,提供了一种方法,包括:将第一打包操作数的第一数据元素与第二打包操作数的第一数据元素相乘,以产生第一乘积;将所述第一打包操作数的第二数据元素与所述第二打包操作数的第二数据元素相乘,以产生第二乘积;将所述第一乘积与所述第二乘积相加,以产生点积结果。
此外,本发明还提供了一种处理器,包括:源寄存器,存储包括第一数据值和第二数据值的第一打包操作数;目标寄存器,存储包括第三数据值和第四数据值的第二打包操作数;根据所述点积指令所指示的控制值来执行单指令多数据点积指令的逻辑,所述逻辑包括将所述第一数据值和第三数据值相乘以产生第一乘积的第一乘法器、将所述第二数据值和第四数据值相乘以产生第二乘积的第二乘法器,所述逻辑还包括将所述第一乘积和第二乘积相加以产生至少一个和数的至少一个加法器。
附图说明
通过附图、作为实例而非限制地来说明本发明:
图1A是根据本发明的一个实施例采用处理器组成的计算机系统的框图,所述处理器包括执行点积操作的指令的执行单元;
图1B是根据本发明的一个备选实施例的另一个示范性计算机系统的框图;
图1C是根据本发明的另一个备选实施例的再一个示范性计算机系统的框图;
图2是根据本发明的一个实施例的处理器的微体系结构的框图,所述处理器包括执行点积操作的逻辑电路;
图3A示出根据本发明的一个实施例的多媒体寄存器中的各种打包(packed)数据类型表示;
图3B示出根据一备选实施例的打包数据类型;
图3C示出根据本发明的一个实施例的多媒体寄存器中的各种有符号和无符号打包数据类型表示;
图3D示出一种操作编码(操作码)格式的一个实施例;
图3E示出一种备选操作编码(操作码)格式;
图3F示出又一种备选操作编码格式;
图4是根据本发明对打包数据操作数执行点积操作的逻辑(logic)的一个实施例的框图;
图5A是根据本发明的一个实施例对单精度打包数据操作数执行点积操作的逻辑的框图;
图5B是根据本发明的一个实施例对双精度打包数据操作数执行点积操作的逻辑的框图;
图6A是根据本发明的一个实施例用于执行点积操作的电路的框图;
图6B是根据本发明的另一个实施例用于执行点积操作的电路的框图;
图7是根据一个实施例对数据进行打包符号操作的示意图。
图7A是根据一个实施例可通过执行DPPS指令来执行的操作的伪码表示;
图7B是根据一个实施例可通过执行DPPD指令来执行的操作的伪码表示。
具体实施方式
以下说明描述了在处理装置、计算机系统或软件程序中执行点积操作的一种技术的实施例。在以下描述中,阐述诸如处理器类型、微体系结构条件、事件、启用机制等的大量具体细节,以提供对本发明的充分理解。然而,本领域的技术人员会理解,没有这类具体细节,也可实施本发明。另外,没有详细说明一些公知的结构、电路等,以免不必要地影响对本发明的理解。
虽然参照处理器来描述以下实施例,但是,其它实施例适用于其它类型的集成电路和逻辑设备。本发明的相同技术和理论可容易地应用到可获益于较高流水线吞吐量和改进的性能的其它类型的电路或半导体器件。本发明的理论适用于执行数据操作的任何处理器或机器。但是,本发明不限于执行256位、128位、64位、32位或16位数据操作的处理器或机器,而是可适用于其中需要操纵打包数据的任何处理器和机器。
为便于说明,以下描述中阐述了大量具体细节,以便提供对本发明的充分理解。但是,本领域的技术人员会理解,这些具体细节不是实施本发明所必需的。在其它情况下,没有对公知的电气结构和电路进行特别详细的阐述,以免不必要地影响对本发明的理解。另外,为了说明的目的,以下描述提供实例,以及附图示出各种实例。但是,这些实例不应当以限制的意义来理解,因为它们仅旨在提供本发明的实例,而不是提供本发明的所有可能实现的穷尽列表。
虽然以下实例在执行单元和逻辑电路的上下文中来描述指令处理和分配,但是,本发明的其它实施例可通过软件来实现。在一个实施例中,本发明的方法以机器可执行指令来体现。这些指令可用于使采用指令编程的通用或专用处理器执行本发明的步骤。本发明可作为计算机程序产品或软件来提供,它可包括其中已存储指令的机器或计算机可读介质,这些指令可用于对计算机(或其它电子设备)编程以执行根据本发明的过程。作为备选的方案,本发明的步骤可由包含用于执行所述步骤的硬连线逻辑的特定硬件部件来执行,或者由已编程计算机部件和定制硬件部件的任何组合来执行。这种软件可存储在系统中的存储器内。类似地,代码可经由网络或者通过其它计算机可读媒体来分配。
因此,机器可读介质可包括用于存储或传输机器(例如计算机)可读形式的信息的任何机构,包括但不限于软盘、光盘、光盘只读存储器(CD-ROM)以及磁光盘、只读存储器(ROM)、随机存取存储器(RAM)、可擦除可编程只读存储器(EPROM)、电可擦除可编程只读存储器(EEPROM)、磁或光卡、闪存(flash memory)、通过因特网的传输、电、光、声或其它形式的传播信号(例如载波、红外信号、数字信号等)等。相应地,计算机可读介质包括适于存储或传输机器(如计算机)可读形式的电子指令或信息的任何类型的媒体/机器可读介质。此外,本发明还可作为计算机程序产品来下载。因此,程序可从远程计算机(例如服务器)传送到请求计算机(例如客户机)。程序的传送可通过电、光、声或者在载波或其它传播介质中包含的其它形式的数据信号经由通信链路(例如调制解调器、网络连接等)来进行。
设计可能经过从创建到仿真(simulation)直到制造的各种阶段。表示设计的数据可通过多种方式来表示设计。首先,如在仿真中有用的那样,硬件可采用硬件描述语言或者另一种功能描述语言来表示。另外,采用逻辑和/或晶体管门电路的电路级模型可在设计过程的某些阶段产生。此外,在某个阶段,大部分设计达到表示硬件模型中的各种设备的物理设置的数据级。在采用常规半导体制造技术的情况下,表示硬件模型的数据可以是指定用于生产集成电路的掩模的不同掩模层上的各种特征是否存在的数据。在该设计的任何表示中,数据可存储在任何形式的机器可读介质中。经调制或者以其它方式产生来传输这种信息的光或电波、存储器或者磁或光存储装置(storage)(如磁盘)可以是机器可读介质。这些介质的任一种可“携带”或“指示”设计或软件信息。在传输指示或携带代码或设计的电载波达到执行电信号的复制、缓冲或重传的程度时,就制作了新的副本。因此,通信提供商或网络提供商可能制作体现本发明的技术的产品(载波)的复制品。
在现代处理器中,多个不同的执行单元用来处理和执行各种代码及指令。并非所有指令都同等地创建,因为一些指令会较快地完成,而其它指令则耗用大量时钟周期。指令的吞吐量越大,处理器的整体性能就越好。因此,让许多指令尽可能快地执行是有利的。但是,存在具有较高复杂度并且在执行时间和处理器资源方面要求更多的某些指令。例如存在浮点指令、加载/存储操作、数据移动等。
随着越来越多的计算机系统用于互联网和多媒体应用,随时间引入了附加处理器支持。例如,单指令多数据(SIMD)整数/浮点指令和流式(streaming)SIMD扩展(SSE)是减少执行特定程序任务所需的指令的总体数量的指令,它又可降低功耗。通过并行地对多个数据元素进行操作,这些指令可加速软件执行。因此,可在包括视频、语音和图像/照片处理的大量应用中实现性能增益。微处理器以及相似类型的逻辑电路中的SIMD指令的实现通常涉及多个问题。此外,SIMD操作的复杂度通常导致需要附加电路,以正确地处理和操纵数据。
当前,SIMD点积指令不可用。在不存在SIMD点积指令的情况下,在诸如音频/视频压缩、处理和操纵之类的应用中可能需要大量指令和数据寄存器来实现同样的结果。因此,根据本发明的实施例的至少一个点积指令可减少代码开销和资源要求。本发明的实施例提供一种实现作为使用SIMD相关硬件的算法的点积操作的方式。当前,对SIMD寄存器中的数据执行点积操作有些困难且冗长。一些算法需要比执行那些操作的指令的实际数量更多的指令来设置用于算术运算的数据。通过实现根据本发明的实施例的点积操作,实现点积处理所需的指令数量可显著减少。
本发明的实施例包括用于实现点积操作的指令。点积操作一般包括将至少两个值相乘并将该乘积加到至少两个其它值的乘积上。可对通用点积算法进行其它变更,包括将各个点积操作的结果相加以产生另一个点积。例如,根据一个实施例,应用于数据元素的点积操作可一般表示为:
对于打包SIMD数据操作数,该流程可应用于各个操作数的各个数据元素。
在以上流程中,“DEST”和“SRC”是表示相应数据或操作的源和目标(destination)的一般术语。在一些实施例中,它们可通过具有不同于所述的名称或功能的寄存器、存储器或其它存储区来实现。例如,在一个实施例中,DEST1和DEST2可以是第一和第二暂时存储区(例如“TEMP1和“TEMP2”寄存器),SRC1和SRC3可以是第一和第二目标存储区(例如“DEST1”和“DEST2”寄存器)等。在其它实施例中,SRC和DEST存储区的两个或两个以上可对应于相同存储区(例如SIMD寄存器)中的不同数据存储单元(data storage element)。此外,在一个实施例中,点积操作可产生通过上述一般流程所产生的点积之和。
图1A是根据本发明的一个实施例采用处理器组成的示范性计算机系统的框图,所述处理器包括执行点积操作的指令的执行单元。根据本发明,例如在本文所描述的实施例中,系统100包括采用包含执行用于处理数据的算法的逻辑的执行单元的部件,例如处理器102。系统100表示基于可向Intel Corporation(Snata Clara, California)购买的PENTIUM® III、PENTIUM® 4、XeonTM、Itanium®、XScaleTM和/或StrongARMTM微处理器的处理系统,但是也可采用其它系统(包括具有其它微处理器的个人计算机(PC)、工程工作站、机顶盒等)。在一个实施例中,示例系统100可运行可向Microsoft Corporation(Redmond,Washington)购买的一种版本的WINDOWSTM操作系统,但也可采用其它操作系统(例如UNIT和Linux)、嵌入式软件和/或图形用户接口。因此,本发明的实施例不限于硬件电路和软件的任何特定结合。
实施例不限于计算机系统。本发明的备选实施例可用于其它设备(如手持设备)和嵌入式应用。手持设备的一些实例包括蜂窝电话、因特网协议装置、数字照相机、个人数字助理(PDA)和手持PC。嵌入式应用可包括微控制器、数字信号处理器(DSP)、片上系统、网络计算机(NetPC)、机顶盒、网络集线器、广域网(WAN)交换机或者对操作数执行点积操作的任何其它系统。此外,已经实现一些体系结构以使指令能够同时对若干数据进行操作,从而提高多媒体应用的效率。随着数据的类型和容量增加,必须增强计算机及其处理器以通过更有效的方法来操纵数据。
图1A是根据本发明的一个实施例采用处理器102组成的计算机系统100的框图,所述处理器包括一个或多个执行单元108来执行计算一个或多个操作数中的数据元素的点积的算法。一个实施例可在单处理器台式或服务器系统的上下文中来描述,但是备选实施例可包含在多处理器系统中。系统100是中心(hub)体系结构的一实例。计算机系统100包括处理数据信号的处理器102。处理器102可以是复杂指令集计算机(CISC)微处理器、简化指令集计算(RISC)微处理器、超长指令字(VLIW)微处理器、实现指令集的组合的处理器或者例如数字信号处理器之类的任何其它处理器设备。处理器102耦合到可在处理器102与系统100中的其它部件之间传输数据信号的处理器总线110。系统100的元件执行本领域的技术人员公知的常规功能。
在一个实施例中,处理器102包括第一级(L1)内部高速缓冲存储器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和系统I/O 122之间的数据信号的桥梁。在一些实施例中,系统逻辑芯片116可提供用于耦合到图形控制器112的图形端口。MCH 116通过存储器接口118耦合到存储器120。图形卡112通过加速图形端口(AGP)互连114耦合到MCH 116。
系统100采用专有中心(hub)接口总线122将MCH 116耦合到I/O控制器中心(ICH)130。ICH 130通过本地I/O总线提供对一些I/O装置的直接连接。本地I/O总线是用于将外围设备连接到存储器120、芯片组和处理器102的高速I/O总线。一些实例是音频控制器、固件中心(闪速BIOS)128、无线收发器126、数据存储设备124、包含用户输入和键盘接口的传统I/O控制器、诸如通用串行总线(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上用于存储包括数据在内的信息的存储区。如前所述,会理解到,用于存储打包数据的存储区不是关键的。执行单元142耦合到解码器144。解码器144用于将处理核心159所接收的指令解码为控制信号和/或微码入口点(entry point)。响应这些控制信号和/或微码入口点,执行单元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、蓝牙无线UART157和I/O扩展接口158。
数据处理系统140的一个实施例提供移动、网络和/或无线通信以及能够执行包括点积操作在内的SIMD操作的处理核心159。处理核心159可采用各种音频、视频、成像和通信算法来编程,所述算法包括诸如沃尔什-哈达玛变换、快速傅立叶变换(FFT)、离散余弦变换(DCT)及其各自的逆变换之类的离散变换,诸如色彩空间变换、视频编码运动估计或视频解码运动补偿之类的压缩/解压缩技术,以及诸如脉冲编码调制(PCM)之类的调制/解调(MODEM)功能。本发明的一些实施例还可适用于图形应用,例如三维(“3D”)建模、呈现(rendering)、对象冲突检测、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和输入/输出系统168进行交互在内的一般类型的数据处理操作。嵌入数据处理指令流中的是SIMD协处理器指令。主处理器166的解码器165将这些SIMD协处理器指令识别为属于应当由附属的SIMD协处理器161来执行的类型。因此,主处理器166在协处理器总线166上发出这些SIMD协处理器指令(或者表示SIMD协处理器指令的控制信号),它们从所述总线上由任何附属的SIMD协处理器来接收。在这种情况下,SIMD协处理器161将接受并执行发送给它的任何所接收的SIMD协处理器指令。
数据可经由无线接口169来接收,以供SIMD协处理器指令进行处理。对于一个实例,可采取数字信号的形式来接收语音通信,其可由SIMD协处理器指令进行处理,以再生(regenerate)表示语音通信的数字音频样本。对于另一个实例,可采取数字比特流的形式来接收压缩音频和/或视频,其可由SIMD协处理器指令进行处理,以再生数字音频样本和/或运动视频帧。对于处理核心170的一个实施例,主处理器166和SIMD协处理器161集成到包括执行单元162、寄存器文件集合164和解码器165的单个处理核心170中,以识别包括SIMD点积指令在内的指令集163的指令。
图2是根据本发明的一个实施例的处理器200的微体系结构的框图,所述处理器包括执行点积指令的逻辑电路。对于点积指令的一个实施例,该指令可将第一数据元素与第二数据元素相乘,并且将该乘积与第三和第四数据元素之积相加。在一些实施例中,点积指令可实现成对于具有字节、字、双字、四字等大小以及诸如单和双精度整数及浮点数据类型之类的数据类型的数据元素进行操作。在一个实施例中,有序前端201是处理器200的组成部分,它取出待执行的宏指令,并对它们进行准备以供之后在处理器流水线中使用。前端201可包括若干单元。在一个实施例中,指令预取器226从存储器中取出宏指令,并将其馈送到指令解码器228,指令解码器228转而将这些宏指令解码为称作微指令或微操作(又称作micro op或μop)的机器可执行的原语。在一个实施例中,追踪高速缓存(trace cache)230取出解码后的μop,并将其组装为μop队列234中的程序排序序列或路线(trace)供执行。当追踪高速缓存230遇到复杂宏指令时,微码ROM 232提供完成该操作所需的μop。
许多宏指令被转换为单个微操作,而其它的则需要若干微操作来完成整个操作。在一个实施例中,若需要四个以上微操作来完成宏指令,则解码器228访问微码ROM 232来对宏指令进行处理。对于一个实施例,可将打包点积指令解码为少量微操作以在指令解码器228上进行处理。在另一个实施例中,若需要多个微操作来完成该操作,则打包点积算法的指令可存储在微码ROM 232中。追踪高速缓存230参照入口点可编程逻辑阵列(PLA)来确定用于读取微码ROM 232中的点积算法的微码序列的正确微指令指针。在微码ROM 232完成当前宏指令的定序(sequencing)微操作之后,机器的前端201继续从追踪高速缓存230中取出微操作。
某种SIMD和其它多媒体类型的指令被看作复杂指令。大多数浮点相关的指令也是复杂指令。因此,当指令解码器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、214执行。对于该实施例,在对64位数据操作数执行整数操作的上下文中描述整数ALU 216、218、220。在备选实施例中, ALU 216、218、220可被实现为支持包括16、32、128、256等的各种数据位。类似地,浮点单元222、224可被实现为支持具有各种宽度的位的一系列操作数。对于一个实施例,结合SIMD和多媒体指令,浮点单元222、224可对128位宽的打包数据操作数进行操作。
在该实施例中,μop调度器202、204、206在父加载已经完成执行之前分派(dispatch)相关操作。由于μop在处理器200中推测地调度和执行,所以处理器200还包括处理存储器未命中的逻辑。若数据加载在数据高速缓存中未命中,则在流水线中可能存在为调度器留下了暂时不正确数据的执行中(in flight)相关操作。重放(replay)机构跟踪并重新执行采用不正确数据的指令。只有相关操作才需要被重放,而允许不相关操作完成。处理器的一个实施例的调度器和重放机构还设计成捕捉点积操作的指令序列。
术语“寄存器”在本文中用来表示用作标识操作数的宏指令的一部分的板载(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位宽或者其它大小的操作数配合操作。该实例的打包字格式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与无符号打包字的寄存器内(in-register)表示346相似。注意,各字数据元素的第十六位是符号指示符。无符号打包双字表示348示出如何存储双字数据元素。有符号打包双字表示349与无符号打包双字的寄存器内表示348相似。注意,必要的符号位是各双字数据元素的第三十二位。
图3D是对操作编码(操作码)格式360的一个实施例的描述,其中具有三十二或者更多位,以及寄存器/存储器操作数寻址模式符合在以下文献中描述的一种类型的操作码格式:“IA-32 Intel体系结构软件开发人员手册第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 register)、存储器到寄存器(memory to register)、寄存器通过存储器(register by memory)、寄存器通过寄存器(register by register)、寄存器通过立即寻址(register by immediate)、寄存器到存储器(register to memory)的寻址。
接下来看图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的标识符(在一个实施例中,它可能与第一数据操作数标识符之一相同)。对于以下论述,DATAA、DATA B和RESULTANT一般称作操作数或数据块,但不限于此,并且还包括寄存器、寄存器文件和存储单元。在一个实施例中,将各点积指令(DPPS、DPPD)解码为一个微操作。在一备选实施例中,可将各指令解码为各种数量的微操作,以对数据操作数执行点积操作。对于该实例,操作数410、420是在具有字宽数据元素的源寄存器/存储器中存储的128位宽的信息段。在一个实施例中,操作数410、420保存在128位长的SIMD寄存器(如128位SSEx XMM寄存器)中。对于一个实施例, RESULTANT 440也是XMM数据寄存器。此外,RESULTANT 440也可能是与源操作数之一相同的寄存器或存储单元。根据具体实现,操作数和寄存器可能是诸如32、64和256位等的其它长度,并且具有字节、双字或四字大小的数据元素。虽然该实例的数据元素为字大小,但是,同样的概念可扩展到字节和双字大小的元素。在其中的数据操作数为64位宽的一个实施例中,MMX寄存器用来代替XMM寄存器。
该实例中的第一操作数410包括八个数据元素的集合:A3、A2、A1和A0。各个单独的数据元素对应于所得结果440中的数据元素位置。第二操作数420包括八个数据段的另一个集合:B3、B2、B1和B0。在这里,数据段具有相等长度,并且各包括数据的单字(32位)。但是,数据元素和数据元素位置可具有与字不同的其它粒度(granularity)。若各数据元素为字节(8位)、双字(32位)或四字(64位),则128位操作数分别具有十六字节宽、四个双字宽或者两个四字宽的数据元素。本发明的实施例不限于特定长度的数据操作数或数据段,而是可能对于各实现来适当地确定大小。
操作数410、420可驻留在寄存器或存储单元或寄存器文件或者它们的组合中。数据操作数410、420与点积指令一起被发送到处理器中的执行单元的点积计算逻辑430。在一个实施例中,当点积指令到达执行单元时,先前应当已经在处理器流水线中对指令进行了解码。因此,点积指令可能采取微操作(μop)或者某种其它已解码格式的形式。对于一个实施例,在点积计算逻辑430上接收两个数据操作数410、420。点积计算逻辑430产生第一操作数410的两个数据元素的第一乘积,以及处于第二操作数420的对应数据元素位置中的两个数据元素的第二乘积,以及将第一和第二乘积之和存储在所得结果440中的适当位置中,所得结果可能与第一或第二操作数对应于相同的存储单元。在一个实施例中,第一和第二操作数中的数据元素为单精度(例如32位),而在其它实施例中,第一和第二操作数中的数据元素为双精度(例如64位)。
对于一个实施例,并行处理所有数据位置的数据元素。在另一个实施例中,一次可一起处理某个部分的数据元素位置。在一个实施例中,根据是执行DPPD还是DPPS,所得结果440分别包括两个或四个可能的点积结果位置:DOT-PRODUCTA31-0、DOT-PRODUCTA63-32、DOT-PRODUCTA95-64、DOT-PRODUCTA127-96(对于DPPS指令的结果),以及DOT-PRODUCTA63-0、DOT-PRODUCTA127-64(对于DPPD指令的结果)。
在一个实施例中,所得结果440中的点积结果的位置取决于与点积指令相关联的选择字段。例如,对于DPPS指令,所得结果 440中的点积结果的位置在选择字段等于第一值时为DOT-PRODUCTA31-0,在选择字段等于第二值时为DOT-PRODUCTA63-32,在选择字段等于第三值时为DOT-PRODUCTA95-64,以及在选择字段等于第四值时为DOT-PRODUCTA127-64。在DPPD指令的情况下,所得结果 440中的点积结果的位置在选择字段为第一值时是DOT-PRODUCTA63-0,在选择字段为第二值时是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*B1、A2*B2、A3*B3(本文中称作“乘积”)存储在包括总共存储各为32位的四个单精度浮点或整数值的存储单元的第一128位临时寄存器(“TEMP1”)510a的对应存储单元中。
在一个实施例中,将乘积对相加在一起,以及各个和数(本文中称作“中间和数”)存储到第二128位临时寄存器(“TEMP2”)515a和第三128位临时寄存器(“TEMP3”)520a的存储单元中。在一个实施例中,乘积存储到第一和第二临时寄存器的最低有效32位元素存储单元中。在其它实施例中,它们可存储在第一和第二临时寄存器的其它元素存储单元中。此外,在一些实施例中,乘积可存储在相同寄存器(如第一或第二临时寄存器)中。
在一个实施例中,中间和数相加在一起(本文中称作“最终和数”),并存储到第四128位临时寄存器(“TEMP4”)525a的存储单元中。在一个实施例中,最终和数存储到TEMP4的最低有效32位存储单元中,而在其它实施例中,最终和数存储到TEMP4的其它存储单元中。最终和数然后存储到目标寄存器505a的存储单元中。最终和数将要存储到其中的准确存储单元可取决于点积指令中可配置的变量。在一个实施例中,包含多个位存储单元的立即字段(“IMMy[x]”)可用来确定最终和数将要存储到其中的目标寄存器存储单元。例如,在一个实施例中,若IMM8[0]字段包含第一值(例如“1”),则最终和数存储到目标寄存器的存储单元B0中,若IMM8[1]字段包含第一值(例如“1”),则最终和数存储到存储单元B1中,若IMM8[2]字段包含第一值(例如“1”),则最终和数存储到目标寄存器的存储单元B2中,以及若IMM8[3]字段包含第一值(例如“1”),则最终和数存储到目标寄存器的存储单元B3中。在其它实施例中,其它立即字段可用来确定最终和数将要存储到其中的目标寄存器中的存储单元。
在一个实施例中,立即字段可用来控制各乘法和加法运算是否在图5A所示的操作中执行。例如,IMM8[4]可用来表明(例如通过设置为“0”或“1”)A0是否将与B0相乘且结果被存储到TEMP1中。类似地,IMM8[5]可用来表明(例如通过设置为“0”或“1”)A1是否将与B1相乘且结果被存储到TEMP1中。同样,IMM8[6]可用来表明(例如通过设置为“0”或“1”)A2是否将与B2相乘且结果被存储到TEMP1中。最后,IMM8[7]可用来表明(例如通过设置为“0”或“1”)A3是否将与B3相乘且结果被存储到TEMP1中。
图5B示出根据一个实施例的DPPD指令的操作。DPPS与DPPD指令之间的一个差别在于,DPPD对双精度浮点和整数值(例如64位值)而不是单精度值进行操作。相应地,在一个实施例中,执行DPPD指令与执行DPPS指令相比,存在更少要管理的数据元素,因此涉及更少的中间操作和存储装置(例如寄存器)。
在一个实施例中,图5B示出包括总共存储各为64位的两个双精度浮点或整数值A0-A1的存储单元的128位源寄存器501b。类似地,图5B中所示的是包括总共存储各为64位的两个双精度浮点或整数值B0-B1的存储单元的128位目标寄存器505b。在一个实施例中,源寄存器中存储的各个值A0-A1与目标寄存器的对应位置中存储的对应值B0-B1相乘,以及各所得结果值A0*B0、A1*B1(本文中称作“乘积”)存储在包括总共存储各为64位的两个双精度浮点或整数值的存储单元的第一128位临时寄存器(“TEMP1”)510b的对应存储单元中。
在一个实施例中,乘积对相加在一起,以及各个和数(本文中称作“最终和数”)存储到第二128位临时寄存器(“TEMP2”)515b的存储单元中。在一个实施例中,乘积与最终和数分别存储到第一和第二临时寄存器的最低有效64位元素存储单元中。在其它实施例中,它们可存储在第一和第二临时寄存器的其它元素存储单元中。
在一个实施例中,最终和数存储到目标寄存器505b的存储单元中。最终和数将要存储到其中的准确存储单元可取决于点积指令中可配置的变量。在一个实施例中,包含多个位存储单元的立即字段(“IMMy[x]”)可用来确定最终和数将要存储到其中的目标寄存器存储单元。例如,在一个实施例中,若IMM8[0]字段包含第一值(例如“1”),则最终和数存储到目标寄存器的存储单元B0中,若IMM8[1]字段包含第一值(例如“1”),则最终和数存储到存储单元B1中。在其它实施例中,其它立即字段可用来确定最终和数将要存储到其中的目标寄存器中的存储单元。
在一个实施例中,立即字段可用来控制各乘法运算是否在图5B所示的点积操作中执行。例如,IMM8[4]可用来表明(例如通过设置为“0”或“1”)A0是否将与B0相乘且结果被存储到TEMP1中。类似地,IMM8[5]可用来表明(例如通过设置为“0”或“1”)A1是否将与B1相乘且结果被存储到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”)中在31-0位中存储的单精度浮点或整数值将与目标寄存器(“DEST”)中在31-0位中存储的单精度浮点或整数值相乘,且仅当立即字段(“IMM8[4]”)中存储的立即值等于“1”时,才将结果存储在临时寄存器(“TEMP1”)的31-0位中。否则,位存储单元31-0可包含空值,如全零。
图7A中还示出了伪码来表明,SRC寄存器中在63-32位中存储的单精度浮点或整数值将与DEST寄存器中在63-32位中存储的单精度浮点或整数值相乘,且仅当立即字段(“IMM8[5]”)中存储的立即值等于“1”时,才将结果存储在TEMP1寄存器的63-32位中。否则,位存储单元63-32可包含空值,如全零。
类似地,图7A中还示出了伪码来表明,SRC寄存器中在95-64位中存储的单精度浮点或整数值将与DEST寄存器中在95-64位中存储的单精度浮点或整数值相乘,且仅当立即字段(“IMM8[6]”)中存储的立即值等于“1”时,才将结果存储在TEMP1寄存器的95-64位中。否则,位存储单元95-64可包含空值,如全零。
最后,图7A中还示出了伪码来表明,SRC寄存器中在127-96位中存储的单精度浮点或整数值将与DEST寄存器中在127-96位中存储的单精度浮点或整数值相乘,且仅当立即字段(“IMM8[7]”)中存储的立即值等于“1”时,才将结果存储在TEMP1寄存器的127-96位中。否则,位存储单元127-96可包含空值,如全零。
接下来,图7A示出TEMP1的31-0位被加到TEMP1的63-32位,且结果被存储到第二临时寄存器(“TEMP2”)的位存储单元31-0中。类似地,TEMP1的95-64位被加到TEMP1的127-96位,且结果被存储到第三临时寄存器(“TEMP3”)的位存储单元31-0中。最后,TEMP2的31-0位被加到TEMP3的31-0位,且结果被存储到第四临时寄存器(“TEMP4”)的位存储单元31-0中。
在一个实施例中,临时寄存器中存储的数据然后被存储到DEST寄存器中。要存储数据的DEST寄存器中的具体位置可取决于DPPS指令中的其它字段,如IMM8[x]中的字段。具体来说,图7A说明,在一个实施例中,TEMP4的31-0位在IMM8[0]等于“1”时存储到DEST位存储单元31-0中,在IMM8[1]等于“1”时存储到DEST位存储单元63-32中,在IMM8[2]等于“1”时存储到DEST位存储单元95-64中,或者在IMM8[3]等于“1”时存储到DEST位存储单元127-96中。否则,对应的DEST位存储单元将包含空值,如全零。
图7B是根据一个实施例执行DPPD指令的操作的伪码表示。图7B所示的伪码表明,源寄存器(“SRC”)中在63-0位中存储的单精度浮点或整数值将与目标寄存器(“DEST”)中在63-0位中存储的单精度浮点或整数值相乘,且仅当立即字段(“IMM8[4]”)中存储的立即值等于“1”时,才将结果存储在临时寄存器(“TEMP1”)的63-0位中。否则,位存储单元63-0可包含空值,如全零。
图7B中还示出了伪码来表明,SRC寄存器中在127-64位中存储的单精度浮点或整数值将与DEST寄存器中在127-64位中存储的单精度浮点或整数值相乘,且仅当立即字段(“IMM8[5]”)中存储的立即值等于“1”时,才将结果存储在TEMP1寄存器的127-64位中。否则,位存储单元127-64可包含空值,如全零。
接下来,图7B示出, TEMP1的63-0位被加到TEMP1的127-64位,且结果被存储到第二临时寄存器(“TEMP2”)的位存储单元63-0中。在一个实施例中,临时寄存器中存储的数据然后可存储到DEST寄存器中。要存储数据的DEST寄存器中的具体位置可取决于DPPS指令中的其它字段,如IMM8[x]中的字段。具体地说,图7A示出,在一个实施例中,若IMM8[0]等于“1”,则TEMP2的63-0位存储到DEST位存储单元63-0中,或者若IMM8[1]等于“1”,则TEMP2的63-0位存储在DEST位存储单元127-64中。否则,对应的DEST位存储单元将包含空值,如全零。
图7A和图7B中公开的操作只是可用于本发明的一个或多个实施例的操作的一种表示。具体地说,图7A和图7B所示的伪码对应于按照具有128位寄存器的一个或多个处理器体系结构所执行的操作。其它实施例可在具有任何大小的寄存器或者其它类型的存储区的处理器体系结构中执行。此外,其它实施例可能不采用与图7A和图7B中所示的寄存器完全相同的寄存器。例如,在一些实施例中,不同数量的临时寄存器或者根本没有寄存器可用来存储操作数。最后,本发明的实施例可采用任何数量的寄存器或数据类型在众多处理器或处理核心之间来执行。
这样,公开了用于执行点积操作的技术。虽然在附图中描述和示出了某些示范性实施例,但是要理解,这些实施例只是对宽泛的发明的说明而不是限制,并且本发明不限于所示及所述的具体构造和设置,因为本领域的技术人员在研究本公开之后可能会想到其它各种修改。在例如成长迅速并且不易预见进一步发展的这样的技术领域中,通过实现技术发展来推动,可在不背离本公开的原理或所附权利要求的范围的前提下,容易地对所公开的实施例在设置和细节方面进行修改。
Claims (9)
1.一种处理器,包括:
第一源向量寄存器,用来存储第一多个打包单精度浮点值;
第二源向量寄存器,用来存储第二多个打包单精度浮点值;
指令解码电路,用来解码指令;以及
执行电路,用来执行所述指令,其中响应于所述指令,解码电路解码点积指令,所述执行电路将要:
把所述第一多个中选择的打包单精度浮点值与所述第二多个中选择的打包单精度浮点值相乘以生成多个临时乘积,
把所述临时乘积存储进第一临时存储位置,
把第一对临时乘积加起来以生成第一和数,
把所述第一和数存储进第二临时存储位置,
把第二对临时乘积加起来以生成第二和数,
把所述第二和数存储进第三临时存储位置,以及
把所述第一和数和所述第二和数加起来以生成累加和数,
目的地寄存器,所述执行单元将要选择性地把所述累加和数写入所述目的地寄存器中。
2.如权利要求1所述的处理器,其中所述点积指令包括具有位的第一集合的立即,所述位的第一集合中的每个位的值将要促使所述执行单元从所述第一多个和所述第二多个中或者选择或者不选择对应的打包单精度浮点值以用于相乘。
3.如权利要求2所述的处理器,其中所述立即包括位的第二集合,其中所述位的第二集合内的位设置为1,促使所述执行单元从所述第一多个和所述第二多个中选择对应对的打包单精度浮点值以用于相乘。
4.如权利要求1所述的处理器,其中所述执行电路包括无序执行电路。
5.如权利要求1所述的处理器,进一步包括:
指令取出电路,用来从存储器中取出所述指令。
6.如权利要求1所述的处理器,进一步包括:
调度器电路,用来调度通过所述执行电路的所述指令的执行。
7.如权利要求1所述的处理器,其中所述执行电路包括无序执行电路。
8.如权利要求1所述的处理器,其中所述指令解码电路将要把所述点积指令解码成多个微操作,所述执行电路将要执行所述微操作。
9.如权利要求1所述的处理器,其中所述执行电路进一步将要:
把所述累加和数存储进所述目的地寄存器。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US11/524852 | 2006-09-20 | ||
US11/524,852 US20080071851A1 (en) | 2006-09-20 | 2006-09-20 | Instruction and logic for performing a dot-product operation |
CN2007101806477A CN101187861B (zh) | 2006-09-20 | 2007-09-20 | 用于执行点积运算的指令和逻辑 |
Related Parent Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2007101806477A Division CN101187861B (zh) | 2006-09-20 | 2007-09-20 | 用于执行点积运算的指令和逻辑 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107741842A true CN107741842A (zh) | 2018-02-27 |
CN107741842B CN107741842B (zh) | 2021-08-06 |
Family
ID=39189946
Family Applications (5)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510348092.7A Active CN105022605B (zh) | 2006-09-20 | 2007-09-20 | 用于执行点积运算的指令和逻辑 |
CN2007101806477A Active CN101187861B (zh) | 2006-09-20 | 2007-09-20 | 用于执行点积运算的指令和逻辑 |
CN201010535666.9A Active CN102004628B (zh) | 2006-09-20 | 2007-09-20 | 用于执行点积运算的指令和逻辑 |
CN201710964492.XA Active CN107741842B (zh) | 2006-09-20 | 2007-09-20 | 用于执行点积运算的指令和逻辑 |
CN2011104607310A Pending CN102622203A (zh) | 2006-09-20 | 2007-09-20 | 用于执行点积运算的指令和逻辑 |
Family Applications Before (3)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510348092.7A Active CN105022605B (zh) | 2006-09-20 | 2007-09-20 | 用于执行点积运算的指令和逻辑 |
CN2007101806477A Active CN101187861B (zh) | 2006-09-20 | 2007-09-20 | 用于执行点积运算的指令和逻辑 |
CN201010535666.9A Active CN102004628B (zh) | 2006-09-20 | 2007-09-20 | 用于执行点积运算的指令和逻辑 |
Family Applications After (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2011104607310A Pending CN102622203A (zh) | 2006-09-20 | 2007-09-20 | 用于执行点积运算的指令和逻辑 |
Country Status (7)
Country | Link |
---|---|
US (5) | US20080071851A1 (zh) |
JP (1) | JP4697639B2 (zh) |
KR (2) | KR101300431B1 (zh) |
CN (5) | CN105022605B (zh) |
DE (1) | DE112007002101T5 (zh) |
RU (1) | RU2421796C2 (zh) |
WO (1) | WO2008036859A1 (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110390390A (zh) * | 2018-04-19 | 2019-10-29 | 国际商业机器公司 | 利用分块gemm的深度学习加速器架构 |
CN113330421A (zh) * | 2018-11-08 | 2021-08-31 | 莫维迪乌斯有限公司 | 点积计算器及其操作方法 |
Families Citing this family (88)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20080071851A1 (en) * | 2006-09-20 | 2008-03-20 | Ronen Zohar | Instruction and logic for performing a dot-product operation |
US8332452B2 (en) * | 2006-10-31 | 2012-12-11 | International Business Machines Corporation | Single precision vector dot product with “word” vector write mask |
US9495724B2 (en) * | 2006-10-31 | 2016-11-15 | International Business Machines Corporation | Single precision vector permute immediate with “word” vector write mask |
KR20080067075A (ko) * | 2007-01-15 | 2008-07-18 | 주식회사 히타치엘지 데이터 스토리지 코리아 | 광디스크의 암호화 데이터 기록 및 재생방법 |
US8515052B2 (en) | 2007-12-17 | 2013-08-20 | Wai Wu | Parallel signal processing system and method |
US9513905B2 (en) | 2008-03-28 | 2016-12-06 | Intel Corporation | Vector instructions to enable efficient synchronization and parallel reduction operations |
US9747105B2 (en) * | 2009-12-17 | 2017-08-29 | Intel Corporation | Method and apparatus for performing a shift and exclusive or operation in a single instruction |
US8577948B2 (en) | 2010-09-20 | 2013-11-05 | Intel Corporation | Split path multiply accumulate unit |
US8688957B2 (en) | 2010-12-21 | 2014-04-01 | Intel Corporation | Mechanism for conflict detection using SIMD |
CN102184521B (zh) * | 2011-03-24 | 2013-03-06 | 苏州迪吉特电子科技有限公司 | 高性能图像处理系统及图像数据处理方法 |
KR101714133B1 (ko) * | 2011-09-26 | 2017-03-08 | 인텔 코포레이션 | 벡터 로드 및 저장에 스트라이드 및 마스킹 기능을 제공하는 명령어 및 로직 |
DE112011105666T5 (de) * | 2011-09-26 | 2014-07-10 | Intel Corp. | Befehl und Logik zum Bereitstellen von Vektor-Lade-OP/Speicher-OP mit Schritt-Funktionalität |
US9360920B2 (en) | 2011-11-21 | 2016-06-07 | Intel Corporation | Reducing power consumption in a fused multiply-add (FMA) unit of a processor |
CN102520906A (zh) * | 2011-12-13 | 2012-06-27 | 中国科学院自动化研究所 | 支持定浮点可重构的向量长度可配置的向量点积累加网络 |
CN104303141A (zh) * | 2011-12-22 | 2015-01-21 | 英特尔公司 | 用于从寄存器提取写掩码的系统、装置和方法 |
WO2013095558A1 (en) * | 2011-12-22 | 2013-06-27 | Intel Corporation | Method, apparatus and system for execution of a vector calculation instruction |
WO2013101018A1 (en) * | 2011-12-29 | 2013-07-04 | Intel Corporation | Dot product processors, methods, systems, and instructions |
US20130339689A1 (en) * | 2011-12-29 | 2013-12-19 | Srikanth T. Srinivasan | Later stage read port reduction |
US9268596B2 (en) | 2012-02-02 | 2016-02-23 | Intel Corparation | Instruction and logic to test transactional execution status |
US20130311753A1 (en) * | 2012-05-19 | 2013-11-21 | Venu Kandadai | Method and device (universal multifunction accelerator) for accelerating computations by parallel computations of middle stratum operations |
CN105677526B (zh) * | 2012-06-29 | 2019-11-05 | 英特尔公司 | 用于测试事务性执行状态的系统 |
US9411584B2 (en) | 2012-12-29 | 2016-08-09 | Intel Corporation | Methods, apparatus, instructions, and logic to provide vector address conflict detection functionality |
US9411592B2 (en) | 2012-12-29 | 2016-08-09 | Intel Corporation | Vector address conflict resolution with vector population count functionality |
JP6378515B2 (ja) * | 2014-03-26 | 2018-08-22 | 株式会社メガチップス | Vliwプロセッサ |
US11544214B2 (en) | 2015-02-02 | 2023-01-03 | Optimum Semiconductor Technologies, Inc. | Monolithic vector processor configured to operate on variable length vectors using a vector length register |
US9898286B2 (en) | 2015-05-05 | 2018-02-20 | Intel Corporation | Packed finite impulse response (FIR) filter processors, methods, systems, and instructions |
US20170046153A1 (en) * | 2015-08-14 | 2017-02-16 | Qualcomm Incorporated | Simd multiply and horizontal reduce operations |
US10423411B2 (en) | 2015-09-26 | 2019-09-24 | Intel Corporation | Data element comparison processors, methods, systems, and instructions |
US10007519B2 (en) * | 2015-12-22 | 2018-06-26 | Intel IP Corporation | Instructions and logic for vector bit field compression and expansion |
US20170185402A1 (en) * | 2015-12-23 | 2017-06-29 | Intel Corporation | Instructions and logic for bit field address and insertion |
US9875084B2 (en) * | 2016-04-28 | 2018-01-23 | Vivante Corporation | Calculating trigonometric functions using a four input dot product circuit |
US10275243B2 (en) | 2016-07-02 | 2019-04-30 | Intel Corporation | Interruptible and restartable matrix multiplication instructions, processors, methods, and systems |
US10049082B2 (en) | 2016-09-15 | 2018-08-14 | Altera Corporation | Dot product based processing elements |
CN106874796B (zh) * | 2017-02-16 | 2021-03-30 | 中云信安(深圳)科技有限公司 | 系统运行中指令流的安全检测和容错方法 |
GB2560159B (en) * | 2017-02-23 | 2019-12-25 | Advanced Risc Mach Ltd | Widening arithmetic in a data processing apparatus |
JP7148526B2 (ja) * | 2017-02-23 | 2022-10-05 | アーム・リミテッド | データ処理装置におけるベクトルによる要素演算 |
US11263008B2 (en) | 2017-03-20 | 2022-03-01 | Intel Corporation | Systems, methods, and apparatuses for tile broadcast |
CN106951211B (zh) * | 2017-03-27 | 2019-10-18 | 南京大学 | 一种可重构定浮点通用乘法器 |
US10474458B2 (en) | 2017-04-28 | 2019-11-12 | Intel Corporation | Instructions and logic to perform floating-point and integer operations for machine learning |
CN107220702B (zh) * | 2017-06-21 | 2020-11-24 | 北京图森智途科技有限公司 | 一种低计算能力处理设备的计算机视觉处理方法及装置 |
GB2563878B (en) * | 2017-06-28 | 2019-11-20 | Advanced Risc Mach Ltd | Register-based matrix multiplication |
US11275588B2 (en) | 2017-07-01 | 2022-03-15 | Intel Corporation | Context save with variable save state size |
US11803377B2 (en) * | 2017-09-08 | 2023-10-31 | Oracle International Corporation | Efficient direct convolution using SIMD instructions |
US10749502B2 (en) * | 2017-09-29 | 2020-08-18 | Intel Corporation | Apparatus and method for performing horizontal filter operations |
CN107895191B (zh) | 2017-10-30 | 2022-02-22 | 上海寒武纪信息科技有限公司 | 一种信息处理方法及相关产品 |
CN109871236A (zh) * | 2017-12-01 | 2019-06-11 | 超威半导体公司 | 具有低功率并行矩阵乘法流水线的流处理器 |
US11816483B2 (en) | 2017-12-29 | 2023-11-14 | Intel Corporation | Systems, methods, and apparatuses for matrix operations |
US11093247B2 (en) | 2017-12-29 | 2021-08-17 | Intel Corporation | Systems and methods to load a tile register pair |
US11669326B2 (en) * | 2017-12-29 | 2023-06-06 | Intel Corporation | Systems, methods, and apparatuses for dot product operations |
US11809869B2 (en) | 2017-12-29 | 2023-11-07 | Intel Corporation | Systems and methods to store a tile register pair to memory |
US11023235B2 (en) | 2017-12-29 | 2021-06-01 | Intel Corporation | Systems and methods to zero a tile register pair |
US11789729B2 (en) | 2017-12-29 | 2023-10-17 | Intel Corporation | Systems and methods for computing dot products of nibbles in two tile operands |
US11409525B2 (en) * | 2018-01-24 | 2022-08-09 | Intel Corporation | Apparatus and method for vector multiply and accumulate of packed words |
US10921122B2 (en) * | 2018-02-06 | 2021-02-16 | Stmicroelectronics S.R.L. | Tilt event detection device, system and method |
US10664287B2 (en) | 2018-03-30 | 2020-05-26 | Intel Corporation | Systems and methods for implementing chained tile operations |
US11093579B2 (en) | 2018-09-05 | 2021-08-17 | Intel Corporation | FP16-S7E8 mixed precision for deep learning and other algorithms |
US11996105B2 (en) | 2018-09-13 | 2024-05-28 | Shanghai Cambricon Information Technology Co., Ltd. | Information processing method and terminal device |
US10970076B2 (en) | 2018-09-14 | 2021-04-06 | Intel Corporation | Systems and methods for performing instructions specifying ternary tile logic operations |
US11579883B2 (en) | 2018-09-14 | 2023-02-14 | Intel Corporation | Systems and methods for performing horizontal tile operations |
US10719323B2 (en) | 2018-09-27 | 2020-07-21 | Intel Corporation | Systems and methods for performing matrix compress and decompress instructions |
US10990396B2 (en) | 2018-09-27 | 2021-04-27 | Intel Corporation | Systems for performing instructions to quickly convert and use tiles as 1D vectors |
US10866786B2 (en) | 2018-09-27 | 2020-12-15 | Intel Corporation | Systems and methods for performing instructions to transpose rectangular tiles |
US10896043B2 (en) | 2018-09-28 | 2021-01-19 | Intel Corporation | Systems for performing instructions for fast element unpacking into 2-dimensional registers |
US10929143B2 (en) | 2018-09-28 | 2021-02-23 | Intel Corporation | Method and apparatus for efficient matrix alignment in a systolic array |
US10963256B2 (en) | 2018-09-28 | 2021-03-30 | Intel Corporation | Systems and methods for performing instructions to transform matrices into row-interleaved format |
US10642614B2 (en) * | 2018-09-29 | 2020-05-05 | Intel Corporation | Reconfigurable multi-precision integer dot-product hardware accelerator for machine-learning applications |
US11366663B2 (en) | 2018-11-09 | 2022-06-21 | Intel Corporation | Systems and methods for performing 16-bit floating-point vector dot product instructions |
US10963246B2 (en) | 2018-11-09 | 2021-03-30 | Intel Corporation | Systems and methods for performing 16-bit floating-point matrix dot product instructions |
US10929503B2 (en) | 2018-12-21 | 2021-02-23 | Intel Corporation | Apparatus and method for a masked multiply instruction to support neural network pruning operations |
US11886875B2 (en) | 2018-12-26 | 2024-01-30 | Intel Corporation | Systems and methods for performing nibble-sized operations on matrix elements |
US11294671B2 (en) | 2018-12-26 | 2022-04-05 | Intel Corporation | Systems and methods for performing duplicate detection instructions on 2D data |
US20200210517A1 (en) * | 2018-12-27 | 2020-07-02 | Intel Corporation | Systems and methods to accelerate multiplication of sparse matrices |
US10922077B2 (en) | 2018-12-29 | 2021-02-16 | Intel Corporation | Apparatuses, methods, and systems for stencil configuration and computation instructions |
US10942985B2 (en) | 2018-12-29 | 2021-03-09 | Intel Corporation | Apparatuses, methods, and systems for fast fourier transform configuration and computation instructions |
US11934342B2 (en) | 2019-03-15 | 2024-03-19 | Intel Corporation | Assistance for hardware prefetch in cache access |
BR112021016106A2 (pt) * | 2019-03-15 | 2021-11-09 | Intel Corp | Processador gráfico de propósito geral, método e sistema de processamento de dados |
US20220180467A1 (en) | 2019-03-15 | 2022-06-09 | Intel Corporation | Systems and methods for updating memory side caches in a multi-gpu configuration |
US11016731B2 (en) | 2019-03-29 | 2021-05-25 | Intel Corporation | Using Fuzzy-Jbit location of floating-point multiply-accumulate results |
US11269630B2 (en) | 2019-03-29 | 2022-03-08 | Intel Corporation | Interleaved pipeline of floating-point adders |
US11175891B2 (en) | 2019-03-30 | 2021-11-16 | Intel Corporation | Systems and methods to perform floating-point addition with selected rounding |
US10990397B2 (en) | 2019-03-30 | 2021-04-27 | Intel Corporation | Apparatuses, methods, and systems for transpose instructions of a matrix operations accelerator |
US11403097B2 (en) | 2019-06-26 | 2022-08-02 | Intel Corporation | Systems and methods to skip inconsequential matrix operations |
US11334647B2 (en) | 2019-06-29 | 2022-05-17 | Intel Corporation | Apparatuses, methods, and systems for enhanced matrix multiplier architecture |
US11714875B2 (en) | 2019-12-28 | 2023-08-01 | Intel Corporation | Apparatuses, methods, and systems for instructions of a matrix operations accelerator |
KR102474054B1 (ko) * | 2020-06-22 | 2022-12-06 | 주식회사 퓨리오사에이아이 | 뉴럴네트워크 프로세서 |
US11263291B2 (en) | 2020-06-26 | 2022-03-01 | Intel Corporation | Systems and methods for combining low-mantissa units to achieve and exceed FP64 emulation of matrix multiplication |
US11972230B2 (en) | 2020-06-27 | 2024-04-30 | Intel Corporation | Matrix transpose and multiply |
US11941395B2 (en) | 2020-09-26 | 2024-03-26 | Intel Corporation | Apparatuses, methods, and systems for instructions for 16-bit floating-point matrix dot product instructions |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1040277A (zh) * | 1988-03-18 | 1990-03-07 | 数字设备公司 | 矢量处理系统中执行指令的方法及其设备 |
US20020078011A1 (en) * | 2000-05-05 | 2002-06-20 | Lee Ruby B. | Method and system for performing permutations with bit permutation instructions |
US20030014457A1 (en) * | 2001-07-13 | 2003-01-16 | Motorola, Inc. | Method and apparatus for vector processing |
US6774903B1 (en) * | 2000-11-06 | 2004-08-10 | Ati International Srl | Palette anti-sparkle enhancement |
CN1534458A (zh) * | 1995-08-31 | 2004-10-06 | ض� | 能够使用分组数据指令来执行快速变换操作的方法和装置 |
CN1577257A (zh) * | 2003-06-30 | 2005-02-09 | 英特尔公司 | 具有取整和移位的单指令多数据整数高位乘法 |
US20060149804A1 (en) * | 2004-11-30 | 2006-07-06 | International Business Machines Corporation | Multiply-sum dot product instruction with mask and splat |
CN1820246A (zh) * | 2003-05-09 | 2006-08-16 | 杉桥技术公司 | 执行饱和或不执行饱和地累加多操作数的处理器还原单元 |
Family Cites Families (43)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US1020060A (en) * | 1910-08-19 | 1912-03-12 | Otis Elevator Co | Conveyer. |
US1467622A (en) * | 1922-04-20 | 1923-09-11 | Crawford E Mcmurphy | Nest box |
JPS6297060A (ja) * | 1985-10-23 | 1987-05-06 | Mitsubishi Electric Corp | デイジタルシグナルプロセツサ |
US5119484A (en) * | 1987-02-24 | 1992-06-02 | Digital Equipment Corporation | Selections between alternate control word and current instruction generated control word for alu in respond to alu output and current instruction |
DE58908705D1 (de) * | 1989-09-20 | 1995-01-12 | Itt Ind Gmbh Deutsche | Schaltungsanordnung zur Produktsummenberechnung. |
JPH05242065A (ja) * | 1992-02-28 | 1993-09-21 | Hitachi Ltd | 情報処理装置及びシステム |
US5669010A (en) * | 1992-05-18 | 1997-09-16 | Silicon Engines | Cascaded two-stage computational SIMD engine having multi-port memory and multiple arithmetic units |
US5311459A (en) * | 1992-09-17 | 1994-05-10 | Eastman Kodak Company | Selectively configurable integrated circuit device for performing multiple digital signal processing functions |
ZA938324B (en) * | 1992-11-24 | 1994-06-07 | Qualcomm Inc | Pilot carrier dot product circuit |
US5422799A (en) * | 1994-09-15 | 1995-06-06 | Morrison, Sr.; Donald J. | Indicating flashlight |
GB9514684D0 (en) * | 1995-07-18 | 1995-09-13 | Sgs Thomson Microelectronics | An arithmetic unit |
US6385634B1 (en) * | 1995-08-31 | 2002-05-07 | Intel Corporation | Method for performing multiply-add operations on packed data |
US5793661A (en) * | 1995-12-26 | 1998-08-11 | Intel Corporation | Method and apparatus for performing multiply and accumulate operations on packed data |
US5983257A (en) * | 1995-12-26 | 1999-11-09 | Intel Corporation | System for signal processing using multiply-add operations |
US6128726A (en) * | 1996-06-04 | 2000-10-03 | Sigma Designs, Inc. | Accurate high speed digital signal processor |
US5996066A (en) * | 1996-10-10 | 1999-11-30 | Sun Microsystems, Inc. | Partitioned multiply and add/subtract instruction for CPU with integrated graphics functions |
JP3790307B2 (ja) | 1996-10-16 | 2006-06-28 | 株式会社ルネサステクノロジ | データプロセッサ及びデータ処理システム |
US5987490A (en) * | 1997-11-14 | 1999-11-16 | Lucent Technologies Inc. | Mac processor with efficient Viterbi ACS operation and automatic traceback store |
US6230253B1 (en) * | 1998-03-31 | 2001-05-08 | Intel Corporation | Executing partial-width packed data instructions |
US6115812A (en) * | 1998-04-01 | 2000-09-05 | Intel Corporation | Method and apparatus for efficient vertical SIMD computations |
JP2000322235A (ja) * | 1999-05-07 | 2000-11-24 | Sony Corp | 情報処理装置 |
US6484255B1 (en) * | 1999-09-20 | 2002-11-19 | Intel Corporation | Selective writing of data elements from packed data based upon a mask using predication |
US6574651B1 (en) * | 1999-10-01 | 2003-06-03 | Hitachi, Ltd. | Method and apparatus for arithmetic operation on vectored data |
US6353843B1 (en) * | 1999-10-08 | 2002-03-05 | Sony Corporation Of Japan | High performance universal multiplier circuit |
US7062526B1 (en) * | 2000-02-18 | 2006-06-13 | Texas Instruments Incorporated | Microprocessor with rounding multiply instructions |
US6557022B1 (en) * | 2000-02-26 | 2003-04-29 | Qualcomm, Incorporated | Digital signal processor with coupled multiply-accumulate units |
JP3940542B2 (ja) * | 2000-03-13 | 2007-07-04 | 株式会社ルネサステクノロジ | データプロセッサ及びデータ処理システム |
US6857061B1 (en) * | 2000-04-07 | 2005-02-15 | Nintendo Co., Ltd. | Method and apparatus for obtaining a scalar value directly from a vector register |
US6675286B1 (en) * | 2000-04-27 | 2004-01-06 | University Of Washington | Multimedia instruction set for wide data paths |
US6728874B1 (en) * | 2000-10-10 | 2004-04-27 | Koninklijke Philips Electronics N.V. | System and method for processing vectorized data |
US7072929B2 (en) * | 2000-11-01 | 2006-07-04 | Pts Corporation | Methods and apparatus for efficient complex long multiplication and covariance matrix implementation |
US6813627B2 (en) * | 2001-07-31 | 2004-11-02 | Hewlett-Packard Development Company, L.P. | Method and apparatus for performing integer multiply operations using primitive multi-media operations that operate on smaller operands |
US20040054877A1 (en) * | 2001-10-29 | 2004-03-18 | Macy William W. | Method and apparatus for shuffling data |
US7158141B2 (en) * | 2002-01-17 | 2007-01-02 | University Of Washington | Programmable 3D graphics pipeline for multimedia applications |
JP3857614B2 (ja) * | 2002-06-03 | 2006-12-13 | 松下電器産業株式会社 | プロセッサ |
WO2004029793A1 (en) * | 2002-09-24 | 2004-04-08 | Interdigital Technology Corporation | Computationally efficient mathematical engine |
US7539714B2 (en) * | 2003-06-30 | 2009-05-26 | Intel Corporation | Method, apparatus, and instruction for performing a sign operation that multiplies |
US6862027B2 (en) * | 2003-06-30 | 2005-03-01 | Microsoft Corp. | System and method for parallel execution of data generation tasks |
US7546330B2 (en) * | 2003-09-30 | 2009-06-09 | Broadcom Corporation | Systems for performing multiply-accumulate operations on operands representing complex numbers |
KR20060044102A (ko) * | 2004-11-11 | 2006-05-16 | 삼성전자주식회사 | 복수 개의 동일한 부분곱 계산 모듈을 포함하는 다중곱셈기 및 다중 곱셈 방법 |
US7475222B2 (en) * | 2004-04-07 | 2009-01-06 | Sandbridge Technologies, Inc. | Multi-threaded processor having compound instruction and operation formats |
US8074051B2 (en) * | 2004-04-07 | 2011-12-06 | Aspen Acquisition Corporation | Multithreaded processor with multiple concurrent pipelines per thread |
US20080071851A1 (en) * | 2006-09-20 | 2008-03-20 | Ronen Zohar | Instruction and logic for performing a dot-product operation |
-
2006
- 2006-09-20 US US11/524,852 patent/US20080071851A1/en not_active Abandoned
-
2007
- 2007-09-20 RU RU2009114818/08A patent/RU2421796C2/ru not_active IP Right Cessation
- 2007-09-20 JP JP2007244076A patent/JP4697639B2/ja active Active
- 2007-09-20 KR KR1020117020282A patent/KR101300431B1/ko active IP Right Grant
- 2007-09-20 CN CN201510348092.7A patent/CN105022605B/zh active Active
- 2007-09-20 DE DE112007002101T patent/DE112007002101T5/de not_active Ceased
- 2007-09-20 WO PCT/US2007/079098 patent/WO2008036859A1/en active Application Filing
- 2007-09-20 CN CN2007101806477A patent/CN101187861B/zh active Active
- 2007-09-20 CN CN201010535666.9A patent/CN102004628B/zh active Active
- 2007-09-20 CN CN201710964492.XA patent/CN107741842B/zh active Active
- 2007-09-20 CN CN2011104607310A patent/CN102622203A/zh active Pending
- 2007-09-20 KR KR1020097005675A patent/KR101105527B1/ko active IP Right Grant
-
2013
- 2013-03-15 US US13/844,366 patent/US20130290392A1/en not_active Abandoned
- 2013-09-30 US US14/042,696 patent/US20140032881A1/en not_active Abandoned
- 2013-09-30 US US14/042,681 patent/US20140032624A1/en not_active Abandoned
-
2017
- 2017-06-30 US US15/640,395 patent/US20170364476A1/en not_active Abandoned
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1040277A (zh) * | 1988-03-18 | 1990-03-07 | 数字设备公司 | 矢量处理系统中执行指令的方法及其设备 |
CN1534458A (zh) * | 1995-08-31 | 2004-10-06 | ض� | 能够使用分组数据指令来执行快速变换操作的方法和装置 |
US20020078011A1 (en) * | 2000-05-05 | 2002-06-20 | Lee Ruby B. | Method and system for performing permutations with bit permutation instructions |
US6774903B1 (en) * | 2000-11-06 | 2004-08-10 | Ati International Srl | Palette anti-sparkle enhancement |
US20030014457A1 (en) * | 2001-07-13 | 2003-01-16 | Motorola, Inc. | Method and apparatus for vector processing |
CN1820246A (zh) * | 2003-05-09 | 2006-08-16 | 杉桥技术公司 | 执行饱和或不执行饱和地累加多操作数的处理器还原单元 |
CN1577257A (zh) * | 2003-06-30 | 2005-02-09 | 英特尔公司 | 具有取整和移位的单指令多数据整数高位乘法 |
US20060149804A1 (en) * | 2004-11-30 | 2006-07-06 | International Business Machines Corporation | Multiply-sum dot product instruction with mask and splat |
Non-Patent Citations (1)
Title |
---|
徐慧: "高性能DSP运算部件全定制设计优化研究", 《中国优秀硕士学位论文全文数据库 信息科技辑》 * |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110390390A (zh) * | 2018-04-19 | 2019-10-29 | 国际商业机器公司 | 利用分块gemm的深度学习加速器架构 |
CN113330421A (zh) * | 2018-11-08 | 2021-08-31 | 莫维迪乌斯有限公司 | 点积计算器及其操作方法 |
CN113330421B (zh) * | 2018-11-08 | 2024-01-16 | 莫维迪乌斯有限公司 | 点积计算器及其操作方法 |
Also Published As
Publication number | Publication date |
---|---|
US20170364476A1 (en) | 2017-12-21 |
KR20110112453A (ko) | 2011-10-12 |
KR101300431B1 (ko) | 2013-08-27 |
US20130290392A1 (en) | 2013-10-31 |
CN102622203A (zh) | 2012-08-01 |
KR101105527B1 (ko) | 2012-01-13 |
KR20090042329A (ko) | 2009-04-29 |
WO2008036859A1 (en) | 2008-03-27 |
RU2421796C2 (ru) | 2011-06-20 |
CN107741842B (zh) | 2021-08-06 |
US20140032624A1 (en) | 2014-01-30 |
US20080071851A1 (en) | 2008-03-20 |
US20140032881A1 (en) | 2014-01-30 |
CN105022605A (zh) | 2015-11-04 |
CN105022605B (zh) | 2018-10-26 |
CN102004628A (zh) | 2011-04-06 |
CN101187861B (zh) | 2012-02-29 |
CN101187861A (zh) | 2008-05-28 |
JP4697639B2 (ja) | 2011-06-08 |
RU2009114818A (ru) | 2010-10-27 |
DE112007002101T5 (de) | 2009-07-09 |
JP2008077663A (ja) | 2008-04-03 |
CN102004628B (zh) | 2015-07-22 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105022605B (zh) | 用于执行点积运算的指令和逻辑 | |
JP7052171B2 (ja) | プロセッサ、システム及び方法 | |
CN104321741B (zh) | 双舍入组合浮点乘法和加法 | |
CN103827814B (zh) | 用于提供利用跨越功能的向量加载操作/存储操作的指令和逻辑 | |
CN104915181B (zh) | 用于条件存储器错误帮助抑制的方法、处理器和处理系统 | |
CN104011662B (zh) | 用于提供向量混合和置换功能的指令和逻辑 | |
CN103827813B (zh) | 用于提供向量分散操作和聚集操作功能的指令和逻辑 | |
JP4480997B2 (ja) | Simd整数乗算上位丸めシフト | |
CN103827815B (zh) | 用于提供利用跨越和掩码功能的向量加载和存储的指令和逻辑 | |
CN102103487B (zh) | 用于在单个指令中执行移位和异或运算的方法和装置 | |
CN103959236B (zh) | 用于提供向量横向多数表决功能的处理器、设备和处理系统 | |
CN107729048A (zh) | 提供向量压缩和旋转功能的指令和逻辑 | |
CN104011658B (zh) | 用于提供向量线性内插功能的指令和逻辑 | |
CN103988173B (zh) | 用于提供掩码寄存器与通用寄存器或存储器之间的转换的指令和逻辑 | |
CN108351785A (zh) | 用于部分减少操作的指令和逻辑 | |
CN106293631A (zh) | 用于提供向量分散操作和聚集操作功能的指令和逻辑 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |