CN1595390A - 执行部分宽度压缩数据指令 - Google Patents
执行部分宽度压缩数据指令 Download PDFInfo
- Publication number
- CN1595390A CN1595390A CNA2004100835854A CN200410083585A CN1595390A CN 1595390 A CN1595390 A CN 1595390A CN A2004100835854 A CNA2004100835854 A CN A2004100835854A CN 200410083585 A CN200410083585 A CN 200410083585A CN 1595390 A CN1595390 A CN 1595390A
- Authority
- CN
- China
- Prior art keywords
- data
- packed data
- instruction
- result
- operand
- 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
- 238000000034 method Methods 0.000 claims abstract description 37
- 230000006835 compression Effects 0.000 claims description 23
- 238000007906 compression Methods 0.000 claims description 23
- 230000008569 process Effects 0.000 claims description 13
- 238000010586 diagram Methods 0.000 description 12
- 238000005516 engineering process Methods 0.000 description 11
- 238000012545 processing Methods 0.000 description 11
- 238000007667 floating Methods 0.000 description 9
- 230000006870 function Effects 0.000 description 8
- 230000007246 mechanism Effects 0.000 description 8
- 230000005540 biological transmission Effects 0.000 description 6
- 230000014509 gene expression Effects 0.000 description 6
- 230000008901 benefit Effects 0.000 description 5
- 230000008030 elimination Effects 0.000 description 4
- 238000003379 elimination reaction Methods 0.000 description 4
- 230000002349 favourable effect Effects 0.000 description 4
- 230000008878 coupling Effects 0.000 description 3
- 238000010168 coupling process Methods 0.000 description 3
- 238000005859 coupling reaction Methods 0.000 description 3
- 230000006872 improvement Effects 0.000 description 3
- 241001269238 Data Species 0.000 description 2
- 239000000654 additive Substances 0.000 description 2
- 230000000996 additive effect Effects 0.000 description 2
- 230000015572 biosynthetic process Effects 0.000 description 2
- 230000008859 change Effects 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000002159 abnormal effect Effects 0.000 description 1
- 230000005856 abnormality Effects 0.000 description 1
- 230000001133 acceleration Effects 0.000 description 1
- 238000006243 chemical reaction Methods 0.000 description 1
- 238000012937 correction Methods 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 230000006837 decompression Effects 0.000 description 1
- 230000003111 delayed effect Effects 0.000 description 1
- 238000001514 detection method Methods 0.000 description 1
- 201000006549 dyspepsia Diseases 0.000 description 1
- 238000000802 evaporation-induced self-assembly Methods 0.000 description 1
- 230000008676 import Effects 0.000 description 1
- 238000012423 maintenance Methods 0.000 description 1
- 238000005457 optimization Methods 0.000 description 1
- 230000000644 propagated effect Effects 0.000 description 1
- 230000004044 response Effects 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 230000007704 transition Effects 0.000 description 1
- 238000013519 translation Methods 0.000 description 1
- 230000000007 visual effect Effects 0.000 description 1
Images
Classifications
-
- 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/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3867—Concurrent instruction execution, e.g. pipeline or look ahead using instruction pipelines
- G06F9/3875—Pipelining a single stage, e.g. superpipelining
-
- 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
- G06F9/30014—Arithmetic instructions with variable precision
-
- 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/30036—Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
-
- 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/30036—Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
- G06F9/30038—Instructions to perform operations on packed data, e.g. vector, tile or matrix operations using a mask
-
- 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/30098—Register arrangements
- G06F9/30105—Register structure
- G06F9/30112—Register structure comprising data of variable length
-
- 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/30098—Register arrangements
- G06F9/3012—Organisation of register space, e.g. banked or distributed register file
- G06F9/3013—Organisation of register space, e.g. banked or distributed register file according to data content, e.g. floating-point registers, address registers
-
- 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/30098—Register arrangements
- G06F9/3012—Organisation of register space, e.g. banked or distributed register file
- G06F9/30134—Register stacks; shift registers
-
- 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/30145—Instruction analysis, e.g. decoding, instruction word fields
-
- 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/30145—Instruction analysis, e.g. decoding, instruction word fields
- G06F9/3016—Decoding the operand specifier, e.g. specifier format
- G06F9/30167—Decoding the operand specifier, e.g. specifier format of immediate specifier, e.g. constants
-
- 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/3017—Runtime instruction translation, e.g. macros
-
- 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/30181—Instruction operation extension or modification
-
- 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/30181—Instruction operation extension or modification
- G06F9/30196—Instruction operation extension or modification using decoder, e.g. decoder per instruction set, adaptable or programmable decoders
-
- 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/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
- G06F9/3838—Dependency mechanisms, e.g. register scoreboarding
- G06F9/384—Register renaming
-
- 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/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3885—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Mathematical Physics (AREA)
- Computational Mathematics (AREA)
- Mathematical Analysis (AREA)
- Mathematical Optimization (AREA)
- Pure & Applied Mathematics (AREA)
- Advance Control (AREA)
- Executing Machine-Instructions (AREA)
Abstract
提供用于执行压缩数据指令的方法与设备。根据本发明的一个方面,处理器或其他设备可以包括划分逻辑。划分逻辑可以包括逻辑来接收利用部分宽度压缩数据指令指定的第一压缩数据操作数的全宽度并将其划分为第一部分和第二部分。划分逻辑也可以包括逻辑来接收利用部分宽度压缩数据指令指定的第二压缩数据操作数的全宽度并将其划分为第三部分和第四部分。该设备也可以包括与划分逻辑相耦合的延迟元件,以接收和延迟第一部分和第三部分。该设备可以进一步包括与划分逻辑和延迟元件相耦合的执行单元。执行单元可以提供利用部分宽度压缩数据指令指定的压缩数据结果给利用部分宽度压缩数据指令指定的目的地。压缩数据结果可以包括只对第一和第二压缩数据操作数的数据元素的子集执行的操作的一个或多个结果。
Description
技术领域
本发明一般涉及计算机系统领域。更具体地,本发明涉及用于由利用诸如SIMD技术的处理器高效地执行诸如标量压缩数据指令等的部分宽度压缩数据指令的方法与设备。
背景技术
诸如2D/3D图形、图像处理、视频压缩/解压缩、话音识别算法与音频处理等多媒体应用通常要求在大量数据项上执行相同的操作(称作“数据并行性”)。每种多媒体应用通常实现需要若干诸如加(ADD)或乘(MULTIPLY)(以后称为MUL)等浮点或整数运算的一种或多种算法。通过提供其执行导致处理器并行地在多个数据项上执行相同运算的宏指令,诸如Pentium处理器体系结构与MMxTM指令集等采用的单指令多数据(SIMD)技术已使多媒体应用性能有了明显的改进(Pentium及MMxTM为Santa Clara,CA的Intel公司的注册商标或商标)。
SIMD技术特别适用于提供压缩数据格式的系统。压缩数据格式便是将寄存器中的位逻辑上分成若干固定大小的数据元素的一种数据格式,其中各元素表示独立的值。例如,64位寄存器可分解成四个16位元素,每个表示独立的16位值。然后,压缩数据指令便可并行地分开处理这些压缩数据类型中的每个元素。
参见图1,其中示出了示例性压缩数据指令。在这一示例中,压缩加法指令(如SIMD ADD)将第一压缩数据运算数X与第二压缩数据运算数Y的对应数据元素相加生成压缩数据结果Z,即X0+Y0=Z0,X1+Y1=Z1,X2+Y2=Z2及X3+Y3=Z3。将许多数据元素压缩到一个寄存器或存储器单元中并采用并行硬件执行使SIMD体系结构一次能执行多个操作,而得到明显的性能改进。例如,在这一示例中,在以前获得单一结果所需的时间中可获得四个独立的结果。
虽然利用SIMD体系结构实现的优点是显而易见的,仍存在着希望只对于压缩数据元素的子集返回单个结果的情况。
发明内容
描述了用于执行部分宽度压缩数据指令的方法与设备。按照本发明的一个方面,处理器包括多个寄存器、耦合到这多个寄存器上的寄存器重新命名单元、耦合到寄存器重新命名单元上的解码器及耦合到该解码器上的部分宽度执行单元。该寄存器重新命名单元提供了体系结构寄存器堆(register file)来存储各包含多个数据元素的压缩数据操作数。将解码器配置成解码其每个指定体系结构寄存器堆中的一个或多个寄存器的第一与第二指令集。第一指令集中的各指令指定要在存储在一个或多个指定的寄存器中的所有数据元素上执行的操作。反之,第二指令集中的各指令指定只在存储在一个或多个指定的寄存器中的数据元素子集上执行的操作。将部分宽度执行单元配置成执行由第一或第二指令集之一指定的操作。
根据本发明的一个实施例,为了执行第二指令集中的指令,处理器或其他设备可以包括划分逻辑。划分逻辑可以包括逻辑来接收利用部分宽度压缩数据指令指定的第一压缩数据操作数的全宽度并将其划分为第一部分和第二部分。划分逻辑也可以包括逻辑来接收利用部分宽度压缩数据指令指定的第二压缩数据操作数的全宽度并将其划分为第三部分和第四部分。该设备也可以包括与划分逻辑相耦合的延迟元件,以接收和延迟第一部分和第三部分。该设备可以进一步包括与划分逻辑和延迟元件相耦合的执行单元。执行单元可以提供利用部分宽度压缩数据指令指定的压缩数据结果给利用部分宽度压缩数据指令指定的目的地。压缩数据结果可以包括只对第一和第二压缩数据操作数的数据元素的子集执行的操作的一个或多个结果。
根据本发明的一个实施例,一种方法可以包括接收指定第一压缩数据操作数和第二压缩数据操作数在存储器中的位置的指令。可以从存储器中存取第一压缩数据操作数和第二压缩数据操作数的全宽度。随后,可以将第一压缩数据操作数划分为第一部分和第二部分,并且可以将第二压缩数据操作数划分为第三部分和第四部分。通过对第一和第三部分执行利用该指令指定的操作,可以确定第一部分结果。通过处理第二和第四部分,可以确定第二部分结果。在一个方面中,确定第二部分结果可以包括将至少一个数据元素设置为预定值。可以使用相同的硬件来确定第一和第二部分结果。
从附图及详细描述中,本发明的其它特征与优点将是显而易见的。
附图说明
本发明是参照附图中的图以示例方式而非限制性方式描述的,附图中相同的标号指示相同的元素,在附图中:
图1示出将来自第一压缩数据操作数与第二压缩数据操作数的对应数据元素一起相加的压缩加法(ADD)指令。
图2A为展示按照本发明的一个实施例的示例性计算机系统的简化方框图。
图2B为展示按照本发明的一个实施例的示例性逻辑寄存器组的简化方框图。
图2C为展示按照本发明的另一实施例的示例性逻辑寄存器组的简化方框图。
图3为展示按照本发明的一个实施例的指令执行的流程图。
图4概念性地展示执行按照本发明的各种实施例的部分宽度压缩数据指令的结果。
图5A概念性地展示用于执行按照本发明的一个实施例的全宽度压缩数据指令及部分宽度压缩数据指令的电路。
图5B概念性地展示用于执行按照本发明的另一实施例的全宽度压缩数据与部分宽度压缩数据指令的电路。
图5C概念性地展示用于执行按照本发明的又一实施例的全宽度压缩数据及部分宽度压缩数据指令的电路。
图6展示按照SIMD的示例性处理器实现的能分别作为四个独立的加法(ADD)执行单元与四个独立的乘法(MUL)执行单元操作的ADD执行单元与MUL执行单元。
图7A-7B概念性地展示分别以“交错”方式执行的全宽度压缩数据操作与部分宽度压缩数据操作。
图8A概念性地展示在操作数的一半宽度上执行操作的同时一次从逻辑寄存器中存取全宽度操作数的处理器内的电路。
图8B为进一步展示图8A的电路的定时图。
图9概念性地展示通过将宏指令转换成各处理操作数的一部分全宽度的多条宏指令以“交错”方式在操作数上执行操作的无次序的流水线(pipeline)的一个实施例。
图10为进一步展示图9中描述的实施例的定时图。
图11为展示可采用来完成按照本发明的一个实施例的解码处理的解码逻辑的方框图。
具体实施方式
本文描述了用于执行部分宽度压缩数据指令的方法与设备。这里名词“全宽度压缩数据指令”意在指称在一个或多个压缩数据操作数的所有数据元素上操作的压缩数据指令(如SIMD指令)。反之,名词“部分宽度压缩数据指令”意在广泛地指称被设计成只在一个或多个压缩数据操作数的数据元素的子集上运算并返回压缩数据结果(到诸如压缩数据寄存器堆)的压缩数据指令。例如,标量SIMD指令可能只需要压缩数据操作数的最低有效对之间的操作结果。在这一示例中,压缩数据结果的其余数据元素是忽略不计的,因为它们对标量SIMD指令无意义(例如,其余数据元素是不关心的)。按照本发明的各种实施例,可以以这样的方式来配置执行单元,以便高效地容纳全宽度压缩数据指令(如SIMD指令)及部分宽度压缩数据指令集(如标量SIMD指令)两者。
在下面的详细描述中,为了说明的目的,提出了许多特定细节以便提供对本发明的彻底理解。然而,对于本技术中的普通技术人员很明显,不一定用这些特定细节来实践本发明。在其它实例中,并未示出或以方框图形式示出众所周知的器件、结构、接口及进程。
部分宽度压缩数据指令的合理性
考虑到已为在单精度浮点数据、双精度浮点数据及整数数据上采用标量运算的标量体系结构(如单指令单数据(SISD)体系结构)编写的软件的数量,希望向开发人员提供将他们的软件移植到诸如SIMD体系结构等支持压缩数据指令的体系结构上的选择,而没有必要改写他们的软件与/或学习新的指令。通过提供部分宽度压缩数据指令,简单的翻译便能将老的标量代码变换成标量压缩数据代码。例如,对于编译程序非常容易从标量代码生成标量SIMD指令。然后,随着开发人员理解能用SIMD指令优化的他们的软件部分,他们便可逐渐地利用压缩数据指令。当然采用SIMD技术的计算机系统可能也通过同样支持SISD指令来保持向后兼容。然而,许多最近的体系结构改进及这里讨论的其它因素有利于开发人员过渡到并利用SIMD技术,即使首先只采用标量SIMD指令也如此。
提供部分宽度压缩数据指令的另一合理性在于可通过只在全宽度运算数的子集上操作可达到的许多好处,其中包含降低功耗、提高速率、简洁的异常模型及提高的存储量。如下所示,根据用部分宽度压缩数据指令提供的指示,通过有选择地关闭对执行当前操作不必要的那些硬件单元可达到功率节省。
另一种不希望强制压缩数据指令返回各对数据元素的单个结果的情况包含在提供部分宽度硬件的环境中的算术运算。由于成本与/或印模(die)限制,通常不提供对诸如除法等某些算术运算的全面支持。从其性质上,即使在实现全宽度硬件(如执行单元与数据元素之间的一一对应)时,除法运算也非常长。因此,在提供部分宽度硬件的同时只支持全宽度压缩数据运算的环境中,等待时间变得甚至更长。如下面进一步所示,诸如部分宽度压缩数据除法运算等部分宽度压缩数据运算可有选择地允许其运算数的某些部分绕过除法硬件。以这一方法,只在压缩数据运算数中的数据元素的子集上运算并不招致性能恶化。
此外,与外来数据元素一起产生的异常可能导致对开发人员的混淆与/或SISD与SIMD机器之间的不兼容性。因此,只为指令意欲在其上面操作的那些数据元素报告异常是有利的。部分宽度压缩数据指令支持通过将异常条件的触发限制到结合正在对其操作的数据元素引起的那些异常条件或有可能引起混淆或SISD与SIMD机器之间不兼容的外来数据元素所产生的异常条件来允许实现可预测异常模型。
最后,在作为执行部分宽度压缩数据操作的结果而不破坏目的地压缩数据操作数部分的实施例中,部分宽度压缩数据指令有效地提供用于存储数据的附加寄存器空间。例如,如果正在压缩数据操作数的低位部分上操作,可将数据存储在高位部分中,反之亦然。
示例性计算机系统
图2A为按照本发明的一个实施例的示例性计算机系统的简化方框图。在所描绘的实施例中,计算机系统200包含处理器205、存储设备210及总线215。处理器205用总线215耦合在存储设备上。此外,诸如键盘220及显示器225等若干用户输入/输出设备也耦合在总线215上。还可通过总线215将计算机系统200耦合在网络230上。处理器205表示诸如CISC、RISC、VLIW或混合体系结构等任何类型体系结构的中央处理单元。此外,处理器205可实现在一片或多片芯片上。存储设备210表示一个或多个用于存储数据的机构。例如,存储设备210可包含只读存储器(ROM)、随机存取存储器(RAM)、磁盘存储媒体、光学存储媒体、快速存储设备与/或其它机器可读的媒体。总线215表示一条或多条总线(如AGP、PCI、ISA、X-Bus、EISA、VESA等)及桥接器(也称作总线控制器)。虽然这一实施例是相对于单处理器计算机系统描述的,应理解本发明也可在多处理器计算机系统中实现。此外虽然本实施例是相对于32位与64位计算机系统描述的,本发明不限于这些计算机系统。
图2A附加示出处理器205包含指令集单元260。当然,处理器205包含其它电路;然而,这种其它电路对理解本发明不是必要的。在任何情况中,指令集单元260包含硬件与/或固件来解码与执行一或多个指令集。在所描绘的实施例中,指令集单元260包含解码/执行单元275。解码单元将处理器205接收的指令解码成一或多条微指令。执行单元响应从解码单元接收的微指令执行适当的操作。解码单元可采用若干不同机构实现(如查找表、硬件实现、PLA等)。
在本例中,解码/执行单元275示出为包含既拥有全宽度压缩数据指令又拥有部分宽度压缩数据指令的指令集280。这些压缩数据指令在执行时可导致处理器205去执行全/部分宽度压缩浮点运算与/或全/部分宽度压缩整数运算。除了压缩数据指令,指令集280可包含在现有微处理器中找得到的其它指令。作为示例,在一个实施例中处理器205支持与Intel 32位体系结构(IA-32)与/或Intel 64位体系结构(IA-64)兼容的指令集。
指令集单元260中还包含存储器单元285。存储器单元285可包含处理器205用来存储包含浮点数据及压缩浮点数据的信息的一或多组体系结构寄存器(也称作逻辑寄存器)。此外,可包含其它逻辑寄存器用于存储整数数据、压缩整数数据、及诸如栈顶指示之类各种控制数据。这里使用了名词体系结构寄存器与逻辑寄存器来指称指令指定包含单个操作数的存储区的方式的概念。从而,逻辑寄存器可用任何数目的公知技术在硬件中实现,包含专用的物理寄存器、利用寄存器重新命名机制(下面更详细地描述)的一或多个动态分配的物理寄存器等。在任何情况中,逻辑寄存器代表可用压缩数据指令寻址的最小存储单元。
在所描绘的实施例中,已在存储设备210中存储了操作系统235及压缩数据例程240供计算机系统200执行。压缩数据例程240为可包含诸如标量SIMD指令或SIMD指令等一或多条压缩数据指令的指令序列,如下面进一步讨论的,存在着包含速度、功耗及异常处理在内的这样的情况,希望只在压缩数据操作数或一对压缩数据操作数中的数据元素的子集上执行操作(或返回单个的结果),因此,处理器205能区分全宽度压缩数据指令与部分宽度压缩数据指令并相应地执行它们是有利的。
图2B为展示按照本发明的一个实施例的示范性逻辑寄存器组的简化方框图。在这一示例中,存储器单元285包含多个标量浮点寄存器291(标量寄存器堆)及多个压缩浮点寄存器292(压缩数据寄存器堆)。在执行浮点指令时可将标量浮点寄存器291(如寄存器R0-R7)实现为栈访问的寄存器堆以便与为Intel体系结构编写的现有软件兼容。然而,在替代实施例中,可将寄存器291作为平面寄存器堆对待。在所描绘的实施例中,将各压缩浮点寄存器(XMM0-XMM7)实现为单一128位逻辑寄存器。然而,应理解可采用更宽或更窄的寄存器来符合使用更多或更少数据元素或更大或更小数据元素的实现。此外,可提供更多或更少的压缩浮点寄存器282。类似于标量浮点寄存器291,在执行压缩浮点指令时可将压缩浮点寄存器292实现为栈访问的寄存器堆或平面寄存器堆。
图2C为展示按照本发明的另一实施例的示范性逻辑寄存器组的简化方框图。在这一示例中,存储器单元285再一次包含多个标量浮点寄存器291(标量寄存器堆)及多个压缩浮点寄存器292(压缩数据寄存器堆)。然而,在所描绘的实施例中,将各压缩浮点寄存器(如XMM0-XMM7)实现为高位293与低位寄存器294的对应的对。如下面进一步讨论的,为了指令解码的目的的而将压缩浮点寄存器292的逻辑寄存器地址空间组织成使高位与低位寄存器对用单一的位区别是有利的。例如,XMM0-XMM7的高位与低位部分可用MSR来区分。最好,各压缩浮点寄存器291宽到足以容纳四个32位单精度浮点数据元素。然而,如上所述,可采用更宽或更窄的寄存器来符合使用更多或更少数据元素或更大或更小数据元素的实现。此外,虽然本例中的逻辑压缩浮点寄存器292各包括对应的64位寄存器对,在替代实施例中各压缩浮点寄存器可包括任何数目的寄存器。
指令执行概述
已描述了可在其中实现本发明的一个实施例的示范性计算机系统,下面描述指令执行。
图3为展示按照本发明的一个实施例的指令执行的流程图。在步骤310,处理器205接收指令。在步骤320,根据指令的类型,部分宽度压缩数据指令(如标量SIMD指令)或全宽度压缩数据指令(如SIMD指令),处理以步骤330或340继续。通常在解码单元中指令的类型是根据包含在指令内的信息确定的。例如,信息可包含在附着在操作码上的前缀或后缀中,或通过立即值提供指示对应的操作要在压缩数据操作数的所有数据元素还是其子集上执行。以这一方式,相同的操作码既可用于全宽度压缩数据操作也可用于部分宽度压缩数据操作。作为代替,一组操作码可用于部分宽度压缩数据操作而不同的操作码组可用于全宽度压缩数据操作。
在任何情况中,如果指令为传统的全宽度压缩数据指令,则在步骤330通过在操作数中的各数据元素上执行指令规定的操作来确定压缩数据结果。然而,如果指令为部分宽度压缩数据指令,则在步骤340通过在数据元素的子集上执行指令规定的操作来确定结果的第一部分,而其余结果则设定为一个或多个预定的值。在一个实施例中,预定的值便是操作数之一中对应数据元素的值。这便是,可将数据元素从操作数之一的数据元素“传递通过”到压缩数据结果中的对应数据元素。在另一实施例中,全部清除(清零)结果的其余部分中的数据元素。下面描述用于执行将数据元素从操作数之一传递通过到结果的示范性逻辑及用于清除结果中的数据元素的示范性逻辑。
图4概念性地展示执行按照本发明的各种实施例的部分宽度压缩数据指令的结果。在这一示例中,操作是由执行单元440在两个逻辑源寄存器410与420的数据元素上执行的。执行单元440包含用于执行指令规定的操作的电路与逻辑。此外,执行单元440可包含允许执行单元440在部分宽度压缩数据模式或全宽度压缩数据模式中操作的选择电路。例如,执行单元440可包含传递通过电路将数据元素从逻辑源寄存器410、420之一传递到逻辑目的地寄存器430,或清除电路来清除逻辑目的地寄存器430的一或多个数据元素,等。也可采用各种其它技术来影响操作结果,包括将对操作的输入之一强制成预定的值,诸如导致操作执行其恒等函数的值或可传递通过算术运算而不发出异常信号的值(如静止的非数字(quiet nat-a-number)(QNaN))。
在所示的示例中,只将第一对数据元素(X0与Y0)上的操作结果(Z0)存储在逻辑目的地寄存器430中。假定执行单元440包含传递通过逻辑,便将逻辑目的地寄存器430的其余数据元素设置成来自逻辑源寄存器410的对应数据元素的值(即X3、X2与X1)。虽然将逻辑目的地寄存器430示出为独立的逻辑寄存器,指出它可以同时用作逻辑源寄存器410、420之一是重要的。因此,在这一上下文中应理解将逻辑目的地寄存器430的数据元素设置成来自逻辑源寄存器410、420之一的值可包含什么也不做。例如,在逻辑源寄存器410既是逻辑源又是目的地寄存器的情况中,各种实施例可利用这一点并简单地不触动要传递通过的一或多个数据元素。
作为替代,执行单元440可包含清除逻辑。从而,不是将值从逻辑源寄存器之一传递通过到逻辑目的地寄存器430,而是将结果中不必要的数据元素清除。在本例中再一次只将第一对数据元素(X0与Y0)上的操作结果(Z0)存储在逻辑目的地寄存器430中。“清除”(如设置成零或该问题的任何其它预定值)逻辑目的地寄存器430的其余数据元素。
全宽度硬件
图5A-5C分别概念性地展示既可执行全宽度压缩数据又可执行部分宽度压缩数据指令的执行单元540、560及580。包含在图5A与5C的执行单元中的选择逻辑表示示范性传递通过逻辑,而图5B的选择逻辑代表可采用的清除逻辑。在所描绘的实施例中,执行单元540、560与580各包含适当的逻辑、电路与/或固件用于在操作数(X与Y)的全宽度上并发执行操作570、571与572。
现在参见图5A,执行单元540包含选择逻辑(如多路复用器(MUX)555-557)用于在操作570产生的值与来自操作数之一的对应数据元素的值之间进行选择。可用诸如指示当前执行的操作是全宽度压缩数据操作还是部分宽度压缩数据操作的信号来控制MUX555-557。在替代实施例中,通过包含数据元素0的附加MUX与/或独立地控制各MUX可以达到附加的灵活性。提供MUX控制的各种装置都是可能的。按照一个实施例,这种控制可从指令本身始发或导出,或可通过立即值提供。例如,与指令关联的4位立即值可用来使MUX555-557直接受软件控制。可指导对应于立即值中的1的MUX去选择操作的结果,而可导致对应于0的MUX去选择传递通过数据。当然,通过采用更多或更少位来表示立即值可以在各种实现中达到更多或更少的分辨率。
现在参见图5B,执行单元540包含选择逻辑(如MUX565-567)用于在操作571产生的值与预定的值(如零)之间进行选择。如上所述MUX565-567可在公共控制下或独立地受控制。
图5C的传递通过逻辑(如MUX 575-576)在操作数之一的数据元素与恒等函数值590之间进行选择。通常将恒等函数值590选择为使得在恒等函数值590与数据元素之间执行运算572的结果为数据元素的值。例如,如果运算572为乘法运算,则恒等函数值590为1。类似地,如果运算572为加法运算,恒等函数值590为0。以这一方式,可通过令对应的MUX575-577输出恒等函数值590将数据元素的值有选择地传递通过到逻辑目的地寄存器430。
在上述实施例中,电路是硬布线成使得部分宽度操作是在最低位数据元素部分上执行的。可以理解,操作可在与所示出的不同的数据元素部分上执行。同时,如上所述,通过将所有的操作耦合到MUX之类而不只是图5A-5C中所描绘的操作的子集,可使要在其上操作的数据元素成为软件可配置的。此外,虽然将传递通过与清除逻辑描述为用于对待对应于要忽略的操作的得出的数据元素的两种选择,替代实施例可采用其它技术。例如,可以输入QNaN作为对要忽略其结果的操作的操作数之一。以这一方式,与1985年3月21日公布的IEEE 754标准,IEEE std.754-1985一致的算术运算将传播NaN通过到结果而不触发算术异常。
虽然由于操作数的全宽度能并行处理而在上述实施例中达不到明显的加速,应理解通过关闭要忽略其结果的那些操作便能降低功耗。从而,可达到明显的功率节省。此外,采用QNaN与/或恒等函数值,可通过防止由不是部分宽度压缩数据操作的一部分的数据元素触发异常而维持可预测的异常模型。因此,所报告的异常局限于与部分宽度压缩数据操作意欲在其上操作的数据元素相关产生的那些。
图6展示可用来执行全宽度压缩数据指令的算术逻辑单元(ALU)的当前处理器实现。图6的ALU包含在操作数的全宽度(即所有数据元素)上执行操作所必需的电路。图6还示出该ALU包含两个不同类型的执行单元,分别用于执行不同类型的运算(如某些ALU使用独立的单元来执行加法与乘法运算)。加法执行单元与乘法执行单元分别能作为四个独立的加法执行单元及四个独立的乘法执行单元操作。作为替代,ALU可包含一或多个乘累加(MAC)单元,各能执行多于单一类型的运算。虽然以下示例假定采用加法与乘法执行单元及浮点运算,应理解诸如MAC与/或整数运算等其它执行也可使用。此外,可能最好采用部分宽度实现(如在执行单元与数据元素之间具有少于一一对应的实现)以及附加逻辑来协调执行单元的重复使用,如下所述。
部分宽度硬件和“交错执行”
图7A-7B概念性地展示正以“交错”方式分别执行的全宽度压缩数据操作及部分宽度压缩数据操作。本实施例的上下文中“交错执行”指将指令的操作数各分成独立的段并使用同一硬件顺序处理各段的进程而言。通过在连接的段的处理中引入延时而顺序地处理各段。如图7A-7B中所示,将压缩数据操作数分成“高位段”(数据元素3与2)及“低位段”(数据元素1与0)。在图7A的示例中,低位段正在处理而高位段被延时。随后,处理高位段而获得全宽度结果。在图7B的示例中,低位段正在处理,而高位数据段是否处理则取决于实现。例如,如果对应的结果是要清零的则高位数据段可能不需要处理。此外应理解如果不处理高位数据段,则高位与低位数据段可同时处理。类似地,在全宽度实现(如在执行单元与数据元素之间具有一一对应的实现)则高与低位数据段可同时处理或如图7A中所示。
此外,虽然下面的实施例是描述为只具有加法与乘法执行单元的,也可使用诸如MAC单元等其它类型的执行单元。
虽然存在着能达到交错的指令执行的若干不同方式,以下各节描述两个示范性实施例来说明本发明的这一方面。具体地,所描述的两个示范性实施例都接收指定包含128位操作数的逻辑寄存器的相同宏指令。
在第一示范性实施例中,指定包含128位操作数的逻辑寄存器的各宏指令导致从物理寄存器访问全宽度的操作数。从寄存器访问全宽度操作数之后,将操作数分成低与高位段(如利用锁存器与多路复用器)及使用相同的硬件顺序地执行。采集得出的半宽度结果并同时将它们写入单个逻辑寄存器中。
反之,在第二示范性实施例中将指定包含128位操作数的逻辑寄存器的各宏指令分成至少两条各只在一半操作数上操作的微指令。从而操作数是分成高与低位段的而各微指令独立地导致从寄存器中只访问一半操作数。在SIMD体系结构中这种分法是可能的,因为各操作数是互相独立的。虽然第二实施例的实现能以任何次序执行微指令(以按次序的或无次序的执行模型),微指令分别导致在操作数的低位与高位段上独立地或分开地执行宏指令所指定的操作。此外,各微指令导致将一半得出的操作数写入宏指令所指定的单一目的地逻辑寄存器中。
虽然将实施例描述为在其中将128位操作数分成两段的,替代实施例能使用更大或更小的操作数与/或将这些操作数分成两段以上。此外,虽然将两个示范性实施例描述为用于执行交错执行的,替代实施例可采用其它技术。
采用“交错执行”的第一示例性实施例
图8A概念性地展示从逻辑寄存器存取全宽度操作数但一次在操作数的一半宽度上执行操作的按照第一实施例的处理器内的电路。这一实施例假定处理器执行机能在每一时钟周期中处理一条指令。作为示例,假定执行下述指令序列:ADD X,Y;MUL A,B。在时间T上,通过端口1与2从它们各自的物理寄存器中各检索出128位的X及128位的Y。将X与Y两者的低位数据段,即低64位,传递给多路复用器802及804,然后向前传递给执行单元供处理。将X与Y的高位数据段,高64位保存在延时元件M1与M2中。在时间T+1上,从延时元件M1与M2中读取X与Y的高位数据段,然后向前传递到执行单元供处理。通常,将高位数据段存储在延时元件M1与M2中的延时机构允许N位(在本例中N=64)硬件处理2N位数据。然后将来自执行单元的低位结果保存在延时元件M3中直到高位结果就绪为止。然后通过端口3将两个处理步骤的结果写回到寄存器堆800。回忆在部分宽度压缩数据操作的情况中,可将低或高位结果的一或多个数据元素强制到预定值上(如零、X或Y之一中的对应数据元素的值、等)而不是加法或乘法运算的输出。
继续本示例,在时间T+1上,也已起动乘法指令。从而在时间T+1上,可能已通过端口1与2从它们各自的寄存器中检索出各128位的A与B。可将A与B两者的低位数据段,即低64位传递到多路复用器806与808中。从延时元件M1与M2中清除X与Y的高位段并传递到多路复用器806与808中之后,可将A与B的高位段保持存储在延时元件M1与M2中,通过端口3将两个处理步骤的结果写回到寄存器堆800。
从而,按照本发明的实施例,设置了只包含一半硬件的执行单元(诸如两个单精度加法执行单元及两个单精度乘法执行单元),而不是要求执行单元如在当前的处理器中发现的那样去并行处理全宽度的操作数。本实施例利用了揭示多媒体应用利用大约50%加法指令与50%乘法指令这一统计分析。根据这些统计,本实施例假定多媒体指令通常遵照下述模式:ADD,MUL,ADD,MUL,等等。通过以上述方式利用加法与乘法执行单元,本实施例提供执行单元的优化使用,从而能以较低的成本达到与当前的处理器相当的性能。
图8B为进一步说明图8A的电路的定时图。更具体地,如图8B中所示,当在时间T上发布指令“ADD X,Y”时,两个加法执行单元首先在低位数据段或图1的两个低位压缩数据段,即X0Y0及X1Y1上执行加法。在时间T+1上,用相同的执行单元在来自操作数的其余两个数据元素上执行加法运算,并将高位数据段的后面两个数据元素相加,即X2Y2与X3Y3。虽然上述实施例是参照利用两个执行单元的加法与乘法运算描述的,替代实施例可利用任何数目的执行单元与/或以交错方式执行任何数目的不同运算。
按照本实施例,可利用64位硬件来处理128位数据。一个128位寄存器可分成四个32位元素,各表示独立的32位值,在时间T上,两个加法执行单元首先在两个低位32位值上执行加法,后面跟随着在时间T+1上在高位32位值上的加法。在乘法运算的情况中,乘法执行单元以相同的方式工作。利用当前可获得的64位硬件去处理128位数据的这一能力代表了对硬件制造商的巨大成本效益。
如上所述,在后一个时钟周期上重复使用按照本实施例的加法与乘法执行单元重复执行第二个加法或乘法运算。当然,在部分宽度压缩数据指令的情况中,重复使用执行单元但没有必要重复执行运算,因为可以有选择地关闭对执行单元的供电。总之,如上所述,为了高效地执行这一重复使用或“交错执行”,利用了多媒体应用的统计表现。
如果第二加法指令跟随第一加法指令,第二加法可被调度单元延时,以便加法执行单元能完成第一加法指令,或更具体地在高位数据段上的第一加法指令。然后开始执行第二加法指令。作为替代,在无序处理器中,调度单元可确定是否可无序地执行指令流中更后面的乘法指令。如果是,调度单元可通知乘法执行单元开始处理该乘法指令。如果在时间T+1上没有可供处理的乘法指令,在第一加法指令后面调度程序将不发布指令,从而允许加法执行单元在开始第二加法指令之前定时完成第一加法指令。
本发明的又另一实施例,通过在一半时钟周期而不是整个时钟周期上在同一执行单元上执行指令而允许发布加倍的加法或乘法指令。在半时钟周期上执行一条指令有效地“双激发”硬件,即使硬件两倍快。以这一方式,可在每一个时钟周期中利用加法或乘法执行单元来处理新指令。双激发的硬件允许硬件单元以只在整个时钟周期上执行的单激发硬件两倍的效率执行。双激发硬件需要明显地更多的硬件以便在半时钟周期上高效地处理指令。
应理解,本发明的修改与变化是被上述教导涵盖的并在所附权利要求的视界内,并不脱离本发明的精神与意向范围。例如,上面虽然只描述了两个执行单元,但可提供任何数目的逻辑单元。
采用“交错执行”的第二示例性实施例
按照本发明的替代实施例,全宽度操作数的交错执行是通过将一条全宽度宏指令转换成至少两条各只在一半操作数上操作的微指令来达到的。如下面进一步描述的,通过消除没有必要确定部分宽度结果的微指令,在宏指令指定部分宽度压缩数据操作时能达到更佳性能。以这一方式,减少了处理器资源制约并且处理器不再被无意义的微指令无必要地占用。虽然下面的描述是按照具体的寄存器重新命名法编写的,应理解也可与本发明协调利用其它寄存器重新命名机制。下面描述的寄存器重新命名方法假设采用寄存器别名表(RAT)、排序缓冲器(ROB)及退役缓冲器,如在美国专利号5,446,912中详细描述的。也可实现诸如在美国专利号5,197,132中描述的替代寄存器重新命名方法。
图9概念性地展示通过将宏指令转换成各处理全宽度操作数的一部分的多条微指令以“交错”方式在操作数上执行操作的流水线的一个实施例。应指出为了避免不必要地使本发明难以理解,并未详细示出诸如取指令阶段等流水线的各种其它阶段。如所示,在流水线的解码阶段,接收全宽度宏指令,指定各存储全宽度操作数(如128位)的逻辑源寄存器。作为示例,所描述的操作数为128位压缩浮点数据操作数。在本例中,处理器支持用于存储压缩浮点数据的Y个逻辑寄存器。将宏指令转换成各导致宏指令在半宽度操作数(如64位)上执行操作的微指令,即“高位操作”与“低位操作”。
两条半宽度微指令然后进入流水线的寄存器重新命名阶段。寄存器重新命名阶段包含各种寄存器图及排序缓冲器。各微指令的逻辑源寄存器为对寄存器映象表(如RAT)中的特定寄存器项的指针。寄存器映象表中的项又指向ROB中或退役寄存器中的物理源单元的位置。按照一个实施例,为了提供上述半宽度高与低位操作,压缩浮点数据的RAT设置有Y*2个项。从而,例如,不是带有8个逻辑寄存器项的RAT,而是建立带16个项的RAT,各项编址为“高”或“低”。各项标识对应于128位逻辑寄存器的高或低部分之一的64位源。
从而各高与低位微指令在对应于各自的操作数的寄存器映象表中具有相关的项。然后微指令进入调度阶段(对无序处理)或执行阶段(对按序处理器)。各微指令检索与分开处理128位操作数的64位段。64硬件单元首先执行操作之一(如低位操作)。然后,同一64位硬件单元执行高位操作。应理解,在低与高位操作之间可执行零或数条指令。
虽然上述实施例描述将宏指令分成两条微指令,替代实施例可将宏指令分成更多的微指令。虽然图9示出将压缩浮点数据返回给带有各指定为高或低的Y*2个64位寄存器的退役寄存器堆,替代实施例可采用带有Y个128位寄存器的退役寄存器堆。此外,虽然将一个实施例描述为具有带排序缓冲器与退役寄存器堆的寄存器重新命名机构的,替代实施例可使用任何寄存器重新命名机构。例如,美国专利号5,197,132的寄存器重新命名机构采用历史队列与后备图。
图10为进一步说明图9中所描述的实施例的定时图。在时间T上,宏指令“ADD X,Y”进入图9的流水线的解码阶段。作为示例,该宏指令为128位指令。将该128位宏指令转换成两条64位微指令,即高位运算“ADD XH,YH”及低位运算“ADD XL,YL”。然后各微指令处理包含两个数据元素的一段数据。例如,在时间T上,可由64位执行单元执行低位操作。然后在不同的时间上(如时间T+N),同一64位执行单元执行高位操作。从而本发明的这一实施例特别适用于利用现有的64位硬件系统处理128位指令,而无须对硬件作重大改变。现有的系统除了现有的逻辑寄存器图之外,很容易扩展成包含新图来处理压缩的浮点。
现在参见图11,其中描述了按照本发明的一个实施例可以采用的解码逻辑。简要地说,在所描绘的实施例中,多个解码器1110、1120及1130各接收一条宏指令并将其转换成微指令。然后将微操作向下送到流水线的其余部分。当然,执行每一条宏指令不一定需要N条微指令。因此,通常的情况是只排队微指令的子集供流水线的其余部分处理。
如上所述,压缩数据操作可实现为两条半宽度微指令(如高位操作与低位操作)。不是象先有处理器实现所要求的用两个解码器独立地解码宏指令来生成高与低位操作,作为本实施例的特征可用同一解码器生成两条微指令。在本例中,这是用复制逻辑1150完成的,它复制高或低位操作,并随后适当地修正得到的复制操作来建立剩下的操作。重要的是,如上所述,通过小心地编码寄存器地址空间,能用单一的位来区分宏指令引用的寄存器(如逻辑源与目的地寄存器)。结果,最简单的形式的修正逻辑1160可包括一或多个反相器来反相适当的位以便从低位操作产生高位操作及反过来。在任何情况中,然后将复制的宏指令传递给多路复用器1170。多路复用器1170也接收解码器1120生成的微指令。在本例中,多路复用器1170在有效性解码器1180的控制下输出用于压缩数据操作(包含部分宽度压缩数据操作)的复制的微指令,并输出从解码器1120接收的用于压缩数据操作以外的操作的微指令。因此,优化操作码图来简化复制逻辑1150对压缩数据操作的检测是有利的。例如,如果只需要检验宏指令的一小部分来区别压缩数据操作与其它操作,则有效性解码器1180可采用较少的电路。
在为了执行部分宽度压缩数据操作的目的而将源数据元素传递通过到逻辑目的地寄存器的实现中,除了类似于相对于图5A与5C描述的选择逻辑之外,可包含逻辑来消除(消灭)高或低位操作之一,为了性能原因,最好及早在流水线中消除无关的微指令。这一消除可按照通过利用从微指令长度确定电路1190输出的微指令选择信号描绘的实施例来完成。该微指令长度确定逻辑1190检验一部分宏指令并生成指示要在流水线中向下进行的一或多条微指令的特定组合的微指令选择信号。在标量SIMD指令的情况中,只允许进行得出的高与低位操作之一。例如,微指令选择信号可表示为标识哪些微指令要保留及哪些要消除的位屏蔽。作为替代,微指令选择信号可简单地指示从预定的起点开始要消除或保留的微指令的数目。执行上述消除所需的逻辑取决于引导微指令通过流水线的其余部分的导航机制而变化。例如,如果微指令是排队的,可能要增加逻辑来操作微指令队列的头与尾指针以导致用后面生成的有效微指令来改写无效的微指令,许多其它的消除技术对于本技术中的普通技术人员是熟知的。
虽然为了简单起见在所描绘的实施例中一次只示出为解码单一宏指令,但在替代实施例中可同时解码多条宏指令,同时可理解,微指令复制具有比上述实施例所示更广阔的应用性。例如,以类似于上述的方式,可用同一解码器解码全宽度及部分宽度压缩数据宏指令。如果用前缀来区分全宽度与部分宽度压缩数据宏指令,解码器可简单地忽略该前缀并以相同方式解码两种类型的指令。然后,可以修改得出的微操作中的适当的位来有选择地为数据元素全体或其子集启动处理。以这一方式,可从部分宽度压缩数据微操作生成全宽度压缩数据微操作,反之亦然,借此降低解码器的复杂性。
从而公开了用于高效地执行部分宽度压缩数据指令的方法与设备。这里描述的这些特定的设备与方法只是为了展示本发明的原理。本技术中的普通技术人员可作出形式上与细节上的许多修改而不脱离本发明的范围。虽然对于特定的最佳实施例示出了本发明,但不应认为局限于此。反之,本发明只受所附权利要求书的范围的限制。
Claims (28)
1.一种方法,包括:
接收部分宽度压缩数据指令,所述部分宽度压缩数据指令指定第一压缩数据操作数和第二压缩数据操作数在存储器中的位置,所述部分宽度压缩数据指令指定压缩数据结果的生成,压缩数据结果具有对第一和第二压缩数据操作数的一个或多个数据元素对执行的一个或多个操作的一个或多个结果作为一个或多个数据元素,并且压缩数据结果具有一个或多个预定值作为一个或多个剩余数据元素;和
生成压缩数据结果,包括:存取第一和第二压缩数据操作数的全宽度;将第一和第二压缩数据操作数之中的每个划分为低位段和高位段;和使用相同的硬件顺序地处理低位段和高位段。
2.根据权利要求1的方法,其中第一和第二压缩数据操作数包括128位操作数,以及其中压缩数据结果包括128位压缩数据结果。
3.根据权利要求1的方法,其中一个或多个预定值包括第一压缩数据操作数的数据元素的值。
4.根据权利要求1的方法,其中所述生成压缩数据结果包括清除压缩数据结果的数据元素。
5.根据权利要求1的方法,其中部分宽度压缩数据指令包括标量压缩数据指令,以及其中压缩数据结果包括只对第一和第二压缩数据操作数的单个数据元素对执行的操作的结果。
6.根据权利要求1的方法,进一步包括将报告的异常限制到与所述确定压缩数据结果的部分相关联的那些异常。
7.根据权利要求1的方法,进一步包括通过选择性地关闭生成压缩数据结果不需要的电路来减少功耗。
8.一种设备,包括:
寄存器堆,提供逻辑寄存器来存储压缩数据操作数,每个压缩数据操作数包括多个数据元素;
解码器,接收包括部分宽度压缩数据指令的指令,所述部分宽度压缩数据指令指定压缩数据结果的生成,压缩数据结果包括对第一压缩数据操作数和第二压缩数据操作数的一对数据元素执行的操作的结果作为第一数据元素,并且压缩数据结果包括预定值作为第二数据元素;和
执行单元,与所述解码器和寄存器堆相耦合,其中所述执行单元包括:
从存储器的位置中存取操作数的全宽度的逻辑;和
在不同的时间处理操作数的部分的逻辑。
9.根据权利要求8的设备,其中执行单元包括将操作数之一的数据元素传递到压缩数据结果的逻辑。
10.根据权利要求8的设备,其中预定值包括恒等函数值。
11.根据权利要求8的设备,其中执行单元包括清零压缩数据结果的数据元素的逻辑。
12.根据权利要求8的设备,其中部分宽度压缩数据指令包括标量压缩数据指令。
13.根据权利要求8的设备,其中第一和第二压缩数据操作数包括128位操作数,以及其中压缩数据结果包括128位操作数。
14.根据权利要求8的设备,其中部分宽度压缩数据指令指定压缩数据结果在寄存器堆的逻辑源寄存器中存储在第一压缩数据操作数之上。
15.根据权利要求8的设备,其中执行单元包括顺序处理第一和第二压缩数据操作数的独立段和以交错方式生成第一数据元素与第二数据元素的逻辑。
16.根据权利要求8的设备,进一步包括通过选择性地关闭生成压缩数据结果不需要的执行单元的电路来减少功耗的逻辑。
17.一种方法,包括:
接收指定第一压缩数据操作数和第二压缩数据操作数在存储器中的位置的指令;
从存储器中存取第一压缩数据操作数和第二压缩数据操作数的全宽度;
将第一压缩数据操作数划分为第一部分和第二部分;
将第二压缩数据操作数划分为第三部分和第四部分;
通过对第一和第三部分执行利用该指令指定的操作来确定第一部分结果;和
通过处理第二和第四部分来确定第二部分结果,其中确定第二部分结果包括将至少一个数据元素设置为预定值,
其中使用相同的硬件来确定第一和第二部分结果。
18.根据权利要求17的方法,其中该指令包括标量压缩数据指令。
19.根据权利要求17的方法,进一步包括将第一部分结果的一部分设置为从一个操作数的数据元素的值和恒等函数值之中选择的一个值。
20.根据权利要求17的方法,其中操作数包括128位操作数;以及其中低位段和高位段均包括64位段。
21.根据权利要求17的方法,进一步包括在确定第二部分结果之前延迟第二和第四部分。
22.根据权利要求17的方法,进一步包括通过选择性地关闭确定第二部分结果不需要的电路来减少功耗。
23.根据权利要求17的方法,进一步包括:
延迟第一部分结果;
在所述延迟第一部分结果之后,收集第一和第二部分结果;和
将部分结果写入利用该指令指定的目的地。
24.一种设备,包括:
划分逻辑,接收利用部分宽度压缩数据指令指定的第一压缩数据操作数的全宽度并将其划分为第一部分和第二部分,以及接收利用部分宽度压缩数据指令指定的第二压缩数据操作数的全宽度并将其划分为第三部分和第四部分;
延迟元件,与划分逻辑相耦合,接收和延迟第一部分和第三部分;和
执行单元,与划分逻辑和延迟元件相耦合,所述执行单元提供利用部分宽度压缩数据指令指定的压缩数据结果给利用部分宽度压缩数据指令指定的目的地,压缩数据结果包括只对第一和第二压缩数据操作数的数据元素的子集执行的操作的一个或多个结果。
25.根据权利要求24的设备,其中第一和第二压缩数据操作数包括128位操作数,以及其中划分逻辑包括将128位操作数划分为64位低位段和64位高位段的逻辑。
26.根据权利要求24的设备,其中执行单元的相同电路在与第一和第三部分不同的时间处理第二和第四部分。
27.根据权利要求24的设备,进一步包括延迟元件来延迟与第二和第四部分相相应的压缩数据结果的部分。
28.根据权利要求24的设备,其中该指令包括标量压缩数据指令,以及其中执行单元包括对第二和第四部分的相应数据元素的单个对执行利用该指令指定的操作的逻辑。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US09/053127 | 1998-03-31 | ||
US09/053,127 US6230253B1 (en) | 1998-03-31 | 1998-03-31 | Executing partial-width packed data instructions |
Related Parent Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNB99104620XA Division CN1286002C (zh) | 1998-03-31 | 1999-03-31 | 执行部分宽度压缩数据指令的装置和方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN1595390A true CN1595390A (zh) | 2005-03-16 |
CN100385432C CN100385432C (zh) | 2008-04-30 |
Family
ID=21982113
Family Applications (3)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNB2004100835854A Expired - Lifetime CN100385432C (zh) | 1998-03-31 | 1999-03-31 | 执行部分宽度压缩数据指令的方法和设备 |
CNB99104620XA Expired - Lifetime CN1286002C (zh) | 1998-03-31 | 1999-03-31 | 执行部分宽度压缩数据指令的装置和方法 |
CNB200410083584XA Expired - Lifetime CN100367269C (zh) | 1998-03-31 | 1999-03-31 | 执行部分宽度压缩数据指令的方法和设备 |
Family Applications After (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNB99104620XA Expired - Lifetime CN1286002C (zh) | 1998-03-31 | 1999-03-31 | 执行部分宽度压缩数据指令的装置和方法 |
CNB200410083584XA Expired - Lifetime CN100367269C (zh) | 1998-03-31 | 1999-03-31 | 执行部分宽度压缩数据指令的方法和设备 |
Country Status (7)
Country | Link |
---|---|
US (3) | US6230253B1 (zh) |
CN (3) | CN100385432C (zh) |
DE (1) | DE19914617C2 (zh) |
GB (1) | GB2339040C (zh) |
HK (1) | HK1027402A1 (zh) |
SG (1) | SG85630A1 (zh) |
TW (1) | TW470914B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN100452090C (zh) * | 2006-03-14 | 2009-01-14 | 腾讯科技(深圳)有限公司 | 一种实现高动态光照范围的方法及系统 |
Families Citing this family (64)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7395298B2 (en) * | 1995-08-31 | 2008-07-01 | Intel Corporation | Method and apparatus for performing multiply-add operations on packed data |
US6385634B1 (en) * | 1995-08-31 | 2002-05-07 | Intel Corporation | Method for performing multiply-add operations on packed data |
US6192467B1 (en) | 1998-03-31 | 2001-02-20 | Intel Corporation | Executing partial-width packed data instructions |
US6230257B1 (en) | 1998-03-31 | 2001-05-08 | Intel Corporation | Method and apparatus for staggering execution of a single packed data instruction using the same circuit |
US7392275B2 (en) * | 1998-03-31 | 2008-06-24 | Intel Corporation | Method and apparatus for performing efficient transformations with horizontal addition and subtraction |
US7395302B2 (en) * | 1998-03-31 | 2008-07-01 | Intel Corporation | Method and apparatus for performing horizontal addition and subtraction |
US6418529B1 (en) | 1998-03-31 | 2002-07-09 | Intel Corporation | Apparatus and method for performing intra-add operation |
US6233671B1 (en) | 1998-03-31 | 2001-05-15 | Intel Corporation | Staggering execution of an instruction by dividing a full-width macro instruction into at least two partial-width micro instructions |
US6230253B1 (en) | 1998-03-31 | 2001-05-08 | Intel Corporation | Executing partial-width packed data instructions |
US6687806B1 (en) * | 2000-06-15 | 2004-02-03 | Advanced Micro Devices, Inc. | Apparatus and method for generating 64 bit displacement and immediate values |
CN1299198C (zh) * | 2001-06-27 | 2007-02-07 | 凌阳科技股份有限公司 | 由可改变的指令格式而提高程序码密集度的微控制器结构 |
US7430578B2 (en) * | 2001-10-29 | 2008-09-30 | Intel Corporation | Method and apparatus for performing multiply-add operations on packed byte data |
US7200738B2 (en) * | 2002-04-18 | 2007-04-03 | Micron Technology, Inc. | Reducing data hazards in pipelined processors to provide high processor utilization |
DE10225230B4 (de) * | 2002-06-06 | 2004-10-21 | Infineon Technologies Ag | Prozessor und Verfahren zum gleichzeitigen Ausführen einer Berechnung und eines Kopiervorgangs |
US7426529B2 (en) * | 2002-06-06 | 2008-09-16 | Infineon Technologies Ag | Processor and method for a simultaneous execution of a calculation and a copying process |
US7249350B2 (en) * | 2002-09-30 | 2007-07-24 | Intel Corporation | Optimized translation of scalar type SIMD instructions into non-scalar SIMD instructions |
US7386704B2 (en) | 2002-10-31 | 2008-06-10 | Lockheed Martin Corporation | Pipeline accelerator including pipeline circuits in communication via a bus, and related system and method |
US7668897B2 (en) * | 2003-06-16 | 2010-02-23 | Arm Limited | Result partitioning within SIMD data processing systems |
US7237096B1 (en) * | 2004-04-05 | 2007-06-26 | Sun Microsystems, Inc. | Storing results of producer instructions to facilitate consumer instruction dependency tracking |
US7383427B2 (en) * | 2004-04-22 | 2008-06-03 | Sony Computer Entertainment Inc. | Multi-scalar extension for SIMD instruction set processors |
US20050251649A1 (en) * | 2004-04-23 | 2005-11-10 | Sony Computer Entertainment Inc. | Methods and apparatus for address map optimization on a multi-scalar extension |
US7389406B2 (en) * | 2004-09-28 | 2008-06-17 | Intel Corporation | Apparatus and methods for utilization of splittable execution units of a processor |
US7619541B2 (en) | 2004-10-01 | 2009-11-17 | Lockheed Martin Corporation | Remote sensor processing system and method |
US7257695B2 (en) * | 2004-12-28 | 2007-08-14 | Intel Corporation | Register file regions for a processing system |
US7761694B2 (en) * | 2006-06-30 | 2010-07-20 | Intel Corporation | Execution unit for performing shuffle and other operations |
US7783862B2 (en) * | 2006-08-07 | 2010-08-24 | International Characters, Inc. | Method and apparatus for an inductive doubling architecture |
US20080071851A1 (en) * | 2006-09-20 | 2008-03-20 | Ronen Zohar | Instruction and logic for performing a dot-product operation |
US8631224B2 (en) * | 2007-09-13 | 2014-01-14 | Freescale Semiconductor, Inc. | SIMD dot product operations with overlapped operands |
US8103858B2 (en) * | 2008-06-30 | 2012-01-24 | Intel Corporation | Efficient parallel floating point exception handling in a processor |
US8755515B1 (en) | 2008-09-29 | 2014-06-17 | Wai Wu | Parallel signal processing system and method |
US8504805B2 (en) * | 2009-04-22 | 2013-08-06 | Oracle America, Inc. | Processor operating mode for mitigating dependency conditions between instructions having different operand sizes |
US8335912B2 (en) * | 2009-04-22 | 2012-12-18 | Oracle America, Inc. | Logical map table for detecting dependency conditions between instructions having varying width operand values |
US8458444B2 (en) * | 2009-04-22 | 2013-06-04 | Oracle America, Inc. | Apparatus and method for handling dependency conditions between floating-point instructions |
US20100274961A1 (en) * | 2009-04-22 | 2010-10-28 | Golla Robert T | Physically-indexed logical map table |
US8495125B2 (en) * | 2009-05-27 | 2013-07-23 | Microchip Technology Incorporated | DSP engine with implicit mixed sign operands |
US8495341B2 (en) * | 2010-02-17 | 2013-07-23 | International Business Machines Corporation | Instruction length based cracking for instruction of variable length storage operands |
US9052890B2 (en) * | 2010-09-25 | 2015-06-09 | Intel Corporation | Execute at commit state update instructions, apparatus, methods, and systems |
US8914615B2 (en) | 2011-12-02 | 2014-12-16 | Arm Limited | Mapping same logical register specifier for different instruction sets with divergent association to architectural register file using common address format |
CN104011646B (zh) | 2011-12-22 | 2018-03-27 | 英特尔公司 | 用于产生按照数值顺序的连续整数的序列的处理器、方法、系统和指令 |
US10866807B2 (en) | 2011-12-22 | 2020-12-15 | Intel Corporation | Processors, methods, systems, and instructions to generate sequences of integers in numerical order that differ by a constant stride |
US10223112B2 (en) | 2011-12-22 | 2019-03-05 | Intel Corporation | Processors, methods, systems, and instructions to generate sequences of integers in which integers in consecutive positions differ by a constant integer stride and where a smallest integer is offset from zero by an integer offset |
US9898283B2 (en) * | 2011-12-22 | 2018-02-20 | Intel Corporation | Processors, methods, systems, and instructions to generate sequences of integers in which integers in consecutive positions differ by a constant integer stride and where a smallest integer is offset from zero by an integer offset |
US9336000B2 (en) * | 2011-12-23 | 2016-05-10 | Intel Corporation | Instruction execution unit that broadcasts data values at different levels of granularity |
CN110471699B (zh) | 2011-12-23 | 2023-07-28 | 英特尔公司 | 用于指令处理的处理器核、方法和系统 |
US9513912B2 (en) | 2012-07-27 | 2016-12-06 | Micron Technology, Inc. | Memory controllers |
US20140281418A1 (en) * | 2013-03-14 | 2014-09-18 | Shihjong J. Kuo | Multiple Data Element-To-Multiple Data Element Comparison Processors, Methods, Systems, and Instructions |
US9477467B2 (en) * | 2013-03-30 | 2016-10-25 | Intel Corporation | Processors, methods, and systems to implement partial register accesses with masked full register accesses |
US9424034B2 (en) | 2013-06-28 | 2016-08-23 | Intel Corporation | Multiple register memory access instructions, processors, methods, and systems |
US10228941B2 (en) * | 2013-06-28 | 2019-03-12 | Intel Corporation | Processors, methods, and systems to access a set of registers as either a plurality of smaller registers or a combined larger register |
US9513907B2 (en) | 2013-08-06 | 2016-12-06 | Intel Corporation | Methods, apparatus, instructions and logic to provide vector population count functionality |
US9495155B2 (en) | 2013-08-06 | 2016-11-15 | Intel Corporation | Methods, apparatus, instructions and logic to provide population count functionality for genome sequencing and alignment |
US9355061B2 (en) | 2014-01-28 | 2016-05-31 | Arm Limited | Data processing apparatus and method for performing scan operations |
US10108454B2 (en) * | 2014-03-21 | 2018-10-23 | Intel Corporation | Managing dynamic capacitance using code scheduling |
JP6307975B2 (ja) * | 2014-03-28 | 2018-04-11 | 富士通株式会社 | 演算処理装置及び演算処理装置の制御方法 |
FR3021428B1 (fr) | 2014-05-23 | 2017-10-13 | Kalray | Multiplication de matrices de bits utilisant des registres explicites |
TWI681300B (zh) * | 2014-11-14 | 2020-01-01 | 美商凱為有限責任公司 | 在64位元資料路徑上實行128位元simd操作之方法、系統及電腦可讀取媒體 |
US10001995B2 (en) * | 2015-06-02 | 2018-06-19 | Intel Corporation | Packed data alignment plus compute instructions, processors, methods, and systems |
US10459731B2 (en) * | 2015-07-20 | 2019-10-29 | Qualcomm Incorporated | Sliding window operation |
US20170192789A1 (en) * | 2015-12-30 | 2017-07-06 | Rama Kishnan V. Malladi | Systems, Methods, and Apparatuses for Improving Vector Throughput |
US10901940B2 (en) * | 2016-04-02 | 2021-01-26 | Intel Corporation | Processors, methods, systems, and instructions to atomically store to memory data wider than a natively supported data width |
US10296342B2 (en) * | 2016-07-02 | 2019-05-21 | Intel Corporation | Systems, apparatuses, and methods for cumulative summation |
US10838720B2 (en) * | 2016-09-23 | 2020-11-17 | Intel Corporation | Methods and processors having instructions to determine middle, lowest, or highest values of corresponding elements of three vectors |
WO2020029018A1 (zh) | 2018-08-06 | 2020-02-13 | 华为技术有限公司 | 矩阵的处理方法、装置及逻辑电路 |
CN111459546B (zh) * | 2020-03-30 | 2023-04-18 | 芯来智融半导体科技(上海)有限公司 | 一种实现操作数位宽可变的装置及方法 |
Family Cites Families (75)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US3675001A (en) | 1970-12-10 | 1972-07-04 | Ibm | Fast adder for multi-number additions |
US3723715A (en) | 1971-08-25 | 1973-03-27 | Ibm | Fast modulo threshold operator binary adder for multi-number additions |
FR2212952A5 (zh) | 1972-12-29 | 1974-07-26 | Cit Alcatel | |
US3900724A (en) | 1974-02-11 | 1975-08-19 | Trw Inc | Asynchronous binary multiplier using non-threshold logic |
JPS5824941A (ja) | 1981-08-07 | 1983-02-15 | Hitachi Ltd | 演算装置 |
JPS58182754A (ja) * | 1982-04-19 | 1983-10-25 | Hitachi Ltd | 演算処理装置 |
JPS60134974A (ja) | 1983-12-23 | 1985-07-18 | Hitachi Ltd | ベクトル処理装置 |
US4945479A (en) | 1985-07-31 | 1990-07-31 | Unisys Corporation | Tightly coupled scientific processing system |
JPS6284335A (ja) | 1985-10-09 | 1987-04-17 | Hitachi Ltd | 乗算回路 |
JPS6297060A (ja) * | 1985-10-23 | 1987-05-06 | Mitsubishi Electric Corp | デイジタルシグナルプロセツサ |
US5021945A (en) | 1985-10-31 | 1991-06-04 | Mcc Development, Ltd. | Parallel processor system for processing natural concurrencies and method therefor |
US4890218A (en) | 1986-07-02 | 1989-12-26 | Raytheon Company | Variable length instruction decoding apparatus having cross coupled first and second microengines |
US4985848A (en) | 1987-09-14 | 1991-01-15 | Visual Information Technologies, Inc. | High speed image processing system using separate data processor and address generator |
US5189636A (en) | 1987-11-16 | 1993-02-23 | Intel Corporation | Dual mode combining circuitry |
US5047975A (en) | 1987-11-16 | 1991-09-10 | Intel Corporation | Dual mode adder circuitry with overflow detection and substitution enabled for a particular mode |
US5126964A (en) | 1988-04-01 | 1992-06-30 | Digital Equipment Corporation | High performance bit-sliced multiplier circuit |
US4972362A (en) | 1988-06-17 | 1990-11-20 | Bipolar Integrated Technology, Inc. | Method and apparatus for implementing binary multiplication using booth type multiplication |
CA1311063C (en) | 1988-12-16 | 1992-12-01 | Tokumichi Murakami | Digital signal processor |
US5134693A (en) | 1989-01-18 | 1992-07-28 | Intel Corporation | System for handling occurrence of exceptions during execution of microinstructions while running floating point and non-floating point instructions in parallel |
US5081698A (en) | 1989-02-14 | 1992-01-14 | Intel Corporation | Method and apparatus for graphics display data manipulation |
US5001662A (en) | 1989-04-28 | 1991-03-19 | Apple Computer, Inc. | Method and apparatus for multi-gauge computation |
US5590365A (en) | 1990-03-30 | 1996-12-31 | Kabushiki Kaisha Toshiba | Pipeline information processing circuit for floating point operations |
JP2651267B2 (ja) | 1990-07-26 | 1997-09-10 | 富士通株式会社 | 演算処理装置及び演算処理方法 |
EP0476962B1 (en) * | 1990-09-18 | 1998-08-12 | Fujitsu Limited | System for configuring a shared storage |
US5765011A (en) | 1990-11-13 | 1998-06-09 | International Business Machines Corporation | Parallel processing system having a synchronous SIMD processing with processing elements emulating SIMD operation using individual instruction streams |
US5303355A (en) | 1991-03-27 | 1994-04-12 | Motorola, Inc. | Pipelined data processor which conditionally executes a predetermined looping instruction in hardware |
US5241493A (en) | 1991-12-16 | 1993-08-31 | International Business Machines Corporation | Floating point arithmetic unit with size efficient pipelined multiply-add architecture |
US5311508A (en) | 1991-12-23 | 1994-05-10 | Square D Company | Apparatus for receiving and decoding a serial data packet containing the status of a network of single point I/O devices |
US5210711A (en) | 1992-02-26 | 1993-05-11 | Sony Corporation Of America | Very fast variable input multi-bit adder |
US5606677A (en) | 1992-11-30 | 1997-02-25 | Texas Instruments Incorporated | Packed word pair multiply operation forming output including most significant bits of product and other bits of one input |
JPH06242928A (ja) | 1993-02-22 | 1994-09-02 | Nec Corp | 加算器およびこれを用いた乗算回路 |
US5327369A (en) | 1993-03-31 | 1994-07-05 | Intel Corporation | Digital adder and method for adding 64-bit, 16-bit and 8-bit words |
US5806049A (en) | 1993-04-21 | 1998-09-08 | Petruzzi; Christopher R. | Data processing system for global assessment of investment opportunity and cost |
US5883824A (en) | 1993-11-29 | 1999-03-16 | Hewlett-Packard Company | Parallel adding and averaging circuit and method |
US5390135A (en) | 1993-11-29 | 1995-02-14 | Hewlett-Packard | Parallel shift and add circuit and method |
US5673427A (en) | 1994-03-01 | 1997-09-30 | Intel Corporation | Packing valid micro operations received from a parallel decoder into adjacent locations of an output queue |
US5642306A (en) | 1994-07-27 | 1997-06-24 | Intel Corporation | Method and apparatus for a single instruction multiple data early-out zero-skip multiplier |
US5579253A (en) | 1994-09-02 | 1996-11-26 | Lee; Ruby B. | Computer multiply instruction with a subresult selection option |
CN101211255B (zh) * | 1994-12-02 | 2012-07-04 | 英特尔公司 | 对复合操作数进行压缩操作的处理器、设备和计算系统 |
US5819101A (en) * | 1994-12-02 | 1998-10-06 | Intel Corporation | Method for packing a plurality of packed data elements in response to a pack instruction |
US6006318A (en) | 1995-08-16 | 1999-12-21 | Microunity Systems Engineering, Inc. | General purpose, dynamic partitioning, programmable media processor |
US6295599B1 (en) | 1995-08-16 | 2001-09-25 | Microunity Systems Engineering | System and method for providing a wide operand architecture |
US5953241A (en) | 1995-08-16 | 1999-09-14 | Microunity Engeering Systems, Inc. | Multiplier array processing system with enhanced utilization at lower precision for group multiply and sum instruction |
US5742840A (en) | 1995-08-16 | 1998-04-21 | Microunity Systems Engineering, Inc. | General purpose, multiple precision parallel operation, programmable media processor |
US6643765B1 (en) | 1995-08-16 | 2003-11-04 | Microunity Systems Engineering, Inc. | Programmable processor with group floating point operations |
US6385634B1 (en) * | 1995-08-31 | 2002-05-07 | Intel Corporation | Method for performing multiply-add operations on packed data |
CN1252587C (zh) | 1995-08-31 | 2006-04-19 | 英特尔公司 | 移位分组数据的方法、装置和处理数字音频信号的系统 |
US5721892A (en) | 1995-08-31 | 1998-02-24 | Intel Corporation | Method and apparatus for performing multiply-subtract operations on packed data |
US6470370B2 (en) * | 1995-09-05 | 2002-10-22 | Intel Corporation | Method and apparatus for multiplying and accumulating complex numbers in a digital filter |
US5936872A (en) | 1995-09-05 | 1999-08-10 | Intel Corporation | Method and apparatus for storing complex numbers to allow for efficient complex multiplication operations and performing such complex multiplication operations |
US5701508A (en) | 1995-12-19 | 1997-12-23 | Intel Corporation | Executing different instructions that cause different data type operations to be performed on single logical register file |
AU1465497A (en) | 1995-12-19 | 1997-07-28 | Intel Corporation | A computer system performing a two-dimensional rotation of packed data representing multimedia information |
US5835748A (en) | 1995-12-19 | 1998-11-10 | Intel Corporation | Method for executing different sets of instructions that cause a processor to perform different data type operations on different physical registers files that logically appear to software as a single aliased register file |
US5852726A (en) | 1995-12-19 | 1998-12-22 | Intel Corporation | Method and apparatus for executing two types of instructions that specify registers of a shared logical register file in a stack and a non-stack referenced manner |
US5983257A (en) * | 1995-12-26 | 1999-11-09 | Intel Corporation | System for signal processing using multiply-add operations |
US5793661A (en) | 1995-12-26 | 1998-08-11 | Intel Corporation | Method and apparatus for performing multiply and accumulate operations on packed data |
US5835392A (en) | 1995-12-28 | 1998-11-10 | Intel Corporation | Method for performing complex fast fourier transforms (FFT's) |
US5880983A (en) | 1996-03-25 | 1999-03-09 | International Business Machines Corporation | Floating point split multiply/add system which has infinite precision |
US6041403A (en) | 1996-09-27 | 2000-03-21 | Intel Corporation | Method and apparatus for generating a microinstruction responsive to the specification of an operand, in addition to a microinstruction based on the opcode, of a macroinstruction |
US6061521A (en) * | 1996-12-02 | 2000-05-09 | Compaq Computer Corp. | Computer having multimedia operations executable as two distinct sets of operations within a single instruction cycle |
TW357318B (en) * | 1997-03-18 | 1999-05-01 | Ind Tech Res Inst | Branching forecast and reading device for unspecified command length extra-purity pipeline processor |
US5884071A (en) * | 1997-03-31 | 1999-03-16 | Intel Corporation | Method and apparatus for decoding enhancement instructions using alias encodings |
FR2766353B1 (fr) | 1997-07-28 | 1999-11-26 | Dimso Sa | Implant, notamment plaque anterieure cervicale |
US6260137B1 (en) * | 1997-09-12 | 2001-07-10 | Siemens Aktiengesellschaft | Data processing unit with digital signal processing capabilities |
US7197625B1 (en) * | 1997-10-09 | 2007-03-27 | Mips Technologies, Inc. | Alignment and ordering of vector elements for single instruction multiple data processing |
US5864703A (en) * | 1997-10-09 | 1999-01-26 | Mips Technologies, Inc. | Method for providing extended precision in SIMD vector arithmetic operations |
US6178482B1 (en) | 1997-11-03 | 2001-01-23 | Brecis Communications | Virtual register sets |
US6122725A (en) | 1998-03-31 | 2000-09-19 | Intel Corporation | Executing partial-width packed data instructions |
US6192467B1 (en) | 1998-03-31 | 2001-02-20 | Intel Corporation | Executing partial-width packed data instructions |
US6230257B1 (en) | 1998-03-31 | 2001-05-08 | Intel Corporation | Method and apparatus for staggering execution of a single packed data instruction using the same circuit |
US6230253B1 (en) | 1998-03-31 | 2001-05-08 | Intel Corporation | Executing partial-width packed data instructions |
US6233671B1 (en) | 1998-03-31 | 2001-05-15 | Intel Corporation | Staggering execution of an instruction by dividing a full-width macro instruction into at least two partial-width micro instructions |
US6378060B1 (en) | 1998-08-24 | 2002-04-23 | Microunity Systems Engineering, Inc. | System to implement a cross-bar switch of a broadband processor |
US6272512B1 (en) | 1998-10-12 | 2001-08-07 | Intel Corporation | Data manipulation instruction for enhancing value and efficiency of complex arithmetic |
US7313788B2 (en) * | 2003-10-29 | 2007-12-25 | International Business Machines Corporation | Vectorization in a SIMdD DSP architecture |
-
1998
- 1998-03-31 US US09/053,127 patent/US6230253B1/en not_active Expired - Lifetime
-
1999
- 1999-03-19 SG SG9901386A patent/SG85630A1/en unknown
- 1999-03-29 GB GB9907221A patent/GB2339040C/en not_active Expired - Fee Related
- 1999-03-31 DE DE19914617A patent/DE19914617C2/de not_active Expired - Lifetime
- 1999-03-31 CN CNB2004100835854A patent/CN100385432C/zh not_active Expired - Lifetime
- 1999-03-31 CN CNB99104620XA patent/CN1286002C/zh not_active Expired - Lifetime
- 1999-03-31 CN CNB200410083584XA patent/CN100367269C/zh not_active Expired - Lifetime
- 1999-05-03 TW TW088105137A patent/TW470914B/zh active
-
2000
- 2000-07-11 HK HK00104251A patent/HK1027402A1/xx not_active IP Right Cessation
-
2001
- 2001-05-08 US US09/852,217 patent/US6970994B2/en not_active Expired - Lifetime
-
2005
- 2005-05-09 US US11/126,049 patent/US7467286B2/en not_active Expired - Fee Related
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN100452090C (zh) * | 2006-03-14 | 2009-01-14 | 腾讯科技(深圳)有限公司 | 一种实现高动态光照范围的方法及系统 |
Also Published As
Publication number | Publication date |
---|---|
DE19914617C2 (de) | 2002-10-31 |
GB2339040C (en) | 2008-06-16 |
CN1595389A (zh) | 2005-03-16 |
TW470914B (en) | 2002-01-01 |
US6230253B1 (en) | 2001-05-08 |
GB9907221D0 (en) | 1999-05-26 |
GB2339040B (en) | 2000-07-12 |
GB2339040A (en) | 2000-01-12 |
US20020010847A1 (en) | 2002-01-24 |
HK1027402A1 (en) | 2001-01-12 |
US7467286B2 (en) | 2008-12-16 |
SG85630A1 (en) | 2002-01-15 |
CN1286002C (zh) | 2006-11-22 |
US20050216706A1 (en) | 2005-09-29 |
CN100367269C (zh) | 2008-02-06 |
CN100385432C (zh) | 2008-04-30 |
US6970994B2 (en) | 2005-11-29 |
CN1244675A (zh) | 2000-02-16 |
DE19914617A1 (de) | 1999-10-14 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN1286002C (zh) | 执行部分宽度压缩数据指令的装置和方法 | |
ES2914605T3 (es) | Un procesador informático para cálculos de precisión superior que utiliza una descomposición de operaciones de precisión mixta | |
CN113762490B (zh) | 使用列折叠和挤压的稀疏矩阵的矩阵乘法加速 | |
US20200226473A1 (en) | Systems, apparatus, methods, and architectures for heterogeneous precision acceleration of quantized neural networks | |
Talla et al. | Bottlenecks in multimedia processing with SIMD style extensions and architectural enhancements | |
US11029958B1 (en) | Apparatuses, methods, and systems for configurable operand size operations in an operation configurable spatial accelerator | |
JP6930702B2 (ja) | プロセッサ | |
TWI537823B (zh) | 用以提供向量族群計數功能之方法、設備、指令及邏輯組件 | |
CN100340950C (zh) | 采用耗电控制用功能节制机构的微处理器 | |
CN116700793A (zh) | 可中断和可重启矩阵乘法指令、处理器、方法和系统 | |
EP3757814A1 (en) | Apparatuses, methods, and systems for time-multiplexing in a configurable spatial accelerator | |
CN106293640A (zh) | 用于紧密耦合的异构计算的硬件处理器和方法 | |
CN110321159A (zh) | 用于实现链式区块操作的系统和方法 | |
CN1713137A (zh) | 含有多级寄存器文件的数字数据处理设备 | |
TWI737651B (zh) | 用於加速圖形分析的處理器、方法及系統 | |
CN102103487A (zh) | 用于在单个指令中执行移位和异或运算的方法和装置 | |
JPH10254699A (ja) | 浮動小数点演算システム | |
JP2000122864A (ja) | デ―タ処理システムおよび集合化を用いた命令システム | |
CN1144934A (zh) | 具有执行送数指令执行部件的数据处理器及其操作方法 | |
CN1142484C (zh) | 微处理器向量处理方法 | |
CN107077321A (zh) | 用于执行融合的单个周期递增‑比较‑跳转的指令和逻辑 | |
CN1846193A (zh) | 用于并行数据转换的方法、设备及指令 | |
WO1999050740A1 (en) | Executing partial-width packed data instructions | |
CN104025033A (zh) | 利用控制操纵的simd可变移位和循环 | |
US11726912B2 (en) | Coupling wide memory interface to wide write back paths |
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 | ||
CX01 | Expiry of patent term | ||
CX01 | Expiry of patent term |
Granted publication date: 20080430 |