CN1577257A - 具有取整和移位的单指令多数据整数高位乘法 - Google Patents

具有取整和移位的单指令多数据整数高位乘法 Download PDF

Info

Publication number
CN1577257A
CN1577257A CNA2003101215939A CN200310121593A CN1577257A CN 1577257 A CN1577257 A CN 1577257A CN A2003101215939 A CNA2003101215939 A CN A2003101215939A CN 200310121593 A CN200310121593 A CN 200310121593A CN 1577257 A CN1577257 A CN 1577257A
Authority
CN
China
Prior art keywords
group
data element
rounds
shifted
combined
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
Application number
CNA2003101215939A
Other languages
English (en)
Other versions
CN100541422C (zh
Inventor
詹姆斯·C·埃布尔
德林·C·瓦尔特斯
乔纳森·J·泰勒
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Intel Corp
Original Assignee
Intel Corp
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Intel Corp filed Critical Intel Corp
Publication of CN1577257A publication Critical patent/CN1577257A/zh
Application granted granted Critical
Publication of CN100541422C publication Critical patent/CN100541422C/zh
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/3001Arithmetic instructions
    • G06F9/30014Arithmetic instructions with variable precision
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods 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/52Multiplying; Dividing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods 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/52Multiplying; Dividing
    • G06F7/523Multiplying only
    • G06F7/533Reduction of the number of iteration steps or stages, e.g. using the Booth algorithm, log-sum, odd-even
    • G06F7/5334Reduction of the number of iteration steps or stages, e.g. using the Booth algorithm, log-sum, odd-even by using multiple bit scanning, i.e. by decoding groups of successive multiplier bits in order to select an appropriate precalculated multiple of the multiplicand as a partial product
    • G06F7/5336Reduction of the number of iteration steps or stages, e.g. using the Booth algorithm, log-sum, odd-even by using multiple bit scanning, i.e. by decoding groups of successive multiplier bits in order to select an appropriate precalculated multiple of the multiplicand as a partial product overlapped, i.e. with successive bitgroups sharing one or more bits being recoded into signed digit representation, e.g. using the Modified Booth Algorithm
    • G06F7/5338Reduction of the number of iteration steps or stages, e.g. using the Booth algorithm, log-sum, odd-even by using multiple bit scanning, i.e. by decoding groups of successive multiplier bits in order to select an appropriate precalculated multiple of the multiplicand as a partial product overlapped, i.e. with successive bitgroups sharing one or more bits being recoded into signed digit representation, e.g. using the Modified Booth Algorithm each bitgroup having two new bits, e.g. 2nd order MBA
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2207/00Indexing scheme relating to methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F2207/38Indexing scheme relating to groups G06F7/38 - G06F7/575
    • G06F2207/3804Details
    • G06F2207/3808Details concerning the type of numbers or the way they are handled
    • G06F2207/3812Devices capable of handling different types of numbers
    • G06F2207/382Reconfigurable for different fixed word lengths
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2207/00Indexing scheme relating to methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F2207/38Indexing scheme relating to groups G06F7/38 - G06F7/575
    • G06F2207/3804Details
    • G06F2207/3808Details concerning the type of numbers or the way they are handled
    • G06F2207/3828Multigauge devices, i.e. capable of handling packed numbers without unpacking them
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F5/00Methods or arrangements for data conversion without changing the order or content of the data handled
    • G06F5/01Methods or arrangements for data conversion without changing the order or content of the data handled for shifting, e.g. justifying, scaling, normalising
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods 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/499Denomination or exception handling, e.g. rounding or overflow
    • G06F7/49942Significance control
    • G06F7/49947Rounding

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Mathematical Analysis (AREA)
  • Mathematical Optimization (AREA)
  • Pure & Applied Mathematics (AREA)
  • Computational Mathematics (AREA)
  • Computing Systems (AREA)
  • Mathematical Physics (AREA)
  • Executing Machine-Instructions (AREA)
  • Complex Calculations (AREA)

Abstract

本发明公开了用于进行具有取整和移位的组合型高位乘法运算的方法、装置和程序工具。一个实施例的方法包括接收具有第一组L个数据元素的第一操作数。接收具有第二组L个数据元素的第二操作数。L对数据元素被相乘在一起以产生一组L个乘积。L对数据元素中的每一对都包括来自第一组L个数据元素的第一数据元素和来自第二组L个数据元素的相应的数据元素位置的第二数据元素。L个乘积中的每一个都被缩放以产生L个被缩放的值。L个被缩放的值中的每一个都被截断以存储在目标位置中。每一个被截断的值将被存储在对应于其数据元素对的数据元素位置。

Description

具有取整和移位的单指令多数据整数高位乘法
技术领域
本发明涉及进行数学运算的处理装置以及相关的软件和软件序列领域。
背景技术
在今天的社会中,计算机系统已经变得越来越普遍。计算机的处理能力提高了很多行业中的工作人员的绩效。随着购买和拥有一台计算机成本的持续下降,越来越多的消费者已经能够利用更新、更快的机器。此外,因为很自由,很多人喜欢使用笔记本电脑。移动计算机允许使用者在他们离开办公室或旅行时容易地传输他们的数据并用这些数据工作。这种情况在营销人员、公司管理人员甚至学生当中都非常常见。
随着处理器技术的发展,也在产生用于在具有这些处理器的机器上运行的更新的软件代码。使用者一般希望并要求他们的计算机具有更高的性能,而与正被使用的软件类型无关。正在处理器内实际执行的指令和操作的种类可能引起一个这样的问题。基于操作的复杂度和/或所需电路的类型,某些类型的操作需要更多的时间来完成。这提供了这样一种机会,即优化某些复杂操作在处理器内部被执行的方式。
十几年来,多媒体应用一直推动着微处理器的发展。实际上,近年来大部分的计算进展都是由多媒体应用推动的。虽然也看到了企业部分中用于娱乐增强的教育和通信目的的重大进步,但是这些进展主要发生在消费者部分。但是,未来的多媒体应用将需要更高的计算要求。结果,明天的个人计算体验在视听效果方面将更加丰富,使用也将更容易,并且更重要的是,计算将与通信相互融合。
因此,图像的显示以及音频和视频数据的回放已经成为当前计算设备日益普遍的应用,这里图像以及音频和视频数据统称为内容。滤波和卷积运算是在内容数据上进行的最常见运算中的一些运算,所述内容数据例如是图像、音频和视频数据。这种运算是计算密集型的,但是其提供了高级别的数据并行度,该并行度可以通过使用多种数据存储设备的有效实现来加以利用,所述多种数据存储设备例如是单指令多数据(SIMD)寄存器。当前的许多体系结构还要求不必要的数据类型改变,这会使指令吞吐率被最小化,并会显著增加排序数据以用于算术运算所需的时钟周期数。
发明内容
本发明提供了一种具有取整和移位的组合型高位乘法指令,以解决上述问题。
根据本发明的第一方面,提供了一种方法,包括:接收具有第一组L个数据元素的第一操作数;接收具有第二组L个数据元素的第二操作数;将L对数据元素相乘在一起以产生一组L个乘积,其中,所述L对中的每一对包括来自所述第一组L个数据元素的第一数据元素和来自所述第二组L个数据元素的相应的数据元素位置的第二数据元素;取整所述L个乘积中的每一个,以产生L个被取整的值;缩放所述L个被取整的值中的每一个,以产生L个被缩放的值;以及截断所述L个被缩放的值中的每一个以存储在目标位置,其中,每一个被截断的值都将被存储在与其数据元素对相对应的数据元素位置。
根据本发明的第二方面,提供了一种方法,包括:接收指令,该指令用于对两个操作数进行具有取整和移位的组合型高位乘法运算;以及执行所述指令以产生所述被截断的结果组,以作为组合型数据元素而存储在目标寄存器中。其中所述具有取整和移位的组合型高位乘法运算包括:将第一组组合型数据元素中的每一个数据元素与第二组组合型数据元素中的相应的数据元素相乘,以产生一组乘积,取整并移位所述乘积组中的每一个,以产生一组结果,以及从所述结果中的每一个中选择多个位,以产生一组被截断的结果。所述指令具有包括如下内容的格式:第一字段,用于指定操作编码,以提供关于所述具有取整和移位的组合型乘法运算的信息;第二字段,用于指定第一操作数的第一源地址,所述第一操作数具有所述第一组组合型数据元素;和第三字段,用于指定第二操作数的第二源地址,所述第二操作数具有所述第二组组合型数据元素。
根据本发明的第三方面,提供了一种装置,包括:用于执行一个指令集的一个或多个指令的执行单元,所述指令集至少包括一个用于进行具有取整和移位的组合型乘法运算的指令,其中所述执行单元响应于所述至少一个用于进行具有取整和移位的所述组合型乘法运算的指令,将第一组组合型数据元素中的每一个数据元素与第二组组合型数据元素中的相应的数据元素相乘,以产生一组乘积,取整并移位所述乘积组中的每一个,以产生一组结果,以及从所述结果中的每一个中选择多个位,以产生一组被截断的结果。其中,所述至少一个指令具有包括如下内容的格式:第一字段,用于指定操作编码以提供关于所述具有取整和移位的组合型乘法运算的信息;第二字段,用于指定第一操作数的第一源地址,所述第一操作数具有所述第一组组合型数据元素;和第三字段,用于指定第二操作数的第二源地址,所述第二操作数具有所述第二组组合型数据元素。
根据本发明的第四方面,提供了一种系统,包括:存储器,用于存储数据和指令;处理器,其通过总线耦合到所述存储器,所述处理器可操作以响应于具有取整和移位的乘法指令来进行具有取整和移位的乘法运算。所述处理器包括:总线单元,其用于从所述存储器接收所述具有取整和移位的乘法指令;和执行单元,其耦合到所述总线单元。所述执行单元用于执行所述具有取整和移位的乘法指令,所述具有取整和移位的乘法指令使所述执行单元将第一组组合型数据元素中的每一个数据元素与第二组组合型数据元素中的相应的数据元素相乘,以产生一组乘积,取整并移位所述乘积组中的每一个,以产生一组结果,以及从所述结果中的每一个中选择多个位,以产生一组被截断的结果。
根据本发明的第五方面,提供了一种机器可读介质,其具有包含在其上的程序,所述程序可以由机器执行以执行下面这种方法,所述方法包括:接收具有第一组L个数据元素的第一操作数;接收具有第二组L个数据元素的第二操作数;将L对数据元素相乘在一起以产生一组L个乘积,其中,所述L对中的每一对包括来自所述第一组L个数据元素的第一数据元素和来自所述第二组L个数据元素的相应的数据元素位置的第二数据元素;取整所述L个乘积中的每一个,以产生L个被取整的值;缩放所述L个被取整的值中的每一个,以产生L个被缩放的值;以及截断所述L个被缩放的值中的每一个以存储在目标位置,其中,每一个被截断的值都将被存储在与其数据元素对相对应的数据元素位置。
根据本发明所提供的方法、装置、系统及机器可读介质,可减少计算机指令执行所需的时钟周期数,提高计算机系统的吞吐率。
附图说明
通过附图中的示例对本发明进行了图示说明,但是本发明并不限于附图中的示例,在附图中类似的标号表示相似的元件,其中:
图1A是形成有包括下面这种执行单元的处理器的计算机系统的方框图,所述执行单元用于执行根据本发明一个实施例的用于具有取整和移位的整数高位乘法运算的SIMD指令;
图1B是根据本发明的可替换实施例的另一个示例计算机系统的方框图;
图1C是根据本发明的另一个可替换实施例的另一个示例计算机系统的方框图;
图2是包含如下逻辑电路的一个实施例的处理器的微体系结构的方框图,所述逻辑电路用于执行根据本发明的具有取整和移位操作的组合型整数高位乘法;
图3A图示了根据本发明一个实施例的多媒体寄存器中多种组合型数据类型表示;
图3B图示了根据可替换实施例的组合型数据类型;
图3C图示了用于具有取整和移位的组合型高位乘法指令的操作编码(opcode)格式的一个实施例;
图3D图示了可替换的操作编码格式;
图3E图示了另一个可替换的操作编码格式;
图4A是根据本发明对数据操作数进行具有取整和移位操作的SIMD整数高位乘法的逻辑的一个实施例的方框图;
图4B是用于所选数据元素位置的具有取整和移位操作的整数高位乘法的操作方框图;
图5是进行根据本发明的具有取整和移位操作的高位乘法的电路的一个实施例的方框图;
图6A图示了根据本发明第一实施例的具有取整和移位的组合型高位乘法指令的操作;
图6B进一步详细图示了图6A的特定数据元素位置处的组合型高位乘法指令的操作;
图7A是图示下面这种方法的一个实施例的流程图,该方法是:对组合型数据操作数进行具有取整和移位的整数高位乘法以获得乘积的高位部分;以及
图7B是说明下面这种方法的另一个实施例的流程图,该方法用于获得具有取整和移位的组合型整数乘法运算所得乘积的相关高位部分。
具体实施方式
下面描述了具有取整和移位的SIMD整数乘法的实施例。在下面的描述中,给出了诸如处理器类型、微体系结构状态、事件、使能机制等大量具体的细节,以提供对本发明更加完整的理解。但是,本领域的技术人员应该理解,本发明可以不用这些具体的细节实施。此外,没有示出一些公知的结构、电路等,以避免不必要地使本发明变得不清楚。
虽然下面的实施例是参照一种处理器来描述的,但是其他实施例适用于其他类型的集成电路和逻辑设备。可以很容易地将本发明的上述技术和教导应用于其他类型的电路或半导体设备,它们会因更高的流水线吞吐率和改进的性能而受益。本发明的教导适用于执行数据操纵的任何处理器或机器。但是,本发明不限于执行256位、128位、64位、32位或16位数据操作的处理器或机器,而是适用于在其中需要操纵组合型数据的任何处理器和机器。
在下面的描述中,为了解释的目的,给出了大量具体细节,以提供对本发明的透彻理解。然而,本领域内的技术人员应该认识到这些具体细节对实施本发明来说并不是必需的。在其他情况下,没有详细地给出一些公知的电学结构和电路,以免不必要地混淆本发明。另外,下面的描述提供了多个示例,并且附图示出了各种示例以用于说明。然而,这些示例不应当被理解成限制性的,因为它们只是用来提供本发明的一些示例,而不是用来提供对本发明的所有可能实现的穷举。
虽然下面的例子描述了在执行单元和逻辑电路的上下文中的指令处理和分发,但是本发明的其他实施例可以以软件的形式被实现。在一个实施例中,本发明的方法表现为机器可执行指令。所述指令可以被用于使得用这些指令编程的通用或专用处理器执行本发明的步骤。本发明可被作为计算机程序产品或软件来提供,所述产品或软件可包括机器或计算机可读介质,其上存储有可用来对计算机(或其他电子设备)编程以执行根据本发明的处理的指令。或者,本发明的步骤可以由包含用于执行所述步骤的硬布线逻辑的专用硬件组件,或由被编程的计算机组件和定制硬件组件的任何组合来执行。这些软件可以存储在系统中的存储器内。类似地,所述代码可通过网络或其他计算机可读介质而发布。
因此,机器可读介质可包括用于以机器(例如计算机)可读形式来存储或传送信息的任何机制,包括但不限于软盘、光盘、压缩光盘、只读压缩光盘(CD-ROM)以及磁光盘、只读存储器(ROM)、随机访问存储器(RAM)、可擦除可编程只读存储器(EPROM)、电可擦除可编程只读存储器(EEPROM)、磁或光卡、闪存、因特网上的传输,以及电、光、声或其他形式的传播信号(例如载波、红外信号、数据信号等)等等。因此,所述计算机可读介质包括适用于以机器(例如计算机)可读形式来存储或传送电子指令或信息的任意类型的媒体/机器可读介质。而且,本发明也可作为计算机程序产品而被下载。同样地,所述程序可以从远程计算机(例如服务器)传输到请求计算机(例如客户机)。程序的传输可以通过包含在载波或其他传播介质中电、光、声或其他形式的数据信号而经由通信链路(例如调制解调器、网络连接等等)来完成。
一项设计会经过从创造、模拟到制造的多个阶段。表示设计的数据可以以多种方式来表示该设计。首先,可以使用硬件描述语言或另一种功能描述语言来表示硬件,这在模拟中是很有用的。此外,在设计过程的一些阶段中,可以生产具有逻辑和/或晶体管门电路的电路级模型。而且,在某个阶段,大多数设计达到了表示多种器件在硬件模型中物理布局的数据级别。在使用传统半导体制造技术的情况下,表示硬件模型的数据可以是指定生产集成电路所用掩膜的不同掩膜层上多种特征存在或不存在的数据。在设计的任何一种表示下,数据都可以存储在任何形式的机器可读介质中。对于所调制的或所产生的用以传输这种信息的光波或电波,所述机器可读介质可以是存储器、或者诸如磁盘的磁存储器或光存储器。这些介质中的任何一种都可以“携带”或“指示”设计或软件信息。当传送指示或携带代码或设计的电载波时,取决于对电信号进行拷贝、缓冲或重传输的程度,制作新拷贝。这样,通信供应商或网络供应商可以制作具有本发明技术的制品(载波)的备份。
在现代处理器中,使用了多个不同的执行单元来处理并执行多种代码和指令。不是所用的指令都被创建成相同的,因为一些指令比较快地完成,而其他指令可能花费大量的时钟周期。指令的吞吐率越快,处理器的整体性能就越好。因此,使得尽可能多的指令尽可能快地执行将会是很有利的。然而,某些指令具有更高的复杂度,并且需要更多的执行时间和处理器资源。例如,浮点指令、装载/存储操作、数据移动等等。
随着在因特网和多媒体应用中使用越来越多的计算机系统,也引入了一些其他的处理器支持。例如,单指令多数据(SIMD)整数/浮点指令和SIMD流扩展(SSE)是可以减少执行特定程序作业所需要的指令总数的指令。这些指令可以通过并行地对多个数据元素进行操作而提高软件性能。结果,可以在大量应用中获得性能增益,包括视频、语音和图像/照片处理。在微处理器及类似类型的逻辑电路中实现SIMD指令通常涉及多个问题。而且,SIMD操作的复杂度经常使得需要附加的电路系统,以正确地处理并操纵数据。
二进制补码表示法是表示有符号数的有效方式。二进制补码数的最高有效位表示它的符号,剩余的位表示它的大小。定点小数运算允许在整数处理器进行数的乘法运算,而不会引起溢出。因为不存在关于乘法溢出的问题,所以小数运算对于数字信号处理编程是非常有用的。虽然两个16位数相乘的结果可能需要32位,但是由两个16位定点小数相乘而产生的32位的结果可以被取整为16位而引入最小的误差。16位整数的转换是该整数的十进制值除以32768的除法。在一个实施例中,感兴趣的是两个小数相乘的乘积的最高16位。但是,所述结果的最高16位是所期望的小数结果的一半。乘积必须被左移一位以将结果乘二,以给出正确的最终乘积。小数运算还要求乘数和被乘数的符号扩展。
左移需求还可以被解释为十进制位置对齐。例如,当十进制数相乘时,忽略十进制小数点,最后才放回来。放置十进制小数点以使得乘数和被乘数中十进制小数点右边的数位的总数,与它们的乘积中十进制小数点右边的数位的数量相等。类似地,这里用于小数运算的“十进制小数点”位于最左边(符号)位的右边,在这个小数点的右边有15位(数位)。但是在源中十进制小数点的右边一共有30位。如果不移位,在32位结果的十进制小数点的右边将有31位。将该数向左移动一位,从而将十进制小数点右边的位的数量有效地减少到三十。
本发明的实施例可以提高定点整数SIMD指令的精度。定点整数格式类似于定点小数运算的格式。一个实施例的“1.15”定点格式表示具有有符号的值的数,其中二进制小数点位于位14和位15之间。对于这里的以及后面的讨论,从最右边的位从0开始来数位的位置。这样最右边的位或最低有效位在位置0。紧邻其左边的位位置是位1,等等。在数字信号处理(DSP)应用中经常使用这种1.N的数值格式。根据本发明的实施例还可以因取整和移位技术而提供额外的精度。从本发明的实施例中得到的额外的准确度可以帮助许多应用变得易于编程。此外,额外的准确度还可以使得能更快地执行一些算法,例如在视频和图像处理应用中经常使用的离散余弦变换(DCT)。
具有取整和移位的SIMD整数高位乘法指令的一个示例应用是在高质量视频中。在视频编码器和译码器中,尤其是在逆DCT、DCT、量化(Q)以及逆Q模块中,16位乘16位(16×16)得到16位的结果是非常常见的。乘法运算的准确度可以对整个视频质量产生很大的影响。通过本发明实施例实现的性能改善及加速不仅仅对逆DCT计算产生影响,而是可以具有更大的影响。除了DCT计算之外,基本上也是16位相乘的Q和逆Q计算也可以受益。
计算机行业一般比较熟悉用于实现8×8逆离散余弦变换的IEEE标准规范1180-1990。虽然该标准是在视频会议的上下文中产生的,但是该规范的一些部分也被应用于诸如具有多种MPEG格式的编码器和译码器。但是,遵守IEEE 1180-1190标准且同时保持高性能则很困难。折衷的方法通常是不遵守该规范而要高性能,或者遵守该规范但性能较低。此外,根据该标准来编码是一种可能非常耗时的迭代过程,尤其在选择了错误的算法时更是如此。
可以通过具有取整和移位的高位乘法指令的实施例来使遵守IEEE1180-1190标准更容易。根据本发明的具有取整和移位的SIMD整数高位乘法指令的实施例可以为组合型数据环境中的输入和输出数据元素提供相同的1.15数据格式。这样,用包含这个具有取整和移位的高位乘法运算的实施例的指令集来写代码和编程,复杂度就大大降低了。类似地,高级语言和相关编译器的可访问性也成为可能。开发人员能够利用定点SIMD指令的实施例使能的语言和编译器,以改善视频、音频和图像编码器/解码器(codec)的性能和准确度,所述指令例如是具有取整和移位的整数高位乘法。前面提到的处理类似数据的重复操作中需要冗长的算法,而具有SIMD能力的指令集可以帮助避免这种冗长的算法。
一个实现中的乘法的每一个输入都是1.15格式。对于具有取整和移位的高位乘法指令的一个实施例,两个16位数据值相乘得到32位的乘积,从该乘积的高位创建具有2.16格式的临时18位值。然后通过对最低有效位加“1”来对这个临时的18位值进行取整以获得相当好的准确度。虽然一些技术只是丢弃所有低端位,但是本发明这个实施例中的取整运算使误差落在对于逆DCT编码来说某个可接受的阈值内。为了额外的准确度并得到期望的输出格式,这个被取整的值被左移一位。具有1.15格式的16位结果是从被取整和移位的18位值中抽取出来的。与只是取32位乘积高16位相比,对临时值进行取整和移位可以提供两位的额外准确度。例如,在这里描述的一般实施例中,与从32位乘积中抽取高16位相比,取整提供了一位的额外准确度。类似地,与被取整的乘积相比,移位提供了另一位的额外准确度。虽然这些讨论在16位长整数值的上下文中描述了实施例,但是其他实施例可以被应用于任何位长度的数据值。
图1A是形成有包括下面这种执行单元的处理器的示例计算机系统的方框图,所述执行单元用于执行根据本发明一个实施例的用于具有取整和移位的高位乘法运算的指令。系统100包括诸如处理器102的多个组件,用于一个执行单元,该单元利用了根据本发明(例如这里所描述的实施例)的包括执行数据处理算法的逻辑。系统100表示基于可从加州SantaClara的Intel公司得到的奔腾III、奔腾4、XeonTM、Itanium和/或XscaleTM微处理器,但是也可以使用其他系统(包括具有其他微处理器的PC、工程工作站、机顶盒等)。在一个实施例中,示例系统100可以执行可从华盛顿州Redmond的微软公司得到的WINDOWSTM操作系统的一个版本,不过也可以使用其他操作系统(例如,UNIX和LINUX)、嵌入式软件和/或图形用户界面。因此,本发明不限于硬件电路和软件的任何特定的组合。
本发明的可替换实施例可以用在诸如手持设备和嵌入式应用的其他设备中。手持设备的一些例子包括手机、因特网协议设备、数字照相机、个人数字助理(PDA)和手持PC。嵌入式应用可以包括微控制器、数字信号处理器(DSP)、片上系统、网络计算机(NetPC)、机顶盒、网络集线器、广域网(WAN)交换机或进行未对齐的存储器拷贝或移动的任何其他系统。此外,已经实现了一些体系结构以使得指令可同时操作几项数据,从而提高多媒体应用的效率。随着数据类型和数据量的增加,必须增强计算机和它们的处理器以用更高效率的方法来操纵数据。
图1A是形成有处理器102的计算机系统100的方框图,该处理器102包括一个或多个执行单元108,用于处理包括根据本发明的具有取整和移位的SIMD整数高位乘法指令的算法。例如,处理器102可以接收请求对组合型数据操作数进行SIMD高位乘法运算的程序指令。本实施例是在单处理器桌上电脑或服务器系统的上下文中进行描述的,但是可替换的实施例可以被包含在微处理器系统中。系统100是集线器体系结构的一个例子。计算机系统100包括用于处理数据信号的处理器102。处理器102可以是复杂指令集计算机(CISC)微处理器、精简指令集计算机(RISC)微处理器、超长指令字(VLIW)微处理器、实现多个指令集的组合的处理器、或例如数字信号处理器的任何其他处理器设备。处理器102被耦合到处理器总线110,总线110可以在处理器102和系统100的其他组件之间传输数据信号。系统100的元件执行它们的传统功能。
在一个实施例中,处理器102包括第1级(L1)内部缓存104。取决于体系结构,处理器102可以具有一个内部缓存或者多级内部缓存。或者,在另一个实施例中,缓存可以驻留在处理器102外部。取决于实现,其他实施例还可以包括内部缓存和外部缓存的组合。寄存器文件106可以存储多种寄存器中不同类型的数据,所述多种寄存器包括整数寄存器、浮点寄存器、状态寄存器和指令指针寄存器。
执行单元108也驻留在处理器102中,其包含用于执行整数和浮点运算的逻辑。处理器102还包括存储用于某些微指令的微码(ucode)的微码ROM。对于这个实施例,执行单元108包括用于处理组合型指令集109的逻辑。在一个实施例中,组合型指令集109包括用于获得所得乘积的相关高位部分的组合型高位乘法指令。通过将组合型指令集109和用于执行所述指令的关联电路包含在通用处理器102的指令集中,可以在通用处理器102中使用组合型数据来执行许多多媒体应用所使用的操作。这样,可以通过将处理器数据总线的全部宽度用于执行对组合型数据的操作,来加快并更有效率地执行许多多媒体应用。这使得不需要在处理器的数据总线上传输更小的数据单元来以一次一个数据元素的方式执行一个或多个操作。执行单元108的可替换实施例还可以用于微控制器、嵌入式处理器、图形设备、DSP和其他类型的逻辑电路中。系统100包括存储器(memory)120。存储器120可以是动态随机访问存储器(DRAM)设备、静态随机访问存储器(SRAM)设备、闪存设备或其他存储器设备。存储器120可以存储可以由处理器102执行的指令和/或由数据信号表示的数据。
系统逻辑芯片116被耦合到处理器总线110和存储器120。图示实施例中的系统逻辑芯片116是存储器控制中心(memory controller hub,MCH)。处理器102可以通过处理器总线110与MCH 116通信。MCH116向存储器120提供高带宽的存储路径118,用于指令和数据的存储以及用于图形命令、数据和纹理(texture)的存储。MCH 116用于在处理器102、存储器120以及系统100的其他组件之间引导数据信号,并在处理器总线110、存储器120以及系统I/O 122之间桥接数据信号。在一些实施例中,系统逻辑芯片116可以提供用于耦合到图形控制器112的图形端口。MCH 116通过存储器接口118而耦合到存储器120。图形卡112通过加速图形端口(AGP)互连件114而耦合到MCH 116。
系统100使用专用集线接口总线122来将MCH 116耦合到I/O控制中心(ICH)130。ICH 130通过本地I/O总线提供到一些I/O设备的直接连接。本地I/O总线是用于将外围设备连接到存储器120、芯片集和处理器102的高速I/O总线。一些例子是音频控制器、固件中心(快闪BIOS)128、无线收发机126、数据存储器(data storage)124、包含用户输入和键盘接口的遗留I/O控制器、诸如通用串行总线(USB)的串行扩展端口以及网络控制器134。数据存储设备124可以包括硬盘驱动、软盘驱动、CD-ROM驱动、闪存设备和其他大容量存储设备。
对于系统的另一个实施例,用于执行组合型高位乘法指令的执行单元可以与片上系统一起使用。片上系统的一个实施例包括处理器和存储器。这样一个系统的存储器是闪存。该闪存可以位于与处理器和其他系统组件相同的管芯(die)上。此外,诸如存储器控制器或图形控制器的其他逻辑模块也可以位于片上系统上。
图1B图示了实现本发明的原理的数据处理系统140的可替换实施例。数据处理系统140的一个实施例是具有(如万维网developer.intel.com所描述的)Intel XScaleTM技术的Intel个人因特网客户体系结构(IntelPCA)应用处理器。本领域的技术人员将很容易地理解,这里所描述的实施例可以与可替换的处理系统一起使用,而不脱离本发明的范围。
计算机系统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接收的指令译码为控制信号和/或微码入口点。响应于这些控制信号和/或微码入口点,执行单元142执行适当的操作。
处理核159与总线141耦合以与多种其他系统设备通信,所述多种其他系统设备通信可以包括但不限于例如同步动态随机访问存储器(SDRAM)控制146、静态随机访问存储器(SRAM)控制147、突发闪存接口148、个人计算机存储卡国际协会(PCMCIA)/袖珍闪存(CF)卡控制149、液晶显示器(LCD)控制150、直接存储器访问(DMA)控制器151以及可替换的总线主接口152。在一个实施例中,数据处理系统140还可以包括用于通过I/O总线153与多个I/O设备通信的I/O桥154。这种I/O设备还包括但不限于例如通用异步接收器/发射器(UART)155、通用串行总线(USB)156、蓝牙无线UART 157和I/O扩展接口158。
数据处理系统140的一个实施例提供移动通信、网络通信和/或无线通信,并提供能够执行包含具有取整和移位的高位乘法运算在内的SIMD操作的处理核159。处理核159可以用多种音频、视频、图像和通信算法而编程,所述算法包括:离散变换,例如Walsh-Hadamard变换、快速傅立叶变换(FFT)、离散余弦变换(DCT)和它们各自的逆变换;压缩/解压缩技术,例如色彩空间变换、视频编码运动估计或视频译码运动补偿;以及调制/解调(MODEM)功能,诸如脉冲编码调制(PCM)。
图1C图示了能够执行SIMD高位乘法运算的数据处理系统的另一个可替换实施例。根据一个可替换的实施例,数据处理系统160可以包括主处理器166、SIMD协处理器161、缓存167以及输入/输出系统168。输入/输出系统168可选地被耦合到无线接口169。SIMD协处理器161能够执行包含高位乘法的SIMD操作。处理核170可以适合于以一个或多个处理技术制造,并且通过在机器可读介质上以充分的细节提供,可以适合于使包含处理核170的数据处理系统160的全部或部分的制造更加方便。
对于一个实施例,SIMD协处理器161包括执行单元162和一组寄存器文件164。主处理器165的一个实施例包括译码器165,用于识别包括SIMD组合型高位乘法指令在内的指令集163的指令,以由执行单元162执行。对于可替换的实施例,SIMD协处理器161还包括译码器165B的至少一部分,以译码指令集163的指令。处理核170还包括对于理解本发明不是必需的其他电路(未示出)。
在操作中,主处理器166执行控制通用类型的数据处理操作的数据处理指令流,所述操作包括与缓存167以及输入/输出系统168的交互。SIMD协处理器指令嵌入在所述数据处理指令流内。主处理器166的译码器165将这些SIMD协处理器指令识别为一种应该由附属SIMD协处理器161执行的类型。因此,主处理器166将这些SIMD协处理器指令(或表示SIMD协处理器指令的控制信号)发射到协处理器总线166上,任何附属的SIMD协处理器从协处理器总线166接收所述指令(或控制信号)。在这种情况下,SIMD协处理器161将接收并执行任何想要给它的所接收的SIMD协处理器指令。
可以通过无线接口169来接收数据,用于由SIMD协处理器指令进行的处理。对于一个例子,可以以数字信号的形式接收语音通信,所述数字信号可以由SIMD协处理器指令处理以重新生成表示该语音通信的数字音频样本。对于另一个例子,可以以数字比特流的形式接收压缩的音频和/或视频,所述数字比特流可以由SIMD协处理器指令处理以重新生成数字音频样本和/或运动视频帧。对于处理核170的一个实施例,主处理器166和SIMD协处理器161被集成到单个处理核170中,该处理核170包括执行单元162、一组寄存器文件164和译码器165,译码器165用于识别包含SIMD高位乘法指令的指令集163中的指令。
图2是包含如下逻辑电路的一个实施例的处理器200的微体系结构的方框图,所述逻辑电路用于执行根据本发明的具有取整和移位的组合型整数高位乘法运算。具有取整和移位的SIMD整数高位乘法运算还可以被称为具有取整和移位的组合型高位乘法(高位PMUL)运算或高位乘法运算。对于组合型高位乘法指令的一个实施例,所述指令可以使得:从两个存储块中取得数据,将分别来自两个块的相应的数据元素相乘以获得一组临时结果,取整并移位那些临时结果,并将那些中间结果截断成各个乘积的所期望的高位部分,用于存储在结果数合并的数据块中。SIMD高位乘法指令还可以被称为PMULHRSW或者具有取整和移位的组合型高位乘法。在这个实施例中,具有取整和移位的高位乘法指令还可以被实现用于操作具有字节、字、双字、四字等大小的数据元素。虽然这里的讨论是在整数值和整数运算的上下文中,但是本发明的可替换的实施例可以与浮点值和浮点运算一起使用。
良序前端201是处理器200的一部分,其用于取得将被执行的宏指令,并将它们准备好以在处理器流水线中以后使用。这个实施例的前端201包括几个单元。指令预取器226从存储器取得宏指令,并将它们供应给指令译码器228,译码器228依次将这些宏指令译码为机器知道如何执行的称做微指令或微操作(也称为微op或uop)的原语。踪迹缓存230取得被译码的uop并将它们组装成微操作队列234中的程序有序序列或踪迹以用于执行。当踪迹缓存230遇到复杂的宏指令时,微码ROM 232提供执行该操作所需的uop。
许多宏指令被转换为单个微op,而其他宏指令则需要几个微op来完成整个操作。对于一个实施例,如果需要多于四个的微op来完成宏指令,则译码器228访问微码ROM 232来执行该宏指令。在一个实施例中,具有取整和移位的高位乘法指令可以被译码为少量的微op以用于在指令译码器228中进行处理。在另一个实施例中,如果需要许多微op来完成操作,则用于具有取整和移位的组合型高位乘法算法的指令可以被存储在微码ROM 232中。踪迹缓存230参考入口点可编程逻辑阵列(PLA),以确定一个正确的微指令指针,用于读微码ROM 232中具有取整和移位的高位乘法算法的微码序列。在微码ROM 232结束为当前宏指令序列化微op之后,机器的前端201恢复从踪迹缓存230取微op。
一些SIMD和其他多媒体类型的指令被认为是复杂指令。大部分与浮点相关的指令也是复杂指令。因此,当指令译码器228遇到复杂的宏指令时,微码ROM 232在适当的位置被访问以获取该宏指令的微码序列。执行该宏指令所需的各种微op被传送给乱序执行引擎203,以在适当的整数和浮点执行单元执行。
在乱序执行引擎203,微指令被准备用于执行。乱序执行逻辑具有若干缓冲器,以在微指令经过流水线并被调度执行时平滑并重新排序微指令流,以优化性能。分配器逻辑分配每一个uop依次执行所需的机器缓冲器和资源。寄存器重命名逻辑将逻辑寄存器重命名到寄存器文件中的条目上。在指令调度器之前,分配器还为每一个uop分配两个微操作队列中的一个队列的条目,所述两个uop队列中一个用于存储器操作而另一个用于非存储器操作,所述指令调度器为:存储器调度器、快速调度器202、慢速/通用浮点调度器204和简单浮点调度器206。uop调度器202、204、206基于它们的相关输入寄存器操作数源的准备程度以及uop完成它们的操作所需的执行资源的可用性来确定uop何时准备好用于执行。这个实施例的快速调度器202可以每半个主时钟周期就进行一次调度,而其他调度器每个主处理器时钟周期只能调度一次。调度器仲裁分发端口以调度用于执行的uop。
寄存器文件208、210位于调度器202、204、206与执行模块211中的执行单元212、214、216、218、220、222、224之间。有分别用于整数和浮点运算的独立的寄存器文件208、210。这个实施例的每一个寄存器文件208、210还包括旁路网络,该旁路网络可以旁路刚完成的还没有被写入寄存器文件中的结果或将该结果转发到新的相关uop。整数寄存器文件208和浮点寄存器文件210还能够彼此发送数据。对于一个实施例,整数寄存器文件208被分成两个独立的寄存器文件,一个寄存器文件用于数据的低32位,另一个寄存器文件用于数据的高32位。一个实施例的浮点寄存器文件210具有128位宽的条目,因为浮点指令一般具有宽度从64到128位的操作数。
执行模块211包括执行单元212、214、216、218、220、222、224,指令在这里被实际执行。这个部分包括寄存器文件208、210,寄存器文件208、210存储执行微指令所需要的整数和浮点数据操作数值。这个实施例的处理器200包括若干执行单元:地址产生单元(AGU)212、AGU214、快速ALU 216、快速ALU 218、慢速ALU 220、浮点ALU 222、浮点移动单元224。对于这个实施例,浮点执行模块222、224执行浮点、MMX、SIMD和SSE操作。这个实施例的浮点ALU 222包括64位×64位的浮点除法器,用于执行除、平方根和余数微op。对于本发明的实施例,任何涉及浮点值的动作都与浮点硬件有关。例如,整数格式和浮点格式之间的转换涉及浮点寄存器文件。类似地,浮点除法运算在浮点除法器处发生。
另一方面,非浮点数和整数类型用整数硬件资源处理。简单且非常频繁发生的ALU运算由高速ALU执行单元216、218处理。这个实施例的快速ALU执行单元216、218可以执行只有半个时钟周期延迟的高效的快速运算。对于一个实施例,大部分复杂整数运算由慢速ALU 220处理,因为慢速ALU 220包括用于长延迟类型运算的整数执行硬件,例如乘法、移位、标志逻辑和分支处理。存储器装载/存储操作由AGU 212、214执行。对于这个实施例,在对64位数据操作数进行整数运算的上下文中描述了整数ALU 216、218、220。在可替换的实施例中,ALU 216、218、220可以被实现来支持包括16、32、128、256等的多种数据位。类似地,浮点单元222、224可以被实现来支持具有多种位宽度的多种操作数。对于一个实施例,浮点单元222、224可以结合SIMD和多媒体指令对128位宽的组合型数据操作数进行操作。
术语“寄存器”在这里用于指板载处理器的存储器单元,所述存储器单元用作宏指令的一部分以标识操作数。换句话说,这里所指的寄存器是那些从处理器外(从程序员的视角)可以看见的寄存器。但是,实施例的寄存器不应该被限制于具体类型的电路。相反地,实施例的寄存器只需要能够存储和提供数据,并执行这里所描述的功能。这里所描述的寄存器可以通过使用任何数量不同技术而由处理器内的电路来实现,例如专用物理寄存器、使用寄存器重命名的动态分配物理寄存器、专用和动态分配物理寄存器的组合等等。在一个实施例中,整数寄存器存储32位整数数据。一个实施例的寄存器文件还包含八个用于组合型数据的多媒体SIMD寄存器。对于下面的讨论,所述寄存器被理解成被设计用于容纳组合型数据的数据寄存器,例如用Intel公司的MMX技术使能的微处理器中的64位宽MMXTM寄存器(在一些情况下也称为‘mm’寄存器)。这些以整数和浮点形式都可用的MMX寄存器可以对伴有SIMD和SSE指令的组合型数据元素进行操作。类似地,与SSE2技术相关的128位宽XMM寄存器也可以被用于容纳这种组合型数据操作数。在这个实施例中,在存储组合型数据和整数数据时,寄存器不需要在这两个数据类型之间进行区分。
图3A图示了根据本发明一个实施例的128位宽多媒体寄存器中多种有符号和无符号组合型数据类型表示。这个示例的组合型字节格式包含16个组合型字节数据元素。字节在此被定义为8个数据位。无符号组合型字节表示302图示了SIMD寄存器中无符号组合型字节的存储。每一个字节数据元素的信息以如下方式存储:位7到位0用于字节0、位15到位8用于字节1、位23到位16用于字节2以及位127到位120用于字节15。这样,使用了寄存器中所有可用的位。这种存储安排还可以提高处理器的存储效率。因为16个数据元素被访问,所以现在一个操作可以以并行的方式对16个数据元素进行操作。
有符号组合型字节表示304图示了有符号组合型字节的存储。注意,每一个字节数据元素的第八位是符号标志符。这个例子的组合型字格式包含八个组合型字数据元素。每一个组合型字包含16位信息。无符号组合型字表示306图示了在SIMD寄存器字7到字9是怎样存储中的。有符号组合型字表示308类似于无符号组合型字寄存器内表示306。注意,每一个字数据元素的第16位是符号标志符。这里的组合型双字格式有128位长,并包含四个组合型双字数据元素。每一个组合型双字元素包含32位信息。无符号组合型双字表示310示出了双字数据元素是怎样存储的。有符号组合型双字表示312类似于无符号组合型双字寄存器内表示310。注意,必需的符号位是每一个双字数据元素的第32位。组合型四字为128位长,并包含两个组合型四字数据元素。
一般地,数据元素是与相同长度的其他数据元素一起存储在单个寄存器或存储器单元中的单项数据。在与SSE2技术相关的组合型数据序列中,存储在XMM寄存器中的数据元素的数量是128位除以单项数据元素的位长度。类似地,在与MMX和SSE技术相关的组合型数据序列中,存储在MMX寄存器中的数据元素的数量是64位除以单项数据元素的位长度。虽然图3A中图示的数据类型是128位长,但是本发明的实施例还可以用64位宽或其他大小的操作数来操作。
图3B说明了可替换的寄存器内数据存储格式。每一个组合型数据可以包括多于一个的独立的数据元素。图示了三种组合型数据格式:组合型半结构(half)341、组合型单结构(single)342和组合型双结构(double)343。组合型半结构341、组合型单结构342和组合型双结构343的一个实施例包含定点数据元素。对于一个可替换的实施例,组合型半结构341、组合型单结构342和组合型双结构343中的一个或多个可以包含浮点数据元素。组合型半结构341的一个可替换实施例是128位长,包含八个16位数据元素。组合型单结构342的一个可替换实施例是128位长,包含四个32位数据元素。组合型双结构343的一个可替换实施例是128位长,包含两个64位数据元素。应该理解,这种组合型数据格式可以被进一步扩展成其他寄存器长度,例如96位、160位、192位、224位、256位或更长。
图3C示出了具有32或更多位的操作编码(opcode)格式360以及寄存器/存储器操作数寻址模式的一个实施例,其符合加州Santa Clara的Intel公司在万维网(www)intel.com/design/litcentr上提供的“IA-32 IntelArchitecture Software Developer’s Manual Volume 2:Instruction SetReference”中描述的opcode格式类型。具有取整和移位的高位乘法运算的类型,可以由字段361和362中的一个或多个编码。每个指令可以标识多达两个操作数位置,包括多达两个源操作数标识符364和365。对于具有取整和移位的高位乘法指令的一个实施例,目标操作数标识符366与源操作数标识符364是一样的。对于可替换的实施例,目标操作数标识符366与源操作数标识符365是一样的。因此,对于具有取整和移位的高位乘法运算的实施例,由源操作数标识符364和365识别的源操作数中的一个被具有取整和移位的高位乘法运算的结果重写。对于具有取整和移位的高位乘法指令的一个实施例,操作数标识符364和365可以被用于识别64位源和目标操作数。
图3D示出了另一个可替换的操作编码(opcode)格式370,其具有40位或更多位。opcode格式370与操作编码格式360对应,并包括可选的前缀字节378。具有取整和移位的高位乘法运算的类型可以由字段378、371和372中的一个或多个编码。可以由源操作数标识符374和375以及前缀字节378为每个指令标识多达两个的操作数位置。对于具有取整和移位的组合型高位乘法指令的一个实施例,前缀字节378可以被用于标识128位源和目标操作数。对于高位乘法指令的一个实施例,目标操作数标识符376与源操作数标识符374相同。对于可替换的实施例,目标操作数标识符376与源操作数标识符375相同。因此,对于高位乘法运算的实施例,由源操作数标识符374和375标识的源操作数中的一个被高位乘法运算的结果重写。opcode格式360和370允许部分地由MOD字段363和373以及由可选的带比例因子的基址变址和偏移字节指定的下列寻址模式:寄存器到寄存器(register to register)的寻址、存储器到寄存器(memory to register)的寻址、通过存储器对寄存器(register bymemory)的寻址、通过寄存器对寄存器(regsiter by register)的寻址、通过立即数对寄存器(register by immediate)的寻址、寄存器到存储器(register to memory)的寻址。
接下来转到图3E,在一些可替换的实施例中,可以通过协处理器数据处理(CDP)指令进行64位单指令多数据(SIMD)算术运算。操作编码(opcode)格式380示出了有CDP opcode字段382和389的这样一个CDP指令。对于具有取整和移位的高位乘法运算的可替换实施例,CDP指令的类型可以由字段383、384、387和388中的一个或多个编码。每个指令可以标识多达三个操作数位置,包括多达两个源操作数识别符385和390以及一个目标操作数标识符386。协处理器的一个实施例可以对8、16、32和64位值进行操作。对于一个实施例,对定点或整数数据元素进行高位乘法运算。在一些实施例中,可以使用条件字段381来有条件地执行具有取整和移位的高位乘法指令。对于一些高位乘法指令,源数据大小可以由字段383编码。在具有取整和移位的高位乘法指令的一些实施例中,可以对SIMD字段做零(Z)、负(N)、进位(C)和溢出(V)检测。对于一些指令,饱和的类型可以由字段384编码。
在本发明的一个实现中,具有取整和移位的组合型高位乘法可以用下面这种指令格式表示:PMULHRSW mm1,mm2/m64。这种情况下的PMULHRSW是具有取整和移位的组合型字高位乘法的助记符。在这种情况下,该指令有两个源操作数,mm1和mm2/m64。这个实现的指令用由多个更小的数据元素组成的64位组合型数据块来操作。在这种情况下,单项数据元素是16位或一个字长。这样,总共具有64位的四个字可以位于每一个组合型数据块中。这里,第一源操作数‘mm1’是64位MMX寄存器。在这个实施例中,来自第一源操作数的64位MMX寄存器‘mm1’也是具有取整和移位的组合型高位乘法运算结果的目标位置。这个例子中的第二源操作数‘mm2/m64’可以是64位MMX寄存器(mm2)或64位存储器单元(m64)。
虽然下面描述的例子一般是在64位长操作数和数据块的上下文中,但是具有取整和移位的高位乘法指令的实施例也可以用128位组合型数据块操作。例如,一个实施例的指令格式可以表示为:PMULHRSWxmm1,xmm2/m128。在这种情况下的两个源操作数的每一个都是128位长,每一个由八个16位用字定义大小的数据元素组成。这里,第一源操作数‘xmm1’是128位XMM寄存器。对于这个实施例,XMM寄存器‘xmm1’也是结果的目标位置。这个例子中的第二源操作数‘xmm2/m128’可以是128位XMM寄存器(xmm2)或128位存储器单元(m128)。对于这个实施例,数据块中的每一个可以包含有符号整数值。在一个实现中,该有符号整数值是二进制补码格式。
此外,虽然这里描述的实施例涉及由用字定义大小的数据元素组成的组合型数据块,但是也可以考虑多种其他大小的数据元素。例如,具有取整和移位的组合型高位乘法指令的可替换实施例可以操作具有字节、双字或四字长度的单项数据元素。类似地,数据操作数的长度不限于64和128。例如,该指令的其他实施例可以操作256位长组合型操作数。
图4A是用于根据本发明对数据操作数进行具有取整和移位的SIMD整数高位乘法运算的逻辑的一个实施例的方框图。这个实施例的用于具有取整和移位的高位乘法PMULHRSW指令(为了简便,也称为高位乘法)从下面两项信息开始:第一数据操作数数据A 410和第二数据操作数数据B 420。在一个实施例中,PMULHRSW高位乘法指令被译码成一个微操作。在可替换的实施例中,该指令可以被译码为可变数量的微op,以对数据操作数进行高位乘法运算。
对于这些讨论,数据A 410和数据B 420以及结果数440一般称作操作数或数据块,但是并不限于此,其还包括寄存器、寄存器文件和存储器单元。在一个实施例中,数据A 410和数据B 420是64位宽的MMX寄存器(在一些情况下也称作‘mm’)。取决于具体实现,数据操作数可以是其他宽度,例如128或256位。第一410和第二420操作数是这种数据块:其包括x个数据段,并且如果每一个数据段是一个字节(8位)则具有8x位的总宽度。这样,这些数据段中的每一个是‘x×8’位宽。所以,如果x是8,则每一个操作数是8字节或64位宽。对于其他实施例,数据元素可以是半字节(4位)、字(16位)、双字(32位)、四字(64位)等。在可替换的实施例中,x可以是16、32、64等数据元素宽。
这个例子中的第一组合型操作数410由四个数据元素组成:A3、A2、A1和A0。第二组合型操作数420也由四个数据元素组成:B3、B2、B1和B0。这里的数据元素具有相等的长度,并且每一个都由单字(16位)数据组成。但是,本发明的另一个实施例用更长的128位操作数操作,其中,数据段的每一个都由单字节(8位)组成,并且128位宽的操作数将具有16个字节宽的数据段。类似地,如果每一个数据段是双字(32位)或四字(64位),则128位操作数将分别具有四个双字宽或两个四字宽的数据段。因此,本发明的实施例不限于特定长度的数据操作数或数据段,并且可以为每一个实现适当地定义大小。
操作数410、420可以位于寄存器或存储器单元或寄存器文件或它们的混合结构中。数据操作数410、420以及具有取整和移位的高位乘法指令一起被发送到处理器中执行单元的具有取整和移位的高位乘法计算逻辑430。到PMULHRSW指令到达执行单元的时候,该指令应该已经在处理器流水线中的更早的时候被译码。这样,高位乘法指令可以具有微操作(uop)的形式或者某种其他被译码的形式。对于这个实施例,两个数据操作数410、420在具有取整和移位的高位乘计算逻辑430处被接收。因为这个例子是用64位宽操作数进行的,所以临时空间431需要容纳128位宽的中间结果乘积。对于128位宽数据操作数,需要256位宽的临时空间。
这个实施例的逻辑430首先将在每一个元素位置的相应数据值相乘以得到乘积A×B。‘A×B’的四个位置的每一个中间32位值被截断成每一个都是18位。在这个实施例中,截断是如下进行的:将每一个32位值右移14位以去掉那些位。这使每一个临时值都剩下18位。在这个实施例中为了取整目的,对最低有效位加‘1’。紧邻每一个被取整的值的最高有效位右边的16位被输出到结果数440中的各个数据元素位置。所以对于这个例子中的最左边的数据元素位置,结果数等于‘((A3×B3)>>14)+1’的位[16:1]。对取整结果的位[16:1]的选择如在小数运算中一样正确地缩放该值。
本发明的另一个实施例可以用可替换长度的操作数和数据段操作,例如128/256/512位宽的操作数以及用位/字节/双字/四字定义大小的数据段。因此,本发明的实施例不限于特定长度的数据操作数或数据段,并且可以为每一个实现适当地规定大小。
一个实施例的具有取整和移位的组合型整数高位乘法指令被执行时,使得第一源操作数和第二源操作数中的组合型有符号整数字进行SIMD有符号的16位和16位的相乘,以产生精确的32位中间乘积。在一个实现中这个中间乘积首先被截断成最高有效18位。对这18位值的选择提供了18位的中间精度。通过对这一18位值的最低有效位加‘1’来对该被截断的值进行取整。换句话说,所述取整包括对最初32位中间乘积的位14的位值加‘1’。通过选择紧邻该18位值的最高有效位右边的16位来得到最终的结果值。在这个实施例中,每一个结果值包括单个符号位。这个例子中的每一个结果数据元素都可以具有‘1.15’的定点整数格式。与前面的最高2位是符号位的2.14格式相比,利用1.15格式可以获得额外一位的精度。这个实施例的具有取整和移位的高位乘法指令将每一个被取整并移位的中间32位值的所选择的16位存储在目标操作数的适当位置。
对于这个实施例,这个以及其他数据元素位置的结果被一起组合到具有与源数据操作数相同大小的结果数据块中。例如,如果源组合型数据操作数是64或128位宽,则所得到的组合型数据块也分别是64或128位宽。此外,用于符号操作的源数据操作数可以来自寄存器或存储器单元。对于这个实施例,所得到的组合型数据块重写用于源数据操作数之一的SIMD寄存器中的数据。
图4B是对所选数据元素位置的具有取整和移位的整数高位乘法运算的操作方框图。数据元素A 450来自第一源操作数。数据元素B 452来自第二源操作数。这个实施例的具有取整和移位的高位乘法运算454开始于将所述数据元素相乘在一起以产生中间值TEMP 456。对于两个16位宽的源数据元素,乘积是32位宽的中间值。对于这个实施例,在取整和缩放中使用TEMP 456的最高有效18位。通过保持18位,在计算中可以得到额外的准确度和精度。通过取整和缩放中间值456来继续进行具有取整和移位的高位乘法运算454,以获得更新的中间值458。在本发明的这个实施例中,通过对32位中间值TEMP 456的位14加‘1’来进行取整。同时,该32位值的位14也是我们感兴趣的18位宽部分的最低有效位。对32位的被取整的值进行移位以缩放中间值。对取整值进行一位的左移以达到更新的中间值458。更新的中间值458被截断以得到结果460。对于这个例子,感兴趣的位是32位的更新的中间值458的位置高16位,并被存储为结果460。在截断过程中去掉低16位。
图5是用于进行根据本发明的具有取整和移位的高位乘法运算的电路500的一个实施例的方框图。这个实施例的电路500位于向量复杂整数单元内。对于128位操作数实现,这个整数单元将PMULHRSW指令拆分为八个部分,每个部分都做一个16位乘16位的乘法。对于64位操作数实现,需要四个部分。在图5中,SRC Y元素502被发送到基数为4的布思(booth)重新编码模块504。SRC X元素506在布思多路选择器(mux)508处被接收。布思多路选择器产生一组9个部分乘积向量509。
在手动乘法运算中,该过程开始于取得一个操作数(A)的最低有效位并将该最低有效位与另一个操作数(B)的数位逐位地相乘。这样,对于A的需要被乘的每一位,都产生一行结果。这些行中的每一行都被看作为部分乘积。例如,
     1001          (9)
×       0110          (6)
------------------
    0000
   1001
  1001
+0000
------------------
 0110110          (54)
因为需要大量硬件以处理较大的数的乘法运算的所有部分乘积,所以在一个实施例中实现了布思重新编码技术以简化运算。利用布思重新编码,产生了稍超过用手动方法所产生的部分乘积的一半(N位/2+1)的部分乘积。例如,布思重新编码生成3个部分乘积,而不是具有上述的四个部分乘积。因此对于16×16的乘法,有‘16/2+1’或9个部分乘积要相加在一起。这个方法这里也称为基数为4的。每一个16位乘法阵列都是基数为4的布思编码阵列。布思编码产生9个部分乘积,通过进位求和加法器(carry sum adder,CSA)树结构和加法器来减少该9个部分乘积。在一个实施例中,CSA树的全部16位阵列结构如下:
4      4        33         2    1    10        0位
765432109876543210987654321098765432109876543210
                                pp                   行I_p1
    1s=------------------------pp00000000000000     I8
     1s=------------------------pp000000000000      H7
      1s=------------------------pp0000000000       G6
       1s=------------------------pp00000000        F5
        1s=------------------------pp000000         E4
         1s=------------------------pp0000          D3
          1s=------------------------pp00           C2
           1s=------------------------pp            B1
            sSS=------------------------            A0
|----------------|
本实施例被准备来处理负乘法运算。‘S’代表符号,‘P’被用来描述前面的部分乘积的最低两位。例如,部分乘积1中的“pp”是部分乘积0的最低两位。最高位的符号扩展的实质是复制(roll off)符号位。这类似于二进制补码中用于在乘法运算前使负数变正的位求反运算。类似地,‘P’位的实质是为负到正转换的二进制补码求反提供+1。
位[31:16]可以被看作乘法运算的高位结果位。但是对于具有取整和移位的高位乘法,在最终结果之前进行取整和移位。在一个实施例中,取整包括对阵列中位于某处的位位置14加‘1’。但是,部分乘积树中在位14没有自由位置可以容易地加‘1’。行8中,在位13、位12和位11有自由位置。类似地,在行7的位11也有自由位置。如下对R位所示的那样,对这四个位置加‘1’将使‘1’向上传播到位位置14。利用这个实施例的取整技术,CSA压缩树510如下:
4      4        33         2    1    10        0
765432109876543210987654321098765432109876543210
                              pp                  行I_p1
           1s=---------------ppRRR00000000000    I8
             1s=---------------ppR00000000000    H7
               1s=---------------pp0000000000    G6
                 1s=---------------pp00000000    F5
                   1s=---------------pp000000    E4
                     1s=---------------pp0000    D3
                       1s=---------------pp00    C2
                         1s=---------------pp    B1
                          sSS=---------------    A0
             |------pmulhrsw----|
本发明的实施例使用CSA来帮助在32位加法器514之前将部分乘积项从9减少到2。在一个实施例中,CSA压缩树(使用一个4:2 CSA)将部分乘积的数量首先从9减少到6,然后从6到4,最后从4到2。这一技术避免了需要九个32位加法器。在这个实施例中CSA树510的输出是两个被减少了的部分乘积项。一个是最后CSA的和项,另一个是进位完成项(carry out term)。为了将这两项逻辑相加在一起以得到完整的结果,进位完成项必须被左移一位以与和项正确地匹配。例如,进位完成项的最低有效位即位0需要与和项的位1对齐。
32位加法器514将和512与进位511相加在一起,以产生完整的结果515。这个实施例中的和512是和[31:0]。进位511是被左移一个位位置的进位[30:0]。对于这个实施例,相关位是位[30:15]。这16位从上述相乘的乘积被移位一位。对于电路500的这个实施例,用结果多路选择器518和结果多路选择译码器516实现移位。因此,具有取整和移位的有符号整数高位乘法运算的结果数520是完整的结果515的紧邻最高有效位右边的16个位,或者换句话说是完整的结果[30:16]。对于这个实施例,来自8个阵列结构的每一个的结果数被串接在一起以产生最终的128位结果,一个阵列结果用于一对数据元素。
图6A图示了根据本发明第一实施例的具有取整和移位的组合型高位乘法指令的操作。64位宽源操作数数据A 601由四个数据元素602、603、604、605组成,分别填充有16进制值479C16、1AF716、C00016和020016。类似地,64位宽源操作数数据B 611由四个数据元素612、613、614、615组成,分别填充有16进制值D76E16、2BC516、C0FF16和022016。根据本发明一个实施例的具有取整和缩放的组合型高位乘法指令用数据A 601和数据B 611作为源操作数,将生成结果数操作数621。这个实施例的具有取整和缩放的组合型高位乘法运算为每一个相应的源数据元素对产生一个结果。在这个例子中,结果数621中的四个数据元素具有16进制值E94E16622、093816623、1F8116624和000916625。
图6B进一步详细说明了在图6A的特定数据元素位置的组合型高位乘法指令的操作。接着图6A的例子,现在更详细地描述从左边的第二数据元素位置。数据A 601最左边的第二数据元素603的值是1AF716(或者二进制0001 1010 1111 0111)。数据B 611最左边的第二数据元素613的值是2BC516(或者二进制0010 1011 1100 0101)。在具有取整和缩放的组合型高位乘法运算期间,首先将两个值相乘以获得乘积631,该乘积631为049C 3D1316(0000 0100 1001 1100 0011 1101 0001 00112)。这个乘积631被作为临时中间值TEMP 630的第一个版本处理。
对乘积631进行该操作的取整633部分。在这个实施例中,取整633包括对乘积631的位14 632增加值‘1’。取整633的结果634获得了TEMP 630的一个更新的版本。取整结果634的值为049C 7D1316(00000100 1001 1100 0111 1101 0001 00112)。在这个实施例中,缩放被取整的结果634以获得期望的结果数值。这里进行的缩放634是将TEMP 630中被取整的结果634左移一位。因此,位30到15被上移到位位置31到16。TEMP 630被截断到16位值,其中,被取整和移位的值的最高有效16位(高位部分)作为结果数623被输出。结果数623是组合型结果数621中从左边开始的第二数据元素位置。在这个例子中,结果数623的值为093816(0000 1001 0011 10002)。
对一对64位操作数的第二数据元素位置的这种具有取整和缩放的组合型高位乘法(PMULHRSW)运算的例子还可以被表示为:
0x1AF7×0x2BC5=0x0938
temp=0x1AF7×0x2BC5=0x049C3D13
                    =0000 0100 1001 1100 0011 1101 0001 0011
取整                 +0000 0000 0000 0000 0100 0000 0000 0000
                      ---------------------------------------
temp(被取整的结果)  =0000 0100 1001 1100 0111 1101 0001 0011
    移位<<1位
temp(被移位的结果)  =0000 1001 0011 1000 1111 1010 0010 0110
截断                  ----- ---- ---- ----
       结果         =0000 1001 0011 1000=0x0938
在上述例子中,源数据操作数中的一个或两者可以是具有MMX/SSE技术的处理器中的64位数据寄存器或者具有SSE2技术的128位数据寄存器。取决于实现,这些寄存器可以是64/128/256位宽。类似地,源操作数中的一个或两者除了是寄存器以外还可以是存储器单元。对于一个实施例,结果数的目标位置也是MMX或XMM数据寄存器。例如,在一种体系结构中,具有取整和移位的高位乘法指令具有第一源操作数MM1和第二源操作数MM2。在这种情况下,结果数的预定义目标位置可以是用于第一源操作数的寄存器。
图7A是说明下面这种方法的一个实施例的流程图700,该方法是:对组合型数据操作数进行具有取整和移位的整数高位乘法,以获得乘积的高位部分。长度值L在这里一般被用于表示操作数和数据块的宽度。取决于具体的实施例,L可以被用于以数据段、位、字节、字等的数量来指定宽度。在方框710,长度为L的第一数据操作数A被接收,以与具有取整和移位的组合型整数高位乘法运算的执行一起使用。在方框720,用于PMULHRSW运算的长度为L的第二数据操作数B也被接收。在方框730,处理执行具有取整和移位的高位乘法的指令。
现在就每一个数据元素位置发生的情况来进一步描述这个实施例中在方框730的具有取整和移位的高位乘法运算的细节。对于一个实施例,并行处理对所有组合型结果数数据元素位置的具有取整和移位的高位乘法运算。在另一个实施例中,可以一次只处理数据元素的某个部分。在方框731,通过将来自操作数A的元素的值和来自操作数B的元素的值相乘来计算临时值TEMP。在方框732,取整临时值。对于一个实施例,在计算中使用临时值的高位的18位以获得更好的精确度。在另一个实施例中,感兴趣的可以是不同数量的位。在方框732中进行取整之后,在方框733缩放临时值。对于这个实施例,缩放包括将临时值左移一位。在方框734,临时值被截断到所需要的数量的位,并作为结果数值被存储到目标位置。不同的源数据元素对中的每一对源数据元素的结果数值被安排到结果数组合型操作数中与该源元素对相对应的适当的数据元素位置。
图7B是说明下面这种方法的另一个实施例的流程图,该方法用于获得具有取整和移位的组合型整数乘法运算所得乘积的相关高位部分。在这个实施例中,操作数由用字定义大小的数据元素组成。但是,其他实施例可以用以其他方式定义大小的数据元素来实现,包括例如用字节、双字或四字来定义大小。在方框742,用于具有取整和缩放的高位乘法运算的控制信号被译码。在方框744,进行检查以确定操作中涉及的操作数大小。对于一个实施例,操作数大小可以通过方框742的控制信号译码来确定。例如,操作数大小可以与指令一起编码。如果操作数大小被确定为64位长,则在方框746根据数据位于哪里来访问寄存器文件和/或存储器,以获得操作数数据。在一个实施例中,源操作数可以位于SIMD寄存器和/或存储器单元中。对于这个实施例的64位长操作数,每一个操作数都具有四个用字定义大小的数据元素。
在方框747,对于这四对源数据元素的计算被示出为四组等式。第一等式‘TEMP[31:0]=A[15:0]×B[15:0]’表示源数据元素的乘法运算。第二等式‘INT(TEMP[31:0]>>14)+1’表示中间结果的取整。对于这个实施例,临时值被右移14位,并且对最低有效位加‘1’。换句话说,保持该中间值的高18位,并对最初为位14的位加‘1’。第三等式‘DEST[15:0]=TEMP[16:1]’表示被取整结果的移位和截断。在这种情况下,每一个所得的数据元素也是一个字,所以需要16位。注意,剩余的18位的位[16:1]是在这里抽取的。在这个实施例中,通过取得紧邻最低有效位左边的16位来进行移位。被截断的值作为该数据元素位置的结果数而被存储。在方框747,对每一个数据元素位置重复这三个等式的操作,直到所述位范围填充了该位置的正确值(即,[15:0]、[31:15]、[47:32]和[63:48])。
在方框744,如果操作数大小被确定为128位长,则在方框748访问寄存器文件和/或存储器以获得必需的操作数数据。对于这个实施例的128位长操作数,每一个操作数都具有八个用字定义大小的数据元素。如64位路径那样,在方框749,8个源数据元素对中的每一个都用上述的那组三个等式处理。这个128位路径中的8组等式的正确位范围是[15:0]、[31:15]、[47:32]、[63:48]、[79:64]、[95:80]、[111:96]和[127:112]。虽然这个例子中描述的两个路径涉及64和128位操作数,但是多种其他长度的操作数也可与其他可替换的实施例一起操作。8个16位值中的每一个用于一个数据元素位置,并被存储在DEST中它们各自的数据元素位置。
因此,本发明公开了用于具有取整和移位的SIMD整数高位乘法的技术。虽然已经在附图中描述并示出了具体的示例实施例,但是应理解,这些实施例仅仅是对这个广泛的发明的说明而不是限制,并且这个发明不限于所示出和描述的具体的结构和排列,因为本领域的技术人员研究这里所公开的发明后可以想到多种其他的修改。在这种发展快速并且难以预见进一步改进的技术领域中,通过应用技术进步,所公开的实施例在布局和细节上是很容易被修改,而不会脱离本发明的原理或所附权利要求的范围。

Claims (68)

1.一种方法,包括:
接收具有第一组L个数据元素的第一操作数;
接收具有第二组L个数据元素的第二操作数;
将L对数据元素相乘在一起以产生一组L个乘积,其中,所述L对中的每一对包括来自所述第一组L个数据元素的第一数据元素和来自所述第二组L个数据元素的相应的数据元素位置的第二数据元素;
取整所述L个乘积中的每一个,以产生L个被取整的值;
缩放所述L个被取整的值中的每一个,以产生L个被缩放的值;以及
截断所述L个被缩放的值中的每一个以存储在目标位置,其中,每一个被截断的值都将被存储在与其数据元素对相对应的数据元素位置。
2.如权利要求1所述的方法,其中,所述取整还包括对所述L个乘积中的每一个的指定位位置加‘1’。
3.如权利要求2所述的方法,其中,所述指定位位置是所述L个乘积中的每一个的位14。
4.如权利要求3所述的方法,其中,所述缩放还包括将所述L个被取整的值中的每一个左移一位。
5.如权利要求4所述的方法,其中,所述截断还包括从L个被缩放的值中的每一个中抽取16个最高有效位,以获得L个被截断的值。
6.如权利要求5所述的方法,其中,所述第一和第二操作数的每一个数据元素位置都被并行地处理。
7.如权利要求6所述的方法,其中,所述处理包括所述相乘、所述取整、所述缩放和所述截断。
8.如权利要求2所述的方法,其中,所述取整还包括:
将所述L个乘积中的每一个右移14位,以产生一组L个18位宽的被移位的值;以及
对所述被移位的值中的每一个的最低有效位位置加‘1’。
9.如权利要求8所述的方法,其中,所述缩放还包括将所述L个被取整的值中的每一个右移一位,以产生一组L个被缩放的值。
10.如权利要求9所述的方法,其中,所述截断还包括从L个被缩放的值中的每一个中选择16个最低有效位,以获得L个被截断的值。
11.如权利要求1所述的方法,其中,所述第一操作数和所述第二操作数中的每一个都是包含多个数据元素的组合型数据操作数。
12.如权利要求11所述的方法,其中,所述数据元素中的每一个都容纳有符号整数值。
13.如权利要求1所述的方法,其中,所述目标位置是组合型数据块。
14.如权利要求13所述的方法,其中,每一个数据元素是一个字长。
15.如权利要求14所述的方法,其中,所述第一操作数、所述第二操作数和所述目标位置中的每一个都是64位长。
16.如权利要求14所述的方法,其中,所述第一操作数、所述第二操作数和所述目标位置中的每一个都是128位长。
17.如权利要求14所述的方法,其中,所述第一操作数和所述第二操作数驻留于单指令多数据寄存器中。
18.一种方法,包括:
接收指令,该指令用于对两个操作数进行具有取整和移位的组合型高位乘法运算,其中,所述具有取整和移位的组合型高位乘法运算包括:
将第一组组合型数据元素中的每一个数据元素与第二组组合型数据元素中的相应的数据元素相乘,以产生一组乘积,
取整并移位所述乘积组中的每一个,以产生一组结果,以及
从所述结果中的每一个中选择多个位,以产生一组被截断的结果;
所述指令具有包括如下内容的格式:
第一字段,用于指定操作编码,以提供关于所述具有取整和移位的组合型乘法运算的信息;
第二字段,用于指定第一操作数的第一源地址,所述第一操作数具有所述第一组组合型数据元素;和
第三字段,用于指定第二操作数的第二源地址,所述第二操作数具有所述第二组组合型数据元素;以及
执行所述指令以产生所述被截断的结果组,以作为组合型数据元素而存储在目标寄存器中。
19.如权利要求18所述的方法,其中所述操作编码将指示所述具有取整和移位的组合型高位乘法运算的所述被截断的结果组包括所述结果组的高端位还是低端位。
20.如权利要求19所述的方法,其中所述第一源地址是用于存储所述第一组组合型数据元素的第一寄存器的第一地址。
21.如权利要求20所述的方法,其中所述寄存器也是所述具有取整和移位的组合型乘法运算的所述被截断的结果组的目标位置。
22.如权利要求21所述的方法,其中所述第二源地址是用于存储所述第二组组合型数据元素的第二寄存器的第二地址。
23.如权利要求18所述的方法,其中所述第一字段包括一个位,用于指示所述具有取整和移位的组合型乘法运算是有符号运算还是无符号运算。
24.如权利要求23所述的方法,其中,所述第一字段至少还包括两个位,用于指示从所述结果组中选择的多个位中的每一位包括特定结果的高端位还是所述结果的低端位。
25.如权利要求18所述的方法,其中,所述格式还包括符号字段,用于指示所述具有取整和移位的组合型乘法运算是有符号运算还是无符号运算。
26.如权利要求25所述的方法,其中,所述格式还包括大小字段,用于指示所述组合型数据元素中的每一个的长度。
27.如权利要求26所述的方法,其中,所述格式还包括第四字段,用于指定目标地址,该目标地址用于接收所述具有取整和移位的组合型乘法运算的所述结果组。
28.如权利要求18所述的方法,其中,所述操作编码的所述信息指示有符号整数的具有取整和移位的组合型乘法并将选择所述结果中的每一个的高端位,以获得被截断的结果。
29.如权利要求18所述的方法,其中所述取整包括对所述乘积中的每一个的位14加‘1’,以获得一组被取整的值,并且其中所述移位包括将所述被取整的值中的每一个左移一个位位置。
30.如权利要求29所述的方法,其中来自所述结果中每一个的多个位中的每一位都是该特定结果的16个高端位。
31.一种装置,包括:
用于执行一个指令集的一个或多个指令的执行单元,所述指令集至少包括一个用于进行具有取整和移位的组合型乘法运算的指令,其中所述执行单元响应于所述至少一个用于进行具有取整和移位的所述组合型乘法运算的指令,
将第一组组合型数据元素中的每一个数据元素与第二组组合型数据元素中的相应的数据元素相乘,以产生一组乘积,
取整并移位所述乘积组中的每一个,以产生一组结果,以及
从所述结果中的每一个中选择多个位,以产生一组被截断的结果;
其中,所述至少一个指令具有包括如下内容的格式:
第一字段,用于指定操作编码以提供关于所述具有取整和移位的组合型乘法运算的信息,
第二字段,用于指定第一操作数的第一源地址,所述第一操作数具有所述第一组组合型数据元素,和
第三字段,用于指定第二操作数的第二源地址,所述第二操作数具有所述第二组组合型数据元素。
32.如权利要求31所述的装置,其中所述被截断的结果作为组合型数据元素被存储在目标寄存器中,其中所述被截断的结果包括所述结果中的每一个的所选部分。
33.如权利要求32所述的装置,其中所述操作编码将指示所述具有取整和移位的组合型高位乘法运算的所述被截断的结果组包括所述结果组的高端位还是低端位。
34.如权利要求31所述的装置,其中所述第一源地址是用于存储所述第一组组合型数据元素的第一寄存器的第一地址,并且所述第二源地址是用于存储所述第二组组合型数据元素的第二寄存器的第二地址。
35.如权利要求34所述的装置,其中所述寄存器也是所述具有取整和移位的组合型乘法运算的所述被截断的结果组的目标位置。
36.如权利要求31所述的装置,其中所述第一字段包括一个位,用于指示所述具有取整和移位的组合型乘法运算是有符号运算还是无符号运算。
37.如权利要求36所述的装置,其中,所述第一字段至少还包括两个位,用于指示从所述结果组中选择的多个位中的每一位包括特定结果的高端位还是所述结果的低端位。
38.如权利要求31所述的装置,其中,所述格式还包括符号字段,用于指示所述具有取整和移位的组合型乘法运算是有符号运算还是无符号运算。
39.如权利要求38所述的装置,其中,所述格式还包括大小字段,用于指示所述组合型数据元素中的每一个的长度。
40.如权利要求39所述的装置,其中,所述格式还包括第四字段,用于指定目标地址,该目标地址用于接收所述具有取整和移位的组合型乘法运算的所述结果组。
41.如权利要求31所述的装置,其中,所述操作编码的所述信息指示有符号整数的具有取整和移位的组合型乘法并将选择所述结果中的每一个的高端位,以获得被截断的结果。
42.如权利要求31所述的装置,其中,所述取整包括对所述乘积中的每一个的位14加‘1’,以获得一组被取整的值,并且其中所述移位包括将所述被取整的值中的每一个左移一个位位置。
43.如权利要求42所述的装置,其中,来自所述结果中每一个的多个位中的每一位都是该特定结果的16个高端位。
44.一种系统,包括:
存储器,用于存储数据和指令;
处理器,其通过总线耦合到所述存储器,所述处理器可操作以响应于具有取整和移位的乘法指令来进行具有取整和移位的乘法运算,所述处理器包括:
总线单元,其用于从所述存储器接收所述具有取整和移位的乘法指令;和
执行单元,其耦合到所述总线单元,所述执行单元用于执行所述具有取整和移位的乘法指令,所述具有取整和移位的乘法指令使所述执行单元:
将第一组组合型数据元素中的每一个数据元素与第二组组合型数据元素中的相应的数据元素相乘,以产生一组乘积,
取整并移位所述乘积组中的每一个,以产生一组结果,以及
从所述结果中的每一个中选择多个位,以产生一组被截断的结果。
45.如权利要求44所述的系统,其中,所述具有取整和移位的乘法指令具有包含如下内容的格式:
第一字段,用于指定操作编码,以提供关于所述具有取整和移位的组合型乘法运算的信息;
第二字段,用于指定第一操作数的第一源地址,所述第一操作数具有所述第一组组合型数据元素;和
第三字段,用于指定第二操作数的第二源地址,所述第二操作数具有所述第二组组合型数据元素。
46.如权利要求45所述的系统,其中,所述操作编码的所述信息指示有符号整数的具有取整和移位的组合型乘法并将选择所述结果中的每一个的高端位,以获得被截断的结果。
47.如权利要求46所述的系统,其中,其中所述取整包括对所述乘积中的每一个的位14加‘1’以获得一组被取整的值,并且其中所述移位包括将所述被取整的值中的每一个左移一个位位置。
48.如权利要求47所述的系统,其中,来自所述结果中每一个的多个位中的每一位都是该特定结果的16个高端位。
49.如权利要求45所述的系统,其中,所述操作编码将指示所述具有取整和移位的组合型高位乘法运算的所述被截断的结果组包括所述结果组的高端位还是低端位。
50.如权利要求48所述的系统,其中,所述第一字段包括一个位,用于指示所述具有取整和移位的组合型乘法运算是有符号运算还是无符号运算。
51.如权利要求50所述的系统,其中,所述第一字段至少还包括两个位,用于指示从所述结果组中选择的多个位中的每一位包括特定结果的高端位还是所述结果的低端位。
52.如权利要求45所述的系统,其中,所述格式还包括:
符号字段,其用于指示所述具有取整和移位的组合型乘法运算是有符号运算还是无符号运算;以及
大小字段,其用于指示所述组合型数据元素中的每一个的长度。
53.如权利要求45所述的系统,其中,所述格式还包括用于指定目标地址的第四字段,所述目标地址用于接收所述具有取整和移位组合型乘法运算的所述结果组。
54.如权利要求44所述的系统,其中,所述被截断的结果作为组合型数据元素被存储在目标寄存器中,其中所述被截断的结果包括所述结果中的每一个的所选部分。
55.如权利要求45所述的系统,其中,所述第一源地址是用于存储所述第一组组合型数据元素的第一寄存器的第一地址,并且所述第二源地址是用于存储所述第二组组合型数据元素的第二寄存器的第二地址。
56.如权利要求46所述的系统,其中所述第一寄存器也是所述具有取整和移位的组合型乘法运算的所述被截断的结果组的目标位置。
57.如权利要求44所述的系统,还包括:
无线通信设备,其用于在无线网络上发送和接收数字数据,所述无线通信设备耦合到所述存储器,以存储所述数字信号和软件,其中,所述软件包括所述具有取整和移位的乘法指令;以及
输入输出系统,其响应于所述软件与所述无线通信设备接口,所述输入输出系统用于接收用于处理的数据或者用于发送至少部分地由所述具有取整和移位的乘法指令处理的数据。
58.一种机器可读介质,其具有包含在其上的程序,所述程序可以由机器执行以执行下面这种方法,所述方法包括:
接收具有第一组L个数据元素的第一操作数;
接收具有第二组L个数据元素的第二操作数;
将L对数据元素相乘在一起以产生一组L个乘积,其中,所述L对中的每一对包括来自所述第一组L个数据元素的第一数据元素和来自所述第二组L个数据元素的相应的数据元素位置的第二数据元素;
取整所述L个乘积中的每一个,以产生L个被取整的值;
缩放所述L个被取整的值中的每一个,以产生L个被缩放的值;以及
截断所述L个被缩放的值中的每一个以存储在目标位置,其中,每一个被截断的值都将被存储在与其数据元素对相对应的数据元素位置。
59.如权利要求58所述的机器可读介质,其中,所述取整还包括对所述L个乘积中的每一个的指定位位置加‘1’。
60.如权利要求59所述的机器可读介质,其中,所述指定位位置是所述L个乘积中的每一个的位14。
61.如权利要求60所述的机器可读介质,其中,所述缩放还包括将所述L个被取整的值中的每一个左移一位。
62.如权利要求61所述的机器可读介质,其中,所述截断还包括从所述L个被缩放的值中的每一个中抽取16个最高有效位,以获得L个被截断的值。
63.如权利要求62所述的机器可读介质,其中,所述第一和第二操作数的每一个数据元素位置都被并行地处理,所述处理包括所述相乘、所述取整、所述缩放和所述截断。
64.如权利要求58所述的机器可读介质,其中:
所述取整还包括将所述L个乘积中的每一个右移14位,以产生一组L个18位宽的被移位的值,以及对所述被移位的值中的每一个的最低有效位位置加‘1’;
所述缩放还包括将所述L个被取整的值中的每一个右移一位,以产生一组L个被缩放的值;以及
所述截断还包括从所述L个被缩放的值中的每一个中选择16个最低有效位,以获得L个被截断的值。
65.如权利要求58所述的机器可读介质,其中,所述第一操作数和所述第二操作数中的每一个都是包含多个数据元素的组合型数据操作数。
66.如权利要求65所述的机器可读介质,其中,所述数据元素中的每一个都容纳有符号整数值。
67.如权利要求66所述的机器可读介质,其中,所述第一操作数、所述第二操作数和所述目标位置中的每一个都是64位长。
68.如权利要求66所述的机器可读介质,其中,所述第一操作数、所述第二操作数和所述目标位置中的每一个都是128位长。
CNB2003101215939A 2003-06-30 2003-12-29 用于执行具有取整和移位的组合型高位乘法的方法和装置 Expired - Fee Related CN100541422C (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US10/610,833 2003-06-30
US10/610,833 US7689641B2 (en) 2003-06-30 2003-06-30 SIMD integer multiply high with round and shift

Publications (2)

Publication Number Publication Date
CN1577257A true CN1577257A (zh) 2005-02-09
CN100541422C CN100541422C (zh) 2009-09-16

Family

ID=33541207

Family Applications (1)

Application Number Title Priority Date Filing Date
CNB2003101215939A Expired - Fee Related CN100541422C (zh) 2003-06-30 2003-12-29 用于执行具有取整和移位的组合型高位乘法的方法和装置

Country Status (7)

Country Link
US (1) US7689641B2 (zh)
JP (1) JP4480997B2 (zh)
KR (1) KR100597930B1 (zh)
CN (1) CN100541422C (zh)
NL (1) NL1025106C2 (zh)
RU (1) RU2263947C2 (zh)
TW (1) TWI245219B (zh)

Cited By (34)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102073478A (zh) * 2006-09-22 2011-05-25 英特尔公司 用于处理文本串的指令和逻辑
CN102576302A (zh) * 2009-11-30 2012-07-11 马丁·劳比赫 微处理器及用于微处理器上增强精确度乘积和计算的方法
CN101620589B (zh) * 2008-06-30 2013-06-19 英特尔公司 处理器中的有效并行浮点异常处理
CN104011657A (zh) * 2011-12-22 2014-08-27 英特尔公司 用于向量计算和累计的装置和方法
CN104133748A (zh) * 2006-05-10 2014-11-05 高通股份有限公司 用以在微处理器内组合来自多个寄存器单元的对应半字单元的方法及系统
CN104583980A (zh) * 2012-09-28 2015-04-29 英特尔公司 用于响应于单个指令来执行循环和异或的系统、装置和方法
CN105022605A (zh) * 2006-09-20 2015-11-04 英特尔公司 用于执行点积运算的指令和逻辑
CN106775592A (zh) * 2011-12-23 2017-05-31 英特尔公司 使用三个标量项的超级乘加(超级madd)指令
CN106843811A (zh) * 2011-12-22 2017-06-13 英特尔公司 用于将源操作数映射到不同范围的系统、装置和方法
TWI601062B (zh) * 2015-10-08 2017-10-01 上海兆芯集成電路有限公司 利用使用者指定二維定點算術運算之裝置
CN108139907A (zh) * 2015-10-14 2018-06-08 Arm有限公司 向量数据传送指令
US10140574B2 (en) 2016-12-31 2018-11-27 Via Alliance Semiconductor Co., Ltd Neural network unit with segmentable array width rotator and re-shapeable weight memory to match segment width to provide common weights to multiple rotator segments
CN109144569A (zh) * 2013-03-15 2019-01-04 英特尔公司 用于减少短整数乘法数量的系统、装置和方法
US10228911B2 (en) 2015-10-08 2019-03-12 Via Alliance Semiconductor Co., Ltd. Apparatus employing user-specified binary point fixed point arithmetic
US10275393B2 (en) 2015-10-08 2019-04-30 Via Alliance Semiconductor Co., Ltd. Tri-configuration neural network unit
CN109791478A (zh) * 2016-09-30 2019-05-21 国际商业机器公司 十进制移位和除法指令
US10380481B2 (en) 2015-10-08 2019-08-13 Via Alliance Semiconductor Co., Ltd. Neural network unit that performs concurrent LSTM cell calculations
US10423876B2 (en) 2016-12-01 2019-09-24 Via Alliance Semiconductor Co., Ltd. Processor with memory array operable as either victim cache or neural network unit memory
US10430706B2 (en) 2016-12-01 2019-10-01 Via Alliance Semiconductor Co., Ltd. Processor with memory array operable as either last level cache slice or neural network unit memory
US10438115B2 (en) 2016-12-01 2019-10-08 Via Alliance Semiconductor Co., Ltd. Neural network unit with memory layout to perform efficient 3-dimensional convolutions
US10515302B2 (en) 2016-12-08 2019-12-24 Via Alliance Semiconductor Co., Ltd. Neural network unit with mixed data and weight size computation capability
US10565492B2 (en) 2016-12-31 2020-02-18 Via Alliance Semiconductor Co., Ltd. Neural network unit with segmentable array width rotator
US10565494B2 (en) 2016-12-31 2020-02-18 Via Alliance Semiconductor Co., Ltd. Neural network unit with segmentable array width rotator
US10586148B2 (en) 2016-12-31 2020-03-10 Via Alliance Semiconductor Co., Ltd. Neural network unit with re-shapeable memory
US10664751B2 (en) 2016-12-01 2020-05-26 Via Alliance Semiconductor Co., Ltd. Processor with memory array operable as either cache memory or neural network unit memory
CN111213125A (zh) * 2017-09-08 2020-05-29 甲骨文国际公司 使用simd指令进行高效的直接卷积
US10725934B2 (en) 2015-10-08 2020-07-28 Shanghai Zhaoxin Semiconductor Co., Ltd. Processor with selective data storage (of accelerator) operable as either victim cache data storage or accelerator memory and having victim cache tags in lower level cache wherein evicted cache line is stored in said data storage when said data storage is in a first mode and said cache line is stored in system memory rather then said data store when said data storage is in a second mode
CN111596888A (zh) * 2020-03-02 2020-08-28 成都优博创通信技术股份有限公司 一种在低位宽mcu上实现32位无符号数整型乘法运算的方法
US10776690B2 (en) 2015-10-08 2020-09-15 Via Alliance Semiconductor Co., Ltd. Neural network unit with plurality of selectable output functions
US11029949B2 (en) 2015-10-08 2021-06-08 Shanghai Zhaoxin Semiconductor Co., Ltd. Neural network unit
US11216720B2 (en) 2015-10-08 2022-01-04 Shanghai Zhaoxin Semiconductor Co., Ltd. Neural network unit that manages power consumption based on memory accesses per period
US11221872B2 (en) 2015-10-08 2022-01-11 Shanghai Zhaoxin Semiconductor Co., Ltd. Neural network unit that interrupts processing core upon condition
US11226840B2 (en) 2015-10-08 2022-01-18 Shanghai Zhaoxin Semiconductor Co., Ltd. Neural network unit that interrupts processing core upon condition
CN117130722A (zh) * 2023-08-04 2023-11-28 北京中电华大电子设计有限责任公司 WebAssembly指令集的优化方法及装置

Families Citing this family (82)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6986023B2 (en) * 2002-08-09 2006-01-10 Intel Corporation Conditional execution of coprocessor instruction based on main processor arithmetic flags
JP4288461B2 (ja) * 2002-12-17 2009-07-01 日本電気株式会社 対称型画像フィルタ処理装置、プログラム、及びその方法
US7467176B2 (en) * 2004-02-20 2008-12-16 Altera Corporation Saturation and rounding in multiply-accumulate blocks
US7987222B1 (en) * 2004-04-22 2011-07-26 Altera Corporation Method and apparatus for implementing a multiplier utilizing digital signal processor block memory extension
US20060155955A1 (en) * 2005-01-10 2006-07-13 Gschwind Michael K SIMD-RISC processor module
US8229991B2 (en) * 2005-05-05 2012-07-24 Mips Technologies, Inc. Processor core and multiplier that support a multiply and difference operation by inverting sign bits in booth recoding
US8234326B2 (en) * 2005-05-05 2012-07-31 Mips Technologies, Inc. Processor core and multiplier that support both vector and single value multiplication
US8620980B1 (en) 2005-09-27 2013-12-31 Altera Corporation Programmable device with specialized multiplier blocks
US7725516B2 (en) * 2005-10-05 2010-05-25 Qualcomm Incorporated Fast DCT algorithm for DSP with VLIW architecture
US8082287B2 (en) 2006-01-20 2011-12-20 Qualcomm Incorporated Pre-saturating fixed-point multiplier
US8954943B2 (en) * 2006-01-26 2015-02-10 International Business Machines Corporation Analyze and reduce number of data reordering operations in SIMD code
US8301681B1 (en) 2006-02-09 2012-10-30 Altera Corporation Specialized processing block for programmable logic device
US8266198B2 (en) 2006-02-09 2012-09-11 Altera Corporation Specialized processing block for programmable logic device
US8266199B2 (en) 2006-02-09 2012-09-11 Altera Corporation Specialized processing block for programmable logic device
US8041759B1 (en) 2006-02-09 2011-10-18 Altera Corporation Specialized processing block for programmable logic device
US7949701B2 (en) * 2006-08-02 2011-05-24 Qualcomm Incorporated Method and system to perform shifting and rounding operations within a microprocessor
US8386550B1 (en) 2006-09-20 2013-02-26 Altera Corporation Method for configuring a finite impulse response filter in a programmable logic device
US20080100628A1 (en) * 2006-10-31 2008-05-01 International Business Machines Corporation Single Precision Vector Permute Immediate with "Word" Vector Write Mask
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
US7930336B2 (en) 2006-12-05 2011-04-19 Altera Corporation Large multiplier for programmable logic device
US8386553B1 (en) 2006-12-05 2013-02-26 Altera Corporation Large multiplier for programmable logic device
US8650231B1 (en) 2007-01-22 2014-02-11 Altera Corporation Configuring floating point operations in a programmable device
US8645450B1 (en) 2007-03-02 2014-02-04 Altera Corporation Multiplier-accumulator circuitry and methods
US8819095B2 (en) * 2007-08-28 2014-08-26 Qualcomm Incorporated Fast computation of products by dyadic fractions with sign-symmetric rounding errors
KR101098758B1 (ko) * 2007-09-20 2011-12-26 서울대학교산학협력단 Fp-ra를 구성하는 pe 구조 및 그 fp-ra제어하는 fp-ra 제어 회로
US20090172348A1 (en) * 2007-12-26 2009-07-02 Robert Cavin Methods, apparatus, and instructions for processing vector data
US8667250B2 (en) * 2007-12-26 2014-03-04 Intel Corporation Methods, apparatus, and instructions for converting vector data
US8959137B1 (en) 2008-02-20 2015-02-17 Altera Corporation Implementing large multipliers in a programmable integrated circuit device
US8437433B2 (en) * 2008-03-28 2013-05-07 Qualcomm Incorporated Zeroing-out LLRs using demod-bitmap to improve performance of modem decoder
US8755515B1 (en) 2008-09-29 2014-06-17 Wai Wu Parallel signal processing system and method
US8307023B1 (en) 2008-10-10 2012-11-06 Altera Corporation DSP block for implementing large multiplier on a programmable integrated circuit device
US8645449B1 (en) 2009-03-03 2014-02-04 Altera Corporation Combined floating point adder and subtractor
US8468192B1 (en) 2009-03-03 2013-06-18 Altera Corporation Implementing multipliers in a programmable integrated circuit device
US8706790B1 (en) 2009-03-03 2014-04-22 Altera Corporation Implementing mixed-precision floating-point operations in a programmable integrated circuit device
US8386755B2 (en) * 2009-07-28 2013-02-26 Via Technologies, Inc. Non-atomic scheduling of micro-operations to perform round instruction
US8650236B1 (en) 2009-08-04 2014-02-11 Altera Corporation High-rate interpolation or decimation filter in integrated circuit device
US8396914B1 (en) 2009-09-11 2013-03-12 Altera Corporation Matrix decomposition in an integrated circuit device
US8412756B1 (en) 2009-09-11 2013-04-02 Altera Corporation Multi-operand floating point operations in a programmable integrated circuit device
WO2011053181A1 (en) * 2009-10-30 2011-05-05 Intel Corporation Graphics rendering using a hierarchical acceleration structure
US8539016B1 (en) 2010-02-09 2013-09-17 Altera Corporation QR decomposition in an integrated circuit device
US8601044B2 (en) 2010-03-02 2013-12-03 Altera Corporation Discrete Fourier Transform in an integrated circuit device
US8484265B1 (en) 2010-03-04 2013-07-09 Altera Corporation Angular range reduction in an integrated circuit device
US8510354B1 (en) 2010-03-12 2013-08-13 Altera Corporation Calculation of trigonometric functions in an integrated circuit device
US8539014B2 (en) 2010-03-25 2013-09-17 Altera Corporation Solving linear matrices in an integrated circuit device
US8589463B2 (en) 2010-06-25 2013-11-19 Altera Corporation Calculation of trigonometric functions in an integrated circuit device
US8862650B2 (en) 2010-06-25 2014-10-14 Altera Corporation Calculation of trigonometric functions in an integrated circuit device
US8577951B1 (en) 2010-08-19 2013-11-05 Altera Corporation Matrix operations in an integrated circuit device
US8645451B2 (en) 2011-03-10 2014-02-04 Altera Corporation Double-clocked specialized processing block in an integrated circuit device
JP5691752B2 (ja) * 2011-04-01 2015-04-01 セイコーエプソン株式会社 データの書き換え方法、データ書き換え装置及び書き換えプログラム
US9600278B1 (en) 2011-05-09 2017-03-21 Altera Corporation Programmable device using fixed and configurable logic to implement recursive trees
US8812576B1 (en) 2011-09-12 2014-08-19 Altera Corporation QR decomposition in an integrated circuit device
US9053045B1 (en) 2011-09-16 2015-06-09 Altera Corporation Computing floating-point polynomials in an integrated circuit device
US8949298B1 (en) 2011-09-16 2015-02-03 Altera Corporation Computing floating-point polynomials in an integrated circuit device
US8762443B1 (en) 2011-11-15 2014-06-24 Altera Corporation Matrix operations in an integrated circuit device
US20130159680A1 (en) * 2011-12-19 2013-06-20 Wei-Yu Chen Systems, methods, and computer program products for parallelizing large number arithmetic
CN104011648B (zh) * 2011-12-23 2018-09-11 英特尔公司 用于执行向量打包压缩和重复的系统、装置以及方法
US8543634B1 (en) 2012-03-30 2013-09-24 Altera Corporation Specialized processing block for programmable integrated circuit device
US9098332B1 (en) 2012-06-01 2015-08-04 Altera Corporation Specialized processing block with fixed- and floating-point structures
US8996600B1 (en) 2012-08-03 2015-03-31 Altera Corporation Specialized processing block for implementing floating-point multiplier with subnormal operation support
US9207909B1 (en) 2012-11-26 2015-12-08 Altera Corporation Polynomial calculations optimized for programmable integrated circuit device structures
US9189200B1 (en) 2013-03-14 2015-11-17 Altera Corporation Multiple-precision processing block in a programmable integrated circuit device
US9348795B1 (en) 2013-07-03 2016-05-24 Altera Corporation Programmable device using fixed and configurable logic to implement floating-point rounding
US9798519B2 (en) 2014-07-02 2017-10-24 Via Alliance Semiconductor Co., Ltd. Standard format intermediate result
US9910670B2 (en) 2014-07-09 2018-03-06 Intel Corporation Instruction set for eliminating misaligned memory accesses during processing of an array having misaligned data rows
US9684488B2 (en) 2015-03-26 2017-06-20 Altera Corporation Combined adder and pre-adder for high-radix multiplier circuit
US11061672B2 (en) 2015-10-02 2021-07-13 Via Alliance Semiconductor Co., Ltd. Chained split execution of fused compound arithmetic operations
US10489152B2 (en) 2016-01-28 2019-11-26 International Business Machines Corporation Stochastic rounding floating-point add instruction using entropy from a register
US10671347B2 (en) * 2016-01-28 2020-06-02 International Business Machines Corporation Stochastic rounding floating-point multiply instruction using entropy from a register
GB2548908B (en) * 2016-04-01 2019-01-30 Advanced Risc Mach Ltd Complex multiply instruction
US10127015B2 (en) 2016-09-30 2018-11-13 International Business Machines Corporation Decimal multiply and shift instruction
US10078512B2 (en) 2016-10-03 2018-09-18 Via Alliance Semiconductor Co., Ltd. Processing denormal numbers in FMA hardware
US10162633B2 (en) * 2017-04-24 2018-12-25 Arm Limited Shift instruction
US10942706B2 (en) 2017-05-05 2021-03-09 Intel Corporation Implementation of floating-point trigonometric functions in an integrated circuit device
US20200073635A1 (en) * 2017-06-29 2020-03-05 Intel Corporation Systems, apparatuses, and methods for vector-packed fractional multiplication of signed words with rounding, saturation, and high-result selection
US11347964B2 (en) * 2017-08-07 2022-05-31 Renesas Electronics Corporation Hardware circuit
US10719296B2 (en) * 2018-01-17 2020-07-21 Macronix International Co., Ltd. Sum-of-products accelerator array
US11048661B2 (en) * 2018-04-16 2021-06-29 Simple Machines Inc. Systems and methods for stream-dataflow acceleration wherein a delay is implemented so as to equalize arrival times of data packets at a destination functional unit
US10846056B2 (en) * 2018-08-20 2020-11-24 Arm Limited Configurable SIMD multiplication circuit
RU185346U1 (ru) * 2018-08-21 2018-11-30 Акционерное общество Научно-производственный центр "Электронные вычислительно-информационные системы" (АО НПЦ "ЭЛВИС") Векторный мультиформатный умножитель
RU2689819C1 (ru) * 2018-08-21 2019-05-29 Акционерное общество Научно-производственный центр "Электронные вычислительно-информационные системы" (АО НПЦ "ЭЛВИС") Векторный мультиформатный умножитель
US11789701B2 (en) 2020-08-05 2023-10-17 Arm Limited Controlling carry-save adders in multiplication

Family Cites Families (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US3910664A (en) * 1973-01-04 1975-10-07 Amp Inc Multi-contact electrical connector for a ceramic substrate or the like
US4841468A (en) * 1987-03-20 1989-06-20 Bipolar Integrated Technology, Inc. High-speed digital multiplier architecture
US4982352A (en) * 1988-06-17 1991-01-01 Bipolar Integrated Technology, Inc. Methods and apparatus for determining the absolute value of the difference between binary operands
WO1996017293A1 (en) 1994-12-01 1996-06-06 Intel Corporation A microprocessor having a multiply operation
GB2317465B (en) * 1996-09-23 2000-11-15 Advanced Risc Mach Ltd Data processing apparatus registers.
US6014684A (en) * 1997-03-24 2000-01-11 Intel Corporation Method and apparatus for performing N bit by 2*N-1 bit signed multiplication
EP0869432B1 (en) * 1997-04-01 2002-10-02 Matsushita Electric Industrial Co., Ltd. Multiplication method and multiplication circuit
US6839728B2 (en) * 1998-10-09 2005-01-04 Pts Corporation Efficient complex multiplication and fast fourier transform (FFT) implementation on the manarray architecture
US6457036B1 (en) * 1999-08-24 2002-09-24 Avaya Technology Corp. System for accurately performing an integer multiply-divide operation

Cited By (83)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104133748A (zh) * 2006-05-10 2014-11-05 高通股份有限公司 用以在微处理器内组合来自多个寄存器单元的对应半字单元的方法及系统
CN105022605B (zh) * 2006-09-20 2018-10-26 英特尔公司 用于执行点积运算的指令和逻辑
CN107741842B (zh) * 2006-09-20 2021-08-06 英特尔公司 用于执行点积运算的指令和逻辑
CN107741842A (zh) * 2006-09-20 2018-02-27 英特尔公司 用于执行点积运算的指令和逻辑
CN105022605A (zh) * 2006-09-20 2015-11-04 英特尔公司 用于执行点积运算的指令和逻辑
US9720692B2 (en) 2006-09-22 2017-08-01 Intel Corporation Instruction and logic for processing text strings
US9740490B2 (en) 2006-09-22 2017-08-22 Intel Corporation Instruction and logic for processing text strings
US10261795B2 (en) 2006-09-22 2019-04-16 Intel Corporation Instruction and logic for processing text strings
CN104657112A (zh) * 2006-09-22 2015-05-27 英特尔公司 用于处理文本串的指令和逻辑
CN102073478B (zh) * 2006-09-22 2014-09-10 英特尔公司 用于处理文本串的指令和逻辑
US9448802B2 (en) 2006-09-22 2016-09-20 Intel Corporation Instruction and logic for processing text strings
US10929131B2 (en) 2006-09-22 2021-02-23 Intel Corporation Instruction and logic for processing text strings
US9495160B2 (en) 2006-09-22 2016-11-15 Intel Corporation Instruction and logic for processing text strings
US9632784B2 (en) 2006-09-22 2017-04-25 Intel Corporation Instruction and logic for processing text strings
US9645821B2 (en) 2006-09-22 2017-05-09 Intel Corporation Instruction and logic for processing text strings
US11023236B2 (en) 2006-09-22 2021-06-01 Intel Corporation Instruction and logic for processing text strings
US11029955B2 (en) 2006-09-22 2021-06-08 Intel Corporation Instruction and logic for processing text strings
US9703564B2 (en) 2006-09-22 2017-07-11 Intel Corporation Instruction and logic for processing text strings
CN102073478A (zh) * 2006-09-22 2011-05-25 英特尔公司 用于处理文本串的指令和逻辑
US9740489B2 (en) 2006-09-22 2017-08-22 Intel Corporation Instruction and logic for processing text strings
CN104657112B (zh) * 2006-09-22 2017-12-01 英特尔公司 用于处理文本串的指令和相关联的处理器
US9772846B2 (en) 2006-09-22 2017-09-26 Intel Corporation Instruction and logic for processing text strings
US9772847B2 (en) 2006-09-22 2017-09-26 Intel Corporation Instruction and logic for processing text strings
US11537398B2 (en) 2006-09-22 2022-12-27 Intel Corporation Instruction and logic for processing text strings
US9804848B2 (en) 2006-09-22 2017-10-31 Intel Corporation Instruction and logic for processing text strings
CN101620589B (zh) * 2008-06-30 2013-06-19 英特尔公司 处理器中的有效并行浮点异常处理
CN102576302B (zh) * 2009-11-30 2014-10-29 拉科尔斯有限公司 微处理器及用于微处理器上增强精确度乘积和计算的方法
CN102576302A (zh) * 2009-11-30 2012-07-11 马丁·劳比赫 微处理器及用于微处理器上增强精确度乘积和计算的方法
CN104011657A (zh) * 2011-12-22 2014-08-27 英特尔公司 用于向量计算和累计的装置和方法
CN106843811A (zh) * 2011-12-22 2017-06-13 英特尔公司 用于将源操作数映射到不同范围的系统、装置和方法
CN104011657B (zh) * 2011-12-22 2016-10-12 英特尔公司 用于向量计算和累计的装置和方法
CN106775592A (zh) * 2011-12-23 2017-05-31 英特尔公司 使用三个标量项的超级乘加(超级madd)指令
CN106775592B (zh) * 2011-12-23 2019-03-12 英特尔公司 处理器、用于计算系统的方法、机器可读介质和计算机系统
CN104583980B (zh) * 2012-09-28 2018-05-29 英特尔公司 用于响应于单个指令来执行循环和异或的系统、装置和方法
CN108563465A (zh) * 2012-09-28 2018-09-21 英特尔公司 用于响应于单个指令来执行循环和异或的系统、装置和方法
CN104583980A (zh) * 2012-09-28 2015-04-29 英特尔公司 用于响应于单个指令来执行循环和异或的系统、装置和方法
CN109144569A (zh) * 2013-03-15 2019-01-04 英特尔公司 用于减少短整数乘法数量的系统、装置和方法
US10346350B2 (en) 2015-10-08 2019-07-09 Via Alliance Semiconductor Co., Ltd. Direct execution by an execution unit of a micro-operation loaded into an architectural register file by an architectural instruction of a processor
US11029949B2 (en) 2015-10-08 2021-06-08 Shanghai Zhaoxin Semiconductor Co., Ltd. Neural network unit
US10282348B2 (en) 2015-10-08 2019-05-07 Via Alliance Semiconductor Co., Ltd. Neural network unit with output buffer feedback and masking capability
TWI601062B (zh) * 2015-10-08 2017-10-01 上海兆芯集成電路有限公司 利用使用者指定二維定點算術運算之裝置
US10275393B2 (en) 2015-10-08 2019-04-30 Via Alliance Semiconductor Co., Ltd. Tri-configuration neural network unit
US10346351B2 (en) 2015-10-08 2019-07-09 Via Alliance Semiconductor Co., Ltd. Neural network unit with output buffer feedback and masking capability with processing unit groups that operate as recurrent neural network LSTM cells
US10353862B2 (en) 2015-10-08 2019-07-16 Via Alliance Semiconductor Co., Ltd. Neural network unit that performs stochastic rounding
US10353861B2 (en) 2015-10-08 2019-07-16 Via Alliance Semiconductor Co., Ltd. Mechanism for communication between architectural program running on processor and non-architectural program running on execution unit of the processor regarding shared resource
US10353860B2 (en) 2015-10-08 2019-07-16 Via Alliance Semiconductor Co., Ltd. Neural network unit with neural processing units dynamically configurable to process multiple data sizes
US10366050B2 (en) 2015-10-08 2019-07-30 Via Alliance Semiconductor Co., Ltd. Multi-operation neural network unit
US10380481B2 (en) 2015-10-08 2019-08-13 Via Alliance Semiconductor Co., Ltd. Neural network unit that performs concurrent LSTM cell calculations
US10380064B2 (en) 2015-10-08 2019-08-13 Via Alliance Semiconductor Co., Ltd. Neural network unit employing user-supplied reciprocal for normalizing an accumulated value
US10387366B2 (en) 2015-10-08 2019-08-20 Via Alliance Semiconductor Co., Ltd. Neural network unit with shared activation function units
US10409767B2 (en) 2015-10-08 2019-09-10 Via Alliance Semiconductors Co., Ltd. Neural network unit with neural memory and array of neural processing units and sequencer that collectively shift row of data received from neural memory
US11226840B2 (en) 2015-10-08 2022-01-18 Shanghai Zhaoxin Semiconductor Co., Ltd. Neural network unit that interrupts processing core upon condition
US11221872B2 (en) 2015-10-08 2022-01-11 Shanghai Zhaoxin Semiconductor Co., Ltd. Neural network unit that interrupts processing core upon condition
US11216720B2 (en) 2015-10-08 2022-01-04 Shanghai Zhaoxin Semiconductor Co., Ltd. Neural network unit that manages power consumption based on memory accesses per period
US10474627B2 (en) 2015-10-08 2019-11-12 Via Alliance Semiconductor Co., Ltd. Neural network unit with neural memory and array of neural processing units that collectively shift row of data received from neural memory
US10474628B2 (en) 2015-10-08 2019-11-12 Via Alliance Semiconductor Co., Ltd. Processor with variable rate execution unit
US10509765B2 (en) 2015-10-08 2019-12-17 Via Alliance Semiconductor Co., Ltd. Neural processing unit that selectively writes back to neural memory either activation function output or accumulator value
TWI626587B (zh) * 2015-10-08 2018-06-11 上海兆芯集成電路有限公司 選擇性將啓動函數輸出或累加器値寫回神經記憶體之神經處理單元
US10552370B2 (en) 2015-10-08 2020-02-04 Via Alliance Semiconductor Co., Ltd. Neural network unit with output buffer feedback for performing recurrent neural network computations
US10275394B2 (en) 2015-10-08 2019-04-30 Via Alliance Semiconductor Co., Ltd. Processor with architectural neural network execution unit
US10228911B2 (en) 2015-10-08 2019-03-12 Via Alliance Semiconductor Co., Ltd. Apparatus employing user-specified binary point fixed point arithmetic
US10585848B2 (en) 2015-10-08 2020-03-10 Via Alliance Semiconductor Co., Ltd. Processor with hybrid coprocessor/execution unit neural network unit
US10776690B2 (en) 2015-10-08 2020-09-15 Via Alliance Semiconductor Co., Ltd. Neural network unit with plurality of selectable output functions
US10725934B2 (en) 2015-10-08 2020-07-28 Shanghai Zhaoxin Semiconductor Co., Ltd. Processor with selective data storage (of accelerator) operable as either victim cache data storage or accelerator memory and having victim cache tags in lower level cache wherein evicted cache line is stored in said data storage when said data storage is in a first mode and said cache line is stored in system memory rather then said data store when said data storage is in a second mode
US10671564B2 (en) 2015-10-08 2020-06-02 Via Alliance Semiconductor Co., Ltd. Neural network unit that performs convolutions using collective shift register among array of neural processing units
CN108139907A (zh) * 2015-10-14 2018-06-08 Arm有限公司 向量数据传送指令
CN109791478A (zh) * 2016-09-30 2019-05-21 国际商业机器公司 十进制移位和除法指令
CN109791478B (zh) * 2016-09-30 2023-05-26 国际商业机器公司 十进制移位和除法指令
US10423876B2 (en) 2016-12-01 2019-09-24 Via Alliance Semiconductor Co., Ltd. Processor with memory array operable as either victim cache or neural network unit memory
US10438115B2 (en) 2016-12-01 2019-10-08 Via Alliance Semiconductor Co., Ltd. Neural network unit with memory layout to perform efficient 3-dimensional convolutions
US10430706B2 (en) 2016-12-01 2019-10-01 Via Alliance Semiconductor Co., Ltd. Processor with memory array operable as either last level cache slice or neural network unit memory
US10664751B2 (en) 2016-12-01 2020-05-26 Via Alliance Semiconductor Co., Ltd. Processor with memory array operable as either cache memory or neural network unit memory
US10515302B2 (en) 2016-12-08 2019-12-24 Via Alliance Semiconductor Co., Ltd. Neural network unit with mixed data and weight size computation capability
US10140574B2 (en) 2016-12-31 2018-11-27 Via Alliance Semiconductor Co., Ltd Neural network unit with segmentable array width rotator and re-shapeable weight memory to match segment width to provide common weights to multiple rotator segments
US10586148B2 (en) 2016-12-31 2020-03-10 Via Alliance Semiconductor Co., Ltd. Neural network unit with re-shapeable memory
US10565492B2 (en) 2016-12-31 2020-02-18 Via Alliance Semiconductor Co., Ltd. Neural network unit with segmentable array width rotator
US10565494B2 (en) 2016-12-31 2020-02-18 Via Alliance Semiconductor Co., Ltd. Neural network unit with segmentable array width rotator
CN111213125A (zh) * 2017-09-08 2020-05-29 甲骨文国际公司 使用simd指令进行高效的直接卷积
US11803377B2 (en) 2017-09-08 2023-10-31 Oracle International Corporation Efficient direct convolution using SIMD instructions
CN111213125B (zh) * 2017-09-08 2023-11-07 甲骨文国际公司 使用simd指令进行高效的直接卷积
CN111596888A (zh) * 2020-03-02 2020-08-28 成都优博创通信技术股份有限公司 一种在低位宽mcu上实现32位无符号数整型乘法运算的方法
CN117130722A (zh) * 2023-08-04 2023-11-28 北京中电华大电子设计有限责任公司 WebAssembly指令集的优化方法及装置
CN117130722B (zh) * 2023-08-04 2024-06-11 北京中电华大电子设计有限责任公司 WebAssembly指令集的优化方法及装置

Also Published As

Publication number Publication date
KR100597930B1 (ko) 2006-07-13
RU2263947C2 (ru) 2005-11-10
JP4480997B2 (ja) 2010-06-16
KR20050005730A (ko) 2005-01-14
CN100541422C (zh) 2009-09-16
NL1025106C2 (nl) 2007-10-19
US20040267857A1 (en) 2004-12-30
TWI245219B (en) 2005-12-11
RU2003137661A (ru) 2005-06-10
TW200500940A (en) 2005-01-01
US7689641B2 (en) 2010-03-30
JP2005025718A (ja) 2005-01-27
NL1025106A1 (nl) 2005-01-03

Similar Documents

Publication Publication Date Title
CN1577257A (zh) 具有取整和移位的单指令多数据整数高位乘法
US10474466B2 (en) SIMD sign operation
CN101620525B (zh) 混洗数据的方法和装置
US20170364476A1 (en) Instruction and logic for performing a dot-product operation
CN102073478B (zh) 用于处理文本串的指令和逻辑
CN104115115B (zh) 用于多精度算术的simd整数乘法累加指令
US9032003B2 (en) Method, apparatus and instructions for parallel data conversions
RU2275677C2 (ru) Способ, устройство и команда для выполнения знаковой операции умножения
TWI512517B (zh) 用以提供族群計數功能予基因定序及排比之方法、設備、指令以及邏輯組件
CN102103487A (zh) 用于在单个指令中执行移位和异或运算的方法和装置
CN1492314A (zh) 可以对复合操作数进行压缩操作的微处理器
CN1820246A (zh) 执行饱和或不执行饱和地累加多操作数的处理器还原单元
CN104321741A (zh) 双舍入组合浮点乘法和加法
CN104115113A (zh) 用于循环剩余掩码指令的系统、装置和方法
CN105612509A (zh) 用于提供向量子字节解压缩功能性的方法、设备、指令和逻辑
CN106575217A (zh) 位置乱处理器、方法、系统和指令
CN104025033A (zh) 利用控制操纵的simd可变移位和循环
CN104011658A (zh) 用于提供向量线性内插功能的指令和逻辑

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
CF01 Termination of patent right due to non-payment of annual fee
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20090916