CN1914592A - 执行具有单元大小控制的紧缩数据操作的方法和设备 - Google Patents
执行具有单元大小控制的紧缩数据操作的方法和设备 Download PDFInfo
- Publication number
- CN1914592A CN1914592A CNA2004800412896A CN200480041289A CN1914592A CN 1914592 A CN1914592 A CN 1914592A CN A2004800412896 A CNA2004800412896 A CN A2004800412896A CN 200480041289 A CN200480041289 A CN 200480041289A CN 1914592 A CN1914592 A CN 1914592A
- Authority
- CN
- China
- Prior art keywords
- register
- data
- size
- storer
- different
- 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 title claims description 86
- 230000034563 regulation of cell size Effects 0.000 title description 2
- 238000012545 processing Methods 0.000 claims abstract description 157
- 238000013507 mapping Methods 0.000 claims abstract description 12
- 230000004044 response Effects 0.000 claims description 17
- 238000004590 computer program Methods 0.000 claims description 9
- 239000013598 vector Substances 0.000 description 57
- 238000012856 packing Methods 0.000 description 36
- 230000000875 corresponding effect Effects 0.000 description 30
- 238000006073 displacement reaction Methods 0.000 description 28
- 229920006395 saturated elastomer Polymers 0.000 description 19
- 230000008569 process Effects 0.000 description 18
- 230000001413 cellular effect Effects 0.000 description 15
- 238000010276 construction Methods 0.000 description 15
- 239000011159 matrix material Substances 0.000 description 12
- 230000008901 benefit Effects 0.000 description 11
- 230000001276 controlling effect Effects 0.000 description 11
- 238000012546 transfer Methods 0.000 description 11
- 230000017105 transposition Effects 0.000 description 10
- 230000008859 change Effects 0.000 description 8
- 238000005516 engineering process Methods 0.000 description 8
- 230000006870 function Effects 0.000 description 8
- 238000006243 chemical reaction Methods 0.000 description 7
- 230000014509 gene expression Effects 0.000 description 5
- 235000019580 granularity Nutrition 0.000 description 5
- 230000000737 periodic effect Effects 0.000 description 5
- 101100313728 Vitis vinifera VINST1 gene Proteins 0.000 description 4
- 239000000284 extract Substances 0.000 description 4
- 238000011049 filling Methods 0.000 description 4
- 101100317049 Saccharomyces cerevisiae (strain ATCC 204508 / S288c) VLD1 gene Proteins 0.000 description 3
- 230000006399 behavior Effects 0.000 description 3
- 238000007667 floating Methods 0.000 description 3
- 238000012986 modification Methods 0.000 description 3
- 230000004048 modification Effects 0.000 description 3
- 238000012360 testing method Methods 0.000 description 3
- 241001269238 Data Species 0.000 description 2
- 230000009471 action Effects 0.000 description 2
- 238000003491 array Methods 0.000 description 2
- 238000013461 design Methods 0.000 description 2
- 238000010586 diagram Methods 0.000 description 2
- 230000006872 improvement Effects 0.000 description 2
- 239000003550 marker Substances 0.000 description 2
- 239000007787 solid Substances 0.000 description 2
- 235000012364 Peperomia pellucida Nutrition 0.000 description 1
- 240000007711 Peperomia pellucida Species 0.000 description 1
- 230000015572 biosynthetic process Effects 0.000 description 1
- 238000004891 communication Methods 0.000 description 1
- 230000002596 correlated effect Effects 0.000 description 1
- 238000000354 decomposition reaction Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000000605 extraction Methods 0.000 description 1
- 238000001914 filtration Methods 0.000 description 1
- 238000003780 insertion Methods 0.000 description 1
- 230000037431 insertion Effects 0.000 description 1
- 238000002372 labelling Methods 0.000 description 1
- 238000012423 maintenance Methods 0.000 description 1
- 239000013642 negative control Substances 0.000 description 1
- 238000005457 optimization Methods 0.000 description 1
- 239000002245 particle Substances 0.000 description 1
- 230000001737 promoting effect Effects 0.000 description 1
- 238000013139 quantization Methods 0.000 description 1
- 230000008707 rearrangement Effects 0.000 description 1
- 230000002441 reversible effect Effects 0.000 description 1
- 238000005549 size reduction Methods 0.000 description 1
- 241000894007 species Species 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/30098—Register arrangements
- G06F9/30105—Register structure
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/76—Architectures of general purpose stored program computers
-
- 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/30032—Movement instructions, e.g. MOVE, SHIFT, ROTATE, SHUFFLE
-
- 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
-
- 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/30109—Register structure having multiple operands in a single register
-
- 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/30123—Organisation of register space, e.g. banked or distributed register file according to context, e.g. thread buffers
-
- 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/30181—Instruction operation extension or modification
- G06F9/30192—Instruction operation extension or modification according to data descriptor, e.g. dynamic data typing
-
- 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/3824—Operand accessing
- G06F9/3834—Maintaining memory consistency
-
- 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
- G06F9/3887—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple data lanes [SIMD]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/76—Architectures of general purpose stored program computers
- G06F15/82—Architectures of general purpose stored program computers data or demand driven
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Mathematical Physics (AREA)
- Computer Hardware Design (AREA)
- Executing Machine-Instructions (AREA)
- Advance Control (AREA)
Abstract
在数据处理系统(2)中提供寄存器数据存储器(20)。寄存器数据存储器(20)可经寄存器访问,其中数据处理指令指定寄存器大小Q、D,并为要由该数据处理指令操纵的多个SIMD数据单元指定数据单元大小S16、S8。给定数据处理单元可以经不同的寄存器访问,取决于到寄存器数据存储器(20)内的特定位置的寄存器说明符、寄存器大小和数据单元大小之间的映射。
Description
技术领域
本发明涉及数据处理系统领域。更具体地说,本发明涉及结合了利用寄存器从其内进行访问的寄存器数据存储器的数据处理系统。
背景技术
已知的是提供数据处理系统,比如位于英国剑桥的ARM有限公司设计的ARM处理器核,该ARM处理器核具有包含预定数量的固定大小的寄存器的寄存器组,比如16个寄存器,每个寄存器的长度为32比特。存储在这样寄存器中的数据值可通过适当的读指令从寄存器读出。写入到那个寄存器的指令和从那个寄存器读出的指令将指定以同样方式、例如利用同一寄存器号/名称所涉及的特定寄存器。
鉴于能够对诸如在活动图像数据处理等期间的大量数据执行处理操作的数据处理系统的增多的需求,已经开放了泛称为SIMD(单指令多数据)的处理技术。利用这些技术,对包含诸如像素分量值的多个分立数据单元的寄存器应用处理指令,该处理指令并行地应用于那个寄存器中的所有数据单元。举例来说,可能希望对像素的分量值乘以某一换算因子,并且SIMD指令能够响应于单独地应用换算值到各个不同的数据单元的单个指令而控制它的发生。应该理解,在这些系统中,在对数据单元执行的处理不允许不适当地影响保持在同一寄存器中的其它数据单元的意义上,数据单元互相隔离。
尽管SIMD处理技术确实允许并行执行多个期望操作,但它们也存在相当多的缺点,在SIMD指令能够对数据单元执行之前,一般必需花费时间和处理循环将数据单元安排到SIMD寄存器中必需的位置中。这个要求不利地减少了通过SIMD操作获得的利益。
还已知的是提供一种数据处理系统,用于响应于单个矢量数据处理指令而执行时间独立的数据处理操作序列。这样的矢量数据处理系统的一个实例是英国剑桥的ARM有限公司设计的VFP(矢量浮点)协处理器。这种矢量协处理器通过对将对其执行操作的第一选择的一个寄存器集合利用单个矢量指令,执行那个操作,选择下一寄存器集合,再次执行该手术等等而操作。TVFP处理器配置了供这些操作使用的它自己的寄存器数据存储器。寄存器数据存储器能够被分成短的寄存器,各个短寄存器保持短的单精度浮点值,或者寄存器数据存储器能够被分成较少数量的长的寄存器,各个长寄存器保持长的双精度值。指令允许对单精度值或双精度值独立操作。
发明内容
根据本发明的一方面,提供用于处理数据的设备,所述设备包括:
寄存器数据存储器,可操作上用于存储多个数据单元;以及
处理逻辑,响应于数据处理指令来对作为所述寄存器数据存储器的一个寄存器访问的所选择的多个数据单元并行地执行数据处理操作;其中
所述选择的多个数据单元中的数据单元,共享多个不同的数据单元大小之一,所述寄存器具有多个不同的寄存器大小之一,并且所述数据处理指令为所述数据处理操作指定由所述选择的多个数据单元共享的数据单元大小以及所述寄存器的寄存器大小;并且还包括:
寄存器访问逻辑,可操作上用于根据所述寄存器的所述寄存器大小,将所述寄存器映射到所述寄存器数据存储器的一部分,使得存储在所述寄存器数据存储器的所述部分中的数据单元可作为具有不同寄存器大小的各自不同的寄存器的一部分进行访问。
本发明认识到,如果允许指令指定数据单元大小和寄存器大小,并且提供寄存器访问逻辑来将特定寄存器根据寄存器大小映射到寄存器数据存储器的一部分,则存储在寄存器数据存储器中的SIMD数据单元能够更灵活地进行访问,并且相应地减少了对专用数据单元重新排列操作的需要。因此,各个数据单元可以写入到寄存器数据存储器内的一个特定点,作为具有特定寄存器大小的一个寄存器的部分内容,但是,之后从与具有不同寄存器大小以及可能的不同数据单元大小的不同寄存器的一部分相同的位置读出。不同大小的寄存器有效地彼此混叠,其方式有利地允许高度灵活地访问数据单元,而不会导致在重新排列那些数据单元时的开销。
应该理解,数据处理指令可指定一个或多个源寄存器和/或一个或多个目的寄存器。这些不同的源寄存器和目的寄存器的寄存器大小和数据单元大小可以由数据处理指令独立地指定。或者,可以通过要求在寄存器大小和单元大小之间的特定关系来保存指令编码空间。这些关系可以在那些常见处实现,以便不过度减少灵活性。
本技术特别有利的应用是目的数据单元大小不同于一个或多个源数据单元大小的情况。这种情况在SIMD处理操作中普遍存在,由此数据宽度由于例如将2个n位数乘在一起得到2n位结果的处理操作而增加。本技术提供的寄存器访问的灵活性允许数据单元大小和寄存器大小的这种差异用单个指令调整,并且获得完全的结果。
混叠技术的有用性的其它普遍实例是在作为两个分开寄存器的一部分写入寄存器存储器的数据单元能够同时从寄存器数据存储器作为单个不同寄存器的一部分而读出。相反,作为单个寄存器的一部分向寄存器数据存储器写入的数据单元能够独立地从寄存器数据存储器作为另外两个不同寄存器的一部分读出。这种类型的行为能够由软件编写者以及软件编译者开发,以提供高代码密度和快速执行,因为它帮助避免了对寄存器数据存储器内数据重排的需要。
源寄存器大小和目的寄存器大小之间特别有用的关系为,它们全部相等、源寄存器大小是目的寄存器大小的一半、以及源寄存器大小是目的寄存器大小的两倍。这些关系能够有效地在指令中进行编码,并且有利地在实际生活编程中普遍和有用。可以有一个或两个源寄存器。
优选实施例利用一组寄存器指定字段,这些字段受数据处理指令中可用位空间的约束,并且根据寄存器大小和数据单元大小映射到寄存器数据存储器的不同部分。有利地,这些不同部分配置为寄存器数据存储器内的相连部分。因此,固定数量的小数据单元将在寄存器数据存储器的一个相连部分中全部存储在一起,而寄存器数据存储器的其余部分对于该寄存器大小和该数据单元大小的寄存器是不可访问的。相反,相同的寄存器说明符在用大的寄存器大小和数据单元大小值限定时,将遍布在更大量的寄存器数据存储器上。这种类型的映射还允许不同实施例的灵活性,以在它们的寄存器数据存储器中提供不同量的存储容量,并且还允许这由具有基本相同形式的数据处理指令寻址,并且支持为较小的寄存器数据存储器编写的传统代码。此外,寄存器说明符消耗的指令位空间保持恒定。
在优选实施例中,所述数据处理指令包括对所述寄存器的寄存器号进行编码的多个位,所述多个位可映射到相连字段的位,所述相连字段的位可根据所述寄存器大小旋转多个位位置,以形成所述寄存器号。这种编码有利地允许对寄存器字段更简单以及更快的解码,而不考虑寄存器大小的变化。
根据本发明的另一方面,提供一种处理数据的方法,所述方法包括如下步骤:
在寄存器数据存储器中存储多个数据单元;以及
响应于数据处理指令,对作为所述寄存器数据存储器的一个寄存器访问的所选择的多个数据单元并行地执行数据处理操作;
所述选择的多个数据单元中的数据单元共享多个不同的数据单元大小之一,所述寄存器具有多个不同的寄存器大小之一,并且所述数据处理指令为所述数据处理操作指定由所述选择的多个数据单元共享的数据单元大小以及所述寄存器的寄存器大小;并且还包括:
根据所述寄存器的所述寄存器大小,将所述寄存器映射到所述寄存器数据存储器的一部分,使得存储在所述寄存器数据存储器的所述部分中的数据单元可作为具有不同寄存器大小的各自不同的寄存器的一部分进行访问。
本发明还在一个补充方面将计算机程序产品的形式考虑进去,它包括计算机程序,所述计算机程序包括数据处理指令,所述指令用于访问根据以上技术的寄存器数据存储器。
附图说明
现将只以举例的方式参照附图说明实施例,在附图中:
图1示意地图解说明一个集成电路,它既支持传统的标量数据处理又支持SIMD数据处理;
图2示意地图解说明SIMD寄存器数据存储器的读出和写入端口配置;
图3示意地图解说明实例SIMD读出和写入操作,其中目的寄存器是源寄存器宽度的两倍;
图4表示用于不同数据处理操作的源寄存器大小和目的寄存器大小之间不同类型的关系;
图5示意图解说明可用来根据本技术定义数据处理指令的语法;
图6示意地图解说明看做64位寄存器和128位寄存器的SIMD寄存器数据存储器;
图7示意地图解说明64位和128位寄存器之间的重叠(″混叠″);
图8示意地图解说明存储在不同大小的SIMD寄存器内的多个数据单元;
图9示意地图解说明引用SIMD矢量寄存器中的标量值;
图10示意地图解说明数据处理指令,其中处理通道的数目和数据单元大小保持恒定;
图11A和11B示意地图解说明数据处理指令,其中处理通道的数目保持恒定而数据单元大小发生变化;
图12图解说明SIMD寄存器数据存储器和标量寄存器数据存储器之间的数据转移;
图13、14和15示意地图解说明各种寄存器转移指令的操作;
图16是图解说明其中也许有效地使用图14和15中图解说明的类型的寄存器转移指令的情况的实例流程图;
图17是示意地图解说明按照一个实施例数据单元如何从连续的存储器块装入某些指定寄存器的示意图;
图18示意地图解说明按照实施例可能存在于存储器内的不同结构的某些实例;
图19A至19C图解说明按照一个实施例单一存储指令的特定实例的操作;
图20A至20C图解说明按照一个实施例单一装入指令的特定实例的操作;
图21A至21C图解说明按照一个实施例单一装入指令的另一个特定实例的操作;
图22A至22C图解说明按照一个实施例单一装入指令的再一个特定实例的操作;
图23是更详细图解说明图1的重排序逻辑内设置的逻辑的块图;
图24-26图解说明按照实施例用于单一访问指令的四个不同序列的通过重排序逻辑的数据流程;
图27图解说明已知的折叠操作;
图28图解说明一个实施例的折叠操作;
图29图解说明另一个实施例的折叠操作;
图30a至30d图解说明各种折叠指令的操作;
图31示意地图解说明设置成执行设置在图1的SIMD处理逻辑内的折叠操作的逻辑;
图32图解说明矢量-标量(vector-by-scalar)指令的操作;
图33图解说明图1的SIMD寄存器文件中标量操作数的配置;
图34示意地图解说明设置成执行设置在图1的SIMD处理逻辑内的矢量-标量操作的逻辑;
图35表示按照先有技术的右移和堆高的方法;
图36示意地表示按照本技术的一个实施例的右移和变窄操作;
图37示意地表示按照本技术的左移和变窄;
图38示意地表示按照本技术的实施例的向上变换和左移;
图39示意地表示数据单元移位不同的量;
图40示意地表示传统的多路复用器;
图41示意地表示其中按位选择源值a或b的实施例;
图42示意地表示其中在数据单元的基础上选择源值a或b的替代实施例;
图43示意地表示与本技术提供的3个多路复用指令对应的多路复用器配置的3个实例;;
图44示意地图解说明取决于字节顺序模式以不同布局存储多个数据单元的SIMD寄存器;
图45示意地图解说明按照第一实例的存储器访问逻辑和数据单元重排序逻辑的操作;
图46示意地图解说明按照第二实例的存储器访问逻辑和数据单元重排序逻辑的操作;
图47示意地更详细地图解说明图45和46的数据单元重排序逻辑的示范实施例;
图48示意地图解说明包括用作表寄存器、结果寄存器和索引寄存器的两个寄存器的寄存器数据存储器;
图49示意地图解说明查表扩展指令的操作;
图50示意地图解说明另一查表扩展指令重新使用的索引寄存器内的索引值以前对索引寄存器执行的处理;
图51示意地图解说明查表指令的操作,其中零值写入到结果寄存器中与超位索引值对应的位置上;
图52图解说明按照一个实施例图1的LSU如何与存储器系统和存储器管理单元连接;
图53A至53D是示意地图解说明按照一个实施例要访问的数据块的不同实例的简图;
图54A和54B是示意地图解说明按照一个实施例要访问的数据块的其它实例的简图;
图55A至55C示意地分别图解说明交织操作、去交织操作和转置操作;
图56A和56B示意地图解说明按照一个实施例如何执行交织和转置操作;
图57A至57C图解说明按照一个实施例的指令序列如何可以用来将图像像素阵列转置;
图58图解说明一个实施例的指令如何可以用来交织复数的实部和虚部;
图59A和59B图解说明按照一个实施例的两个指令的序列如何可以用来并行地执行两个复数的乘法;
图60示意地表示加返回高半部运算及其关联的指令;
图61示意地表示利用四舍五入的加返回高半部运算及其关联的指令;
图62示意地表示减返回高半部运算及其关联的指令;
图63表示从指令产生的可能常数表,所述常数表具有数据部分、abcdefgh和与其相关联的控制部分;
图64表示常数产生逻辑;
图65表示具有常数产生逻辑的数据处理器;
图66A和66B示意地表示响应具有产生的常数的两种类型指令的数据处理器;以及
图67表示按照本技术的位屏蔽的产生。
具体实施方式
图1示意地图解说明数据处理系统(集成电路)2,它结合了标量数据处理功能和SIMD数据处理功能。可以把标量数据处理部分看作是标准ARM处理器核,ARM处理器核包括标量寄存器数据存储器4、乘法器6、位移器8、加法器10、指令流水线12和标量解码器14以及许多其它电路元件(为清晰起见,图中未示出)。工作时,这样的标量处理器核在标量寄存器数据存储器4内存储固定长度的32位数据值,并在沿着指令流水线12传送并提供给标量解码器14的数据处理指令的控制下利用乘法器6、位移器8和加法器10处理该固定长度的32位数据值。标量解码器14产生控制信号,该控制信号以传统方法控制标量处理单元的操作。
如在图1中图解说明的,集成电路2包括各种专用SIMD处理单元,包括SIMD寄存器数据存储器20、专用SIMD处理逻辑18和重排序逻辑24。装入存储单元22与标量部分共享,并且可以是标量处理器内传统上找到的装入存储单元的相同或修改版本。
利用附加的流水线级来扩展指令流水线12,该附加流水线级用来经由专用SIMD解码器16控制SIMD处理操作。(应该理解,在其它实施例中,可以与标量流水线并行设置SIMD流水线)。SIMD解码器16产生SIMD控制信号,其控制SIMD处理单元的操作,诸如读出SIMD寄存器、写入SIMD寄存器和配置SIMD处理逻辑,以便执行所需数据处理操作。SIMD流水线级跟在标量级后面,使得处理器的SIMD部分有效地看到对标量部分的不同执行点。这可以造成某些联锁的必要性,如下面将要讨论的。
重排序逻辑24服务于以下目的:把从耦合到集成电路2的存储器(未示出)检索到的数据单元重排序成更适于所需的SIMD处理操作的顺序。重排序逻辑24,它的操作和优点将在下面进一步讨论。在装入存储单元22和重排序逻辑24之间还设置了装入和存储FIFO23和23′。
在此实例中可以认为标量寄存器数据存储器4分为固定数目的固定长度的寄存器,诸如传统的16个32位ARM寄存器。反之,SIMD寄存器数据存储器20提供存储块,可以根据与所涉及的SIMD数据处理指令相关联的参数,以灵活的方式对它们进行寻址/访问。更具体地说,SIMD数据处理指令指定源和目的寄存器的数目、数据单元大小和与所述数据处理指令相关联的寄存器大小。这些参数由SIMD解码器16和寄存器数据存储器20的读出/写入端口组合在一起,以便控制不同部分和相应存储在SIMD寄存器数据存储器20内的数据单元到所访问的寄存器的映射。因而,可以有效地把不同大小的SIMD寄存器、不同数据单元大小等共同混叠在一起(即,可以认为这些寄存器是重叠的,并且在需要时可以通过不同寄存器说明符、寄存器大小和数据单元大小组合进行访问。在此实例实施例中,可以认为SIMD解码器16和读出/写入端口提供寄存器访问逻辑)。
图2示意地图解说明可以为SIMD寄存器数据存储器20设置的读出和写入端口配置。在此实例中,32个SIMD寄存器能够由SIMD数据处理指令内的寄存器指定字段(5位)指定。N个读出端口与SIMD寄存器数据存储器20相关联。所支持的最小粒度是64位寄存器值。在此实例中,直接支持的寄存器大小是64位和128位。本领域的技术人员不难理解,可以将这种配置按比例缩放,以便直接支持256位和更高的寄存器大小,或通过利用所支持的指令将大小较小的寄存器合成来间接地支持更高的寄存器大小。图2示意地图解说明M个多路分解器用作SIMD寄存器数据存储器20的写入端口。应该理解,在实践中,这样的多路分解器是以到SIMD寄存器数据存储器内的存储器单元行的适当定向的使能信号以及多路复用器的把所需的输入路由到它们的目的的操作的形式来提供的。
图3图解说明特定的实例,其中每一个包含多个数据单元的两个64位SIMD寄存器值(表示为D双字长)相乘,以便产生多个输出数据单元,多个输出数据单元一起存储在128位寄存器(标示为Q四倍长字)中。各单独的读出端口设置成从SIMD寄存器数据存储器20读出源SIMD寄存器值D1和D2。两个写入端口共同操作,以便分别允许把128位结果的第一Q[63:0]部分和第二Q[127:64]部分返回写入到SIMD寄存器存储器20。应该理解,D寄存器和Q寄存器内的数据单元大小可以改变。作为实例,每一个源D寄存器内可以包含四个16位数据单元,而目的Q寄存器包含一组作为乘法的结果的相应的四个32位数据单元。在此实例中,将会看出,并行处理的通道的数目(4个)如何保持恒定,同时数据单元大小按照执行的乘法操作的需要从16位增加至32位。
图4图解说明可以支持的源寄存器大小和目的寄存器大小之间的不同类型的关系。在最上面的实例中假定并行处理通道的数目保持恒定,而且数据单元大小保持恒定。在第二和第四实例中,并行处理的通道数目保持恒定,但在源和目的之间的数据单元大小发生变化。在第三实例中,两个源单元具有不同的数据单元大小。如下面将进一步描述的,SIMD处理结构和本系统的技术支持这些不同类型的数据处理指令。最后3个实例是单一输入变量的一元运算。第五实例保持相同的数据单元大小。第六实例使数据单元大小加倍,而第七实例使数据单元的大小缩小一倍。
图5示意地图解说明SIMD数据处理指令的语法。语法的第一部分指定所涉及的SIMD运算符,在这种情况下是乘法运算。其后跟着指示输出数据单元大小和输出数据单元其它特性的字段。在此实例中,输出数据单元长度是16位,而且是带符号的整数。下一个字段指示输入数据单元的大小和特性,在这种情况下,是带符号的8位整数。下一个字段指示目的寄存器大小和寄存器说明符。在此实例中,具有寄存器说明符12的128位四字SIMD寄存器将用作SIMD目的寄存器。两个源SIMD寄存器各自是具有寄存器说明符(分别是″1″和″4″)的双字64位寄存器。下面描述语法的其它信息。
定义一组数据类型来代表不同数据格式。这在表0中描述。大部分指令使用至少一个数据类型限定符来确定精确的操作。但是,操作不一定支持所有数据类型。数据类型用作字段的后缀,指示数据单元大小和特性。
数据类型限定符 | 说明 |
.<size> | <size>位的任何单元 |
.I<size> | <size>位的带符号或不带符号的模整数 |
.F<size> | <size>位的浮点数 |
.P<size> | 小于<size>的{0,1}度多项式 |
.S<size> | <size>位的带符号的整数 |
.U<size> | <size>位的不带符号的整数 |
表0
图6图解说明如何可以把SIMD寄存器数据存储器20看作分为32个64位寄存器或16个128位寄存器。这些寄存器映射到相同的物理SIMD寄存器数据存储器20,并相应地混叠在一起。作为实例,寄存器D0内的数据单元也可以作为寄存器Q0内的数据单元访问。
图7进一步示意地图解说明64位和128位寄存器之间的重叠。如图解说明的,128位寄存器Q(n)对应于两个64位寄存器D(2n+1)和D(2n)。
图8示意地图解说明可以存储在不同大小的SIMD寄存器内的范例数据单元。在图8的上部,以包含四个32位数据单元或者包含八个16位数据单元的形式,图解说明128位SIMD寄存器。数据单元根据需要可以是带符号的或不带符号的整数、浮点数或其它格式的数,并适于要执行的并行处理。
图8的下部图解说明64位SIMD寄存器,它可以包含两个带符号的32位整数或者包含四个不带符号的16位整数。可以有许多其它可能性,而且对本领域技术人员将是显而易见的。
图9示意地图解说明可以如何引用SIMD寄存器内的各个标量值。图解说明的SIMD寄存器26包含四个带符号的整数值。若把此SIMD寄存器看作寄存器Dn,则不同的各个带符号的整数值可以标示为Dn[3]至Dn[0]。例如,当执行选择SIMD寄存器内数据单元之一并将其移到标量寄存器数据存储器4内的寄存器之一或从其中移出的寄存器转移指令时,采取这种引用SIMD寄存器内的各个数据单元的方式。
图10图解说明如何可以在两个源寄存器和目的寄存器之间在处理通道的数目保持恒定并且数据单元大小保持恒定的情况下执行SIMD数据处理指令。在此实例中,源SIMD寄存器是具有四个并行处理通道的D寄存器(64位并且包含四个16位数据单元)。目的SIMD寄存器也是64位D寄存器,包含四个结果16位数据单元值。
与图10形成对照,图11A图解说明其中目的SIMD寄存器宽度是源SIMD寄存器的两倍的实例。处理通道的数目保持恒定,但数据单元大小加倍。此类型的行为适合用于诸如乘法、加法、减法和移位(特别是左移)的SIMD操作。图11B图解说明其中目的SIMD寄存器的宽度是源SIMD寄存器的一半的实例。此类型的指令对加法和移位(特别是右移)是有用的。
在源和目的之间改变数据单元大小而同时维持处理通道的数目的能力,允许在不要求作为所执行的数据处理操作产生的数据单元大小变化的结果而将数据单元重排序或将指令对折的情况下,构建SIMD数据处理指令序列。这在处理速度、代码密度、功率消耗等等方面是重要的有点。
图12示意地图解说明通过寄存器转移逻辑28耦合在一起的标量寄存器数据存储器4和SIMD寄存器数据存储器20。从标量解码器14或SIMD解码器16之一或两个接收的控制信号响应指令流水线12内的寄存器转移指令而控制寄存器转移逻辑28,以便在标量寄存器数据存储器4内的指定寄存器和SIMD寄存器数据存储器20的指定寄存器内的指定位置之间移动数据。从标量寄存器向SIMD寄存器移动的数据值也可以拷贝到SIMD寄存器内的所有位置上,如在图13中图解说明的。此类型的利用复制的寄存器转移指令非常适于利用需要由SIMD处理逻辑18应用于SIMD寄存器内不同的其它操作数的值,比如缩放比例值,快速填充SIMD寄存器中的所有处理通道。
图14图解说明不同类型的寄存器转移指令。在此实例中,32位标量值A移动到SIMD寄存器内的指定位置(通道)。其它通道维持它们原来的值。标量值不复制到整个标量寄存器中。目的标量寄存器内的位置可以通过寄存器转移指令内的适当字段值改变。此类型的操作允许利用从标量寄存器数据存储器得到的数据值填充SIMD寄存器中的各个数据单元。
图15图解说明寄存器转移指令的另一种类型。在此实例中,来自SIMD寄存器内的16位数据单元被从SIMD寄存器内的指定可变位置取出,并拷贝到标量寄存器之一。因为标量寄存器是32位寄存器,所以数据单元在此实例中进行符号扩展。数据单元可以代之以被零扩展,取决于特定算法或系统的要求。
图16是示意地图解说明一个实例类型的处理的流程图,其中可以有利地使用图14和图15的寄存器转移指令。在步骤30,并行地对多个通道执行某个SIMD处理,其中每个通道都包含它们自己的数据单元。有时,该处理要求执行SIMD处理逻辑18不支持的、或只能效率不高地支持的数据处理。在这种情况下,为了允许执行这种复杂的数据操作,希望单独地将各个数据单元在标量处理系统中移动。步骤32选择第一个要这样移动的数据单元。然后,步骤34执行寄存器转移指令,诸如在图15中图解说明的。步骤36对现在处于系统标量部分中的各个数据单元执行所需的复杂处理。当复杂的处理已经完成时,步骤38执行寄存器转移指令,诸如在图14中图解说明的,以便将现在修改的数据单元送回它原来的位置。步骤40判断是否已经达到最后一个数据单元,若非如此,则在处理回到步骤34以前的步骤42选择下一个数据单元。若要求对其执行复杂操作的全部数据单元都已经在标量系统移动、对其进行所需处理并将其移回到SIMD系统,则处理过程从步骤40进到步骤44,在这里继续进行并行的SIMD处理。
为访问寄存器数据存储器而指定SIMD寄存器的数据处理指令包括一个或多个寄存器字段,一个或多个寄存器字段把待访问的寄存器的寄存器号编码。所用的5位寄存器说明符设计成与ARM矢量浮点(VFP)单元使用的相同,也就是说,指定寄存器的指令位是:
*对于目的寄存器:
D=bit[22]
Rd=bits[15:12]
*对于第一源寄存器说明符:
N=bit[7]
Rn=bits[19:16]
*对于第二源寄存器说明符:
m=bit[5]
Rm=bits[3:0]
另外,这样选择这些位的使用,以便分别以与VFP指定双精度和单精度寄存器的方式一致地对Di寄存器和字标量进行编码,并且对Qi寄存器和半字标量的编码遵循相同的原则。以下描述如何使用(D,Rd);(N,Rn)和(M,Rm)用法类似:
Qd:Qi寄存器号是(D,Rd[3],Rd[2],Rd[1])
相应的Di寄存器号是(D,Rd[3],Rd[2],Rd[1],0)和(D,Rd[3],Rd[2],Rd[1],1)
Rd[0]应为零
Dd:Di寄存器号是(D,Rd[3],Rd[2],Rd[1],Rd[0])
字标量:
Di寄存器号是(0,Rd[3],Rd[2],Rd[1],Rd[0])
字[D]按小尾模式(little-endian)选自寄存器。
半字标量:
Di寄存器号是(0,0,Rd[2],Rd[1],Rd[0])
半字[(D,Rd[3])]按小尾模式选自寄存器。
字节标量:
Di寄存器号是(0,0,0,Rd[1],Rd[0])
字节[(D,Rd[3],Rd[2])]按小尾模式选自寄存器。
因此,可以认为位D、Rd[3]、Rd[2]、Rd[1]和Rd[0]可映射到5位相连字段,这5位相连字段可以旋转若干位的位置,取决于寄存器号的寄存器大小。在实践中,不是作为单独操作来映射或旋转寄存器编码位,而是提供给寄存器访问逻辑,以利用根据寄存器大小施加的可移动掩码来形成用于访问寄存器数据存储器的行地址和列地址,以选择正确的位部分用作行和部分列地址。
按照实施例,为在SIMD寄存器文件20(见图1)和存储器之间移动数据而提供装入和存储指令。装入指令可以用来把数据单元从存储器装入指定的寄存器,而存储指令用来把数据单元从指定的寄存器存储到存储器。这些装入和存储指令用来支持利用SIMD处理逻辑18的算法所需的数据的移动。实施例的装入和存储指令指定所装入和存储的数据单元的大小,而此信息用来提供寄存器内的一致排序,而与存储系统的字节顺序(endianness)无关。
这些实施例的装入和存储指令允许若干数据单元从连续的存储器块装入SIMD寄存器文件20,或从SIMD寄存器文件20存储到存储器。按照一个实施例,访问可以任何字节对齐方式执行,而且装入或存储多达32字节。
一些实施例的装入和存储指令被认为是访问来自存储器的数据,其中数据单元排列成结构,而且每一个结构具有若干分量。按照一个实施例,存储器中的结构可包含一个和四个分量之间,其中一个分量可以具有SIMD处理逻辑18所识别的任何数据类型大小,在优选实施例中,这些数据类型大小是8、16、32或64位。实施例中使用的结构格式的某些公用实例列于下表:
格式 | 说明 |
(a) | 单一分量 |
(x,y) | 2维位置坐标 |
(实部,虚部) | 复数 |
(x,y,z) | 3维矢量 |
(r,g,b) | 像素 |
(x,y,z,w) | 4维矢量 |
表1
对于任何特定的装入或存储指令,作为访问对象的存储器中的每一个结构都将具有相同的结构格式,相应地将包括相同数目的分量。装入和存储指令设置成识别结构格式中分量的数目,而信息由重排序逻辑24使用,以便当执行装入操作时,提供数据单元的去交织,而当执行存储操作时,提供数据单元的交织,允许在寄存器中这样设置数据,使得结构的不同数据单元出现在不同寄存器。在图17中针对装入指令用来从连续的存储器块把若干数据单元装入3个指定的寄存器的情况,示意地图解说明了此概念。在此实例中,指定的寄存器是3个64位寄存器D0 220、D1 225和D2 230。在此实例中,结构格式是3D矢量格式,相应地存储器200中的每一个结构210具有3个分量215。
如图1所示,把装入指令从指令流水线12路由到标量解码器14,产生适当的存储器访问控制信号,送往装入存储单元(LSU)22。然后,LSU从连续的存储器块访问所需的四个结构A[0]、A[1]、A[2]和A[3]。相应地,LSU 22可以其正常方式运行。此后,通过重排序逻辑24来路由数据,重排序逻辑24设置成将每一个结构中的3个分量去交织,使得属于X分量的数据单元被路由到寄存器D0 220,属于Y的数据单元被路由到寄存器D1 225,而属于分量Z的单元被路由到寄存器D2 230。
以装入操作的一部分形式从结构的阵列装入并把信息分解到各单独的寄存器的能力可用来允许数据立即准备用于有效的SIMD处理。
重排序逻辑24还设置成:当把数据从指定的寄存器返回存储到连续的存储器块时,执行类似的处理,在此实例中,重排序逻辑24执行交织操作,以便在把数据存入存储器之前再现该结构格式。
如从图1可以看到的,在那些装入指令达到指令流水线12的SIMD各级之前,这些指令从指令流水线被路由到标量解码器14。这使得与在其它情况下可能达到的相比,能够较早出现把数据装入SIMD寄存器文件20的过程,并具有如下好处:随后的SIMD处理指令在它开始执行以前一般不必等待数据装入,由此显著地缩短装入操作的传输延迟时间。但是,存储指令将需要通过指令流水线,直到它们可以被路由到SIMD解码器16为止,由此可以用适当的控制信号来控制对来自SIMD寄存器文件20的数据的访问,并在数据通过LSU 22被返回存储到存储器之前,在重排序逻辑24内适当地重排序。但是,可以执行存储指令的某些部分,同时在指令流水线12的ARM部分中例如检查地址、存储器访问许可等,以便保证指令不会导致数据中断。
可以把这些实施例的装入和存储指令看作遵循单一语法。该语法可以表达如下:
V(LD|ST)<st>.<dt>{@<a>}<reglist>,{<n>,}<addr>
其中
<st>结构格式把存储器中的数据单元看作具有<st>个分量的结构阵列。该信息用来使数据单元在它们在存储器和SIMD寄存器存储器之间移动时进行交织和去交织,以便允许进行有效的SIMD处理。 |
<dt>数据类型这确定要装入的数据单元大小 |
<a>对齐说明符(可选的) |
<reglist>SIMD寄存器列表这确定将写入或从中读出的SIMD寄存器状态。对于装入,这就是SIMD寄存器文件将受指令影响的部分。把寄存器列表看作大小为<dt>的数据单元集合,拆分为<st>个等长的矢量。注意,寄存器列表内的字节数不一定与所访问存储器的字节数相同。见<n>个选项和图20A至20C。 |
<n>结构数(可选的)这定义要装入或存储的结构的数目。这允许寄存器列表只是部分地装入存储器数据,而剩余部分被清零。当不提供时,取默认值,这意味着寄存器列表和存储器访问大小是相同的。默认<n>:=单元<dt>(<reglist>)/<st> |
<addr>用于访问的寻址方式 |
按照实施例,寻址方式可以采取各种各样的形式,具体地说3种形式说明如下:
;//<addr>
[Rn];//address:=Rn
[Rn]!;//address:=Rn,Rn:=Rn+transfer_size(其中″transfer_size″是所访问的存储器数量)
[Rn],Rm;//address:=Rn,Rn:=Rn+Rm
上面讨论的语义允许装入或存储单个结构或多个结构,把逻辑零写入寄存器中没有被来自存储器的数据填充的剩余部分,并利用包含标量限定符(例如D0[1])的寄存器列表来插入到寄存器中。应该理解,在实施例中,所提供的实际装入和存储指令一般是上述语法所有可能的组合的子集。
在结构格式方面,图18图解说明了三个可能的结构格式实例,以及它们的对应“st”值。如可以从图18中看到的,第一结构250只有单个分量,并相应地st值为1。在第二个实例中,结构255具有2个分量,例如,代表复数的实部x和虚部y,而相应地st值为2。最后,在第三个实例中,结构260具有3个分量,代表R、G和B数据单元,相应地st值为3。
为了帮助说明利用实施例的装入和存储指令时可用的某些功能,图19-22图解说明装入和存储指令的具体实例。首先考虑图19A-19C,图19A图解说明由存储指令指定的寄存器列表状态:
VST 2.16{D0,D1,D2,D3},[r1]
该指令用来把多个结构从指定的寄存器文件存储到连续的存储器块。如可以看出的,图19A识别包括4个指定的寄存器D0 270、D1280、D2 290、D3 300的寄存器。如图19B所示,可以认为这些寄存器被分为具有“dt”大小(即16位)数据单元的“st”(即2)个矢量。在寄存器D0中,这些数据单元用数字275标记,在D1中用数字285标记,在D2中用数字295标记,在D3中用数字305标记。如图19C所示,重排序逻辑24设置成交织来自这两个矢量的数据单元,使得每一个数据单元314按结构312所需的结构格式存储在存储器310中。
图20A至20C是一组相似简图,说明了指令所执行的操作:
VLD2.16{D0,D1},#1,[r1]
图20A图解说明标识寄存器D0 270和D1 280的寄存器列表状态的集合。然后,图20B图解说明这些寄存器如何被分为dt大小的(即16位)数据单元的st(即2)个矢量。
与图19A至19C的实例形成对照,指令指定″n″个参数,标识要访问的结构的数目,在此实例中,n是1。相应地,对于装入指令,需要在有效地址开始从存储器读出n×st(即1×2)个数据单元,然后从第一矢量的最低索引单元开始将其以循环分配方式分布在各矢量中。该处理在图20C中图解说明,并产生写入寄存器D0的最低16位的第一分量314的数据单元x0,同时第二分量的数据单元y0写入寄存器D1的最低16位。按照该实施例,一旦全部数据单元都已经装入,则寄存器状态没有写入的任何部分都设为零。应该指出,对于等效的存储指令,n×st个数据单元以与装入相反的方式存储。
图21A至21C图解说明另一个特定实例,其中用于指令的语法扩展到允许指定两个数据类型,即,要访问的数据单元用的数据类型和要装入这些寄存器或存储到存储器的结果数据单元用的数据类型。相应地,图21A至21C图解说明指令所执行的操作:
VLD 2.32.S16{D0,D1,D2,D3},[r1]
如图21A所示,收集寄存器列表状态,识别寄存器D0 270、D1280、D2 290和D3 300。然后,如图21B所示,把该寄存器状态分为dt大小(即32位)数据单元的st(即2)个矢量,因为此指令指定:到数据单元被存入寄存器时它们的长度将是32位。
如指令还指定的,存储器中的数据单元是16位长,因此相应地,一旦从存储器310访问数据单元,它们就将通过用来扩展16位数据单元中的每一个的某个变换逻辑340(其任选地可以作为重排序逻辑24的一部分被引入)来形成新的32位数据单元342。将这些数据单元去交织,使得第一分量的数据单元存储在寄存器D0和D1内,而第二分量的数据单元存储在寄存器D2和D3内。
图22A至22C图解说明另一个实例,并具体地图解说明指令的操作。
VLD2.16{D0[2],D1[2]},[r1]
尽管指令可与以前的指令共享相同的语法,但指令在概念上是不同类型的指令,因为它不是从连续的存储器块装入数据单元,在连续的存储器块中,数据单元是以结构阵列的形式存储的,装入指令只装入单个结构。另外,装入的单个结构的数据单元可以放入指定寄存器内的任何选择的处理通道。因而,当考虑64位宽的寄存器和16位数据单元时,存在四个可能的处理通道,可以把数据单元放入四个可能的处理通道内。在优选实施例中,在寄存器列表数据中通过标识特定通道来指示选择的用于特定指令的通道。
考虑图22A,可以看出,当收集寄存器列表状态时,它标识寄存器D0的通道2 320和寄存器D1的通道2 325。如图22B所示,然后它们分为dt大小(即16位)数据单元的st(即2)个矢量。此后,如图22C所示,一旦已经从存储器310访问结构312,重排序逻辑24配置成把数据单元x0送至D0寄存器330的通道2,而把数据单元y0送至D1寄存器335的通道2。在此实例中,应该理解,可以在从0至3的范围内标识这些通道。
对于有兴趣的读者,下表标识了可以在一个特定实施例中提供的各种不同类型的装入和存储指令:
助记符 | 数据类型 | 操作数格式 | 说明 |
VLD1 | .8.16.32.64 | <list>,<addr><list>:={Dn}|{Dn,Dn+1}|{Dn,Dn+1,Dn+2}|{Dn,Dn+1,Dn+2,Dn+3} | 装入多个单元 |
VLD1 | .8.16.32 | <list>,#UIMM,<addr><list>:={Dn}|{Dn,Dn+1} | 装入多个单元和零UIMM_1reg=(1)..(a-1)UIMM_2reg=(a+1)..(b-1)其中a=(64/size<dt>)b=(128/size<dt>) |
VLD1 | .8.16.32 | Dd[x],<addr> | 装入单个单元 |
VST1 | .8.16.32.64 | <list>,<addr><list>:={Dn}|{Dn,Dn+1}|{Dn,Dn+1,Dn+2}|{Dn,Dn+1,Dn+2,Dn+3} | 存储多个单元 |
VST1 | .8.16 | <list>,#UIMM,<addr> | 存储多个单元UIMM_1reg=(2)..(a-1)UIMM_2reg=(a+1)..(b-1) |
.32 | <list>:={Dn}|{Dn,Dn+1} | 其中a=(64/size<dt>)b=(128/size<dt>) | |
VST1 | .8.16.32 | Dd[x],<addr> | 存储单个单元 |
VST1 | |||
实例 | |||
VLD1.16VLD1.8VLD1.8VLD1.16VST1.32VST1.32VST1.8 | D0,[R1]{D0,D1},[R2]!Q2,#10,[R2],R7D20[3],[R8],R1{D8,D9,D10,D11},[R0]!Q7,#3,[R10]D30[0],[R0],R14 |
表2
助记符 | 数据类型 | 操作数格式 | 说明 |
VLD2 | .8.16.32 | <list>,<addr><list>:={Dn,Dn+1}|{Dn,Dn+2}|{Dn,Dn+1,Dn+2,Dn+3} | 装入多个2单元结构 |
VLD2 | .8.16.32 | <list>,#1,<addr><list>:={Dn,Dn+1}|{Dn,Dn+2} | 装入单个2单元结构和零 |
VLD2 | .8.16.32 | <list>,<addr><list>:={Dn[x],Dn+1[x]}|{Dn[X],Dn+2[X]) | 装入单个2单元结构其中list{Dn[x],Dn+2[x]}不可用当dt=8时 |
VST2 | .8.16.32 | <list>,<addr><list>:={Dn,Dn+1} | 存储多个2单元结构 |
|{Dn,Dn+2}|{Dn,Dn+1,Dn+2,Dn+3} | |||
VST2 | .8.16.32 | <list>,<addr><list>:={Dn[x],Dn+1[x]}|{Dn[x],Dn+2[x]} | 存储单个2单元结构其中list{Dn[x],Dn+2[x]}不可用当dt=8时 |
实例 | |||
VLD2.16VLD2.32VLD2.8VLD2.16VST2.8VST2.32 | {D0,D1},[R1]{D2,D3,D4,D5},[R3]!{D0,D1},#1,[R1],R7{D2[1],D4[1]},[R6]{D20,D21},[R0]{D20[0],D21[0]},[R5],R6 |
表3
助记符 | 数据类型 | 操作数格式 | 说明 |
VLD3 | .8.16.32 | <list>,<addr><list>:={Dn,Dn+1,Dn+2}|{Dn,Dn+2,Dn+4} | 装入多个3单元结构 |
VLD3 | .8.16.32 | <list>,#1,<addr><list>:={Dn,Dn+1,Dn+2}|{Dn,Dn+2,Dn+4} | 装入单个3单元结构和零 |
VLD3 | .8.16.32 | <list>,<addr><list>:={Dn[x],Dn+1[x],Dn+2[x]}|{Dn[x],Dn+2[x],Dn+4[x]} | 装入单个3单元结构其中当dt=8时list{Dn[x],Dn+2[x],Dn+4[x]}不可用 |
VST3 | .8.16.32 | <list>,<addr><list>:={Dn,Dn+1,Dn+2}{Dn,Dn+2,Dn+4} | 存储多个3单元结构 |
VST3 | .8.16.32 | <list>,<addr><list>:= | 存储单个3单元结构其中当dt=8时list{Dn[x],Dn+2[x],Dn+4[x]}不可用 |
{Dn[x],Dn+1[x],Dn+2[x]}|{Dn[x],Dn+2[x],Dn+4[x]} | |
实例 | |
VLD3.8VLD3.16VLD3.16VST3.32VST3.8 | {D0,D1,D2},[R1]!{D2,D3,D4},#1,[R3],R4{D2[1],D3[1],D41]},[R3],R4{D20,D22,D24},[R7]{D0[0],D1[0],D2[0]},[R10],R14 |
表4
助记符 | 数据类型 | 操作数格式 | 说明 |
VLD4 | .8.16.32 | <list>,<addr><list>:={Dn,Dn+1,Dn+2,Dn+3}|{Dn,Dn+2,Dn+4,Dn+6} | 装入多个4单元结构 |
VLD4 | .8.16.32 | <list>,#1,<addr><list>:={Dn,Dn+1,Dn+2,Dn+3}|{Dn,Dn+2,Dn+4,Dn+6} | 装入单个4单元结构和零 |
VLD4 | .8.16.32 | <list>,<addr><list>:={Dn[x],Dn+1[x],Dn+2[x],Dn+3[x]}|{Dn[x],Dn+2[x],Dn+4[x],Dn+6[x]} | 装入单个4单元结构其中当dt=8时list{Dn[x],Dn+2[x],Dn+4[x],Dn+6[x]}不可用 |
VST4 | .8.16.32 | <list>,<addr><list>:={Dn,Dn+1,Dn+2,Dn+3}{Dn,Dn+2,Dn+4,Dn+6} | 存储多个4单元结构 |
VST4 | .8.16.32 | <list>,<addr><list>:={Dn[x],Dn+1[x],Dn+2[x],Dn+3[x]}|{Dn[x],Dn+2[x],Dn+4[x],Dn+6[x]} | 存储单个4单元结构其中当dt=8时list{Dn[x],Dn+2[x],Dn+4[x],Dn+6[x]}不可用 |
实例 |
VLD4.8VLD4.16VLD4.16VST4.32VST4.8 | {D0,D1,D2,D3},[R1]!{D2,D3,D4,D5},#1,[R3]{D2[1],D4[1],D6[1],D8[1]},[R3],R4{D20,D22,D24,D26},[R7]{D20[5],D21[5],D22[5],D23[5]},[R1],R4 |
表5
在一个实施例中,图1的重排序逻辑24采取在图23中图解说明的形式。图23的逻辑在它的输入端包括两个多路复用器350、355,它们在装入指令时配置成从与在图1中图解说明的LSU 22相关联的装入FIFO 23接收数据,或在存储指令时配置成从SIMD寄存器存储器20接收数据。另外,在某些情况下,装入指令还可以使图23的逻辑从SIMD寄存器存储器20接收数据。控制多路复用器350、355以便在不同输入之间进行选择,并把选择的输入路由到相关的输入寄存器360、365。在一个实施例中,每个输入寄存器都能存储64位数据。然后,把存储在输入寄存器的数据通过纵横多路复用器375读入到寄存器高速缓存380,纵横控制寄存器370向纵横多路复用器提供驱动信号,以把从输入寄存器接收的数据的各个字节送往寄存器高速缓存中所需的字节位置。控制寄存器370中的值由指令解码器导出。
如图23所示,可以把寄存器高速缓存380看作为由四个寄存器构成,并且在一个实施例中,每个寄存器的长度是64位。
在已把数据存入寄存器高速缓存380之后,可以通过输出多路复用器385将它读出到与LSU 22(在存储指令时)相关联的存储数据FIFO 23′,或者读出到SIMD寄存器文件20(在装入指令时)。
尽管字节纵横多路复用器375可以字节粒度读出输入寄存器,并以字节粒度写入寄存器高速缓存,但是写入多路复用器385以64位粒度从寄存器高速缓存读出。
重排序逻辑24在很大程度上是自主的,独立于SIMD处理逻辑18的其余部分,但是以与集成电路内其它功能单元相同的方式获得程序指令中的指令。在一个实施例中,它具有两个控制它本身的寄存器文件读出端口和两个写入端口。为了检测出危险并加以避免,重排序逻辑24可配置成利用记分板与某联锁逻辑(未示出)通信。
来自SIMD寄存器文件20的存储指令相对于其它SIMD指令无序执行,但是相对于其它来自SIMD寄存器文件的存储指令仍是按顺序的。未决的存储器保持在一个队列中,并且当存储数据就绪时,它读出并且通过重排序逻辑24传送到与LSU 22相关联的存储FIFO23′中。
在一个实施例中,所有在存储器和SIMD寄存器文件20之间传递的数据都通过重排序逻辑24路由。但是,在一个备选实施例中,可针对确定不必重新排序的情况,设置绕重排序逻辑24的旁路路径。
寄存器高速缓存380称作″高速缓存″,因为在某些情况下,在它们写入SIMD寄存器文件20以前,它高速缓存寄存器值。寄存器高速缓存以数据从重排序逻辑24输出的格式保存数据。
图24A至24C图解说明了重排序逻辑24的操作,以实现执行VLD3.16{D0,D1,D2},[r1]类型的指令时所需的必要重排序。
一旦数据已通过LSU 22装入,便在第一周期(如图24A所示)把检索到的数据的64位通过多路复用器350装入输入寄存器360,而同时通过多路复用器355把下一个64位装入输入寄存器365。在图24A至24C图解说明的实例中,假设结构格式代表具有分量x、y、z的3D矢量。在下一个周期,如图24B所示,把输入寄存器内的16位数据单元通过字节纵横多路复用器375读入寄存器高速缓存380,多路复用器375将数据重排序,使得与x分量有关的任何数据单元都放入寄存器高速缓存的第一寄存器,与y分量有关的任何数据单元都放入第二寄存器,与z分量有关的任何数据单元都放入第三寄存器。另外,在此周期期间,来自装入FIFO 23的下一个64位数据通过多路复用器350装入输入寄存器360。
在下一个周期,如图24C所示,来自输入寄存器360的数据单元通过字节纵横多路复用器路由到寄存器高速缓存,同时把x、y和z分量去交织,如较早讨论的。如图24C所示,这使寄存器高速缓存在第一寄存器包含四个x分量,在第二寄存器包含四个y分量,而在第三寄存器包含四个z分量。然后,可以通过写入多路复用器385把寄存器高速缓存的内容(一次两个寄存器)输出到由装入指令指定的寄存器。
图25A-25D图解说明通过重排序逻辑的数据流程的第二实例,以便执行当执行指令VLD 3.16{D0[1],D1[1],D2[1]},[r1]时所需的必要的重排序。按照该指令,数据要装入寄存器D0、D1和D2的特定通道,就是说,那些寄存器内四个16位宽的通道中第二个16位宽的通道。在数据单元可以存储在特定的寄存器通道以前,需要取出寄存器的当前内容,使得随后写入寄存器时,寄存器的内容作为整体写入。该特征避免提供任何仅仅写入SIMD寄存器文件20中寄存器的一部分的必要性。相应地,在第一周期过程中,如图25A所示,寄存器D0和D1的当前内容通过多路复用器350、355从SIMD寄存器文件读出到输入寄存器360、365。在下一个周期,如图25B所示,这些内容通过纵横多路复用器375读出到寄存器高速缓存380,使D0的内容放入寄存器高速缓存的第一寄存器,而D1的内容放入第二寄存器。在同一周期过程中,寄存器D2的内容通过多路复用器350从SIMD寄存器文件取出,并存储在输入寄存器360。
在下一个周期,如图25C所示,寄存器D2的内容通过纵横多路复用器375读到寄存器高速缓存380,使得它们存储在寄存器高速缓存的第三寄存器。在同一周期过程中,作为装入对象的数据结构一般已经由LSU检索,它从装入FIFO 23通过多路复用器350读出到输入寄存器360。在图25C图解说明的实例中,再一次考虑,存储器中的结构代表具有分量x、y和z的3D矢量数据。在下一个周期,如图25D所示,x、y和z分量通过纵横多路复用器375读出到数据单元的第二通道,使得数据单元x0写入寄存器高速缓存,覆盖寄存器D0第二通道的以前内容,分量y0写入寄存器高速缓存,覆盖寄存器D1第二通道的以前存储的数据单元,而分量z0写入寄存器高速缓存,覆盖寄存器D2第二通道的以前存储的数据单元。
应该理解,此刻,SIMD寄存器文件中的寄存器D0、D1和D2的实际内容尚未改变。但是,存储在寄存器高速缓存中的数据现在可以通过写入多路复用器385返回输出到寄存器D0、D1和D2,以重写以前的内容。结果,可以看出,单个装入指令可以用来把特定结构的分量从存储器装入,然后把该结构的各个分量插入到不同寄存器的所选择的通道位置上。
图25E至25H图解说明通过重排序逻辑的数据流程的第三实例,以便执行当执行与以上参照图25A至25D讨论的装入指令互补的存储指令时所需的必要重排序。相应地,图25E至25H图解说明当执行指令VST 3.16{D0[1],D1[1],D2[1]},[r1]时执行必要的重排序所需的步骤。因而,按照该指令,数据将从寄存器D0、D1和D2的第二个16位宽的通道返回存储到存储器。如图25E所示,在第一周期过程中,寄存器D0和D1的当前内容通过多路复用器350、355从SIMD寄存器文件读出到输入寄存器360、365。在下一个周期,如图25F所示,第二通道中的数据单元,即,值x0和y0,通过纵横多路复用器375读入寄存器高速缓存380的第一寄存器。在同一周期过程中,通过多路复用器350从SIMD寄存器文件中检索出寄存器D2的内容,并将其存储在输入寄存器360中。
在下一个周期,如图25G所示,寄存器D2的第二通道中的数据单元通过纵横多路复用器375读出到寄存器高速缓存380的第一寄存器。然后,在下一个周期,如图25H所示,x、y和z分量现在可以由写入多路复用器385输出到LSU,以便返回存储到存储器。应该理解,在此阶段,数据单元现在已经重新排序成为存储在存储器中所需的结构格式。
图26A至26E图解说明在执行以下四个指令序列过程中,在重排序逻辑内发生的重排序:
VLD 3.16{D0,D1,D2},#1,[r1]
VLD 3.16{D0[1],D1[1],D2[1]},[r2]
VLD 3.16{D0[2],D1[2],D2[2]},[r3]
VLD 3.16{D0[3],D1[3],D2[3]},[r4]
一旦由第一装入指令识别的数据已经通过LSU检索出,便在第一周期过程中(见图26A),通过多路复用器350将其读出到输入寄存器360。在下一个周期,通过纵横多路复用器375将数据读入到寄存器高速缓存380,使得x、y和z分量被放入寄存器高速缓存的不同寄存器中。第一指令内的″#1″表示各数据单元都应该放入各寄存器的最低有效数据通道,而且剩余通道应该用逻辑0值填充,如图26B所示。在该周期过程中,还检索出由第二装入指令识别的数据单元,使其进入输入寄存器360。在下一个周期过程中(见图26C),存储在输入寄存器360中的数据单元通过纵横多路复用器375移入寄存器高速缓存380,其中它们被存储在第二通道。在该周期过程中,还把第三个装入指令的数据单元放在输入寄存器360内。
在下一个周期,把输入寄存器360的内容通过纵横多路复用器375路由到寄存器高速缓存的第三通道,同时检索出第四装入指令对象的数据单元,使其进入输入寄存器360。这如图26D所示。
最后,如图26E所示,在下一个周期,这些数据单元通过纵横多路复用器375路由到寄存器高速缓存380,其中它们被存储在第四通道。此后,可以把寄存器高速缓存的每个寄存器中的64位宽的数据块输出到SIMD寄存器文件的指定寄存器。
应该指出,与在图25A至25D中采取的方法形成对照,使用参照图26A至26E图解说明的第一VLD指令,从而一旦已经把数据单元放入特定通道,则剩余通道便用0值填满,避免了在进行任何更新以前,从SIMD寄存器文件中检索寄存器D0至D2中任何一个的当前内容的必要性。观察图26A至26E便可以看出,在此实例中,寄存器高速缓存380起″直写高速缓存″的作用,因为它对用于装入指令序列的数据单元进行高速缓存,而且当完成每一指令时,把数据写到SIMD寄存器文件的相关寄存器。但是,在执行序列中的每一个后续指令时,通常不必从寄存器文件读出。
在数据处理时往往需要的是,通过在所有单元之间施加可交换和关联操作符′op′,来把所谓的单元矢量简化成单一单元。这将作为折叠操作来描述。折叠操作的典型实例是对矢量的单元求和,或找出矢量中单元的最大值。
在并行处理体系结构中,参照图27描述用来执行这样折叠操作的一个已知方法。要折叠的数据单元[0]至[3]包含在寄存器r1中。应该理解,并行处理体系结构的好处是,它能允许同时对多个数据单元执行同一操作。这是参照所谓并行处理通道可以更清晰理解的概念。在此实例中,每个并行处理通道包含数据单元[0]至[3]之一。
首先,在步骤A,发出第一指令,使数据单元旋转两个位置,以便在寄存器r2中形成旋转的数据单元。这把不同数据单元放入每一个处理通道,使得单指令多数据(SIMD)操作可在步骤B施行。
此后,在步骤B,发出第二指令,使得对每一个通道中的数据单元执行SIMD操作。在此实例中,把这些多个并行操作的结果数据单元存储在寄存器r3。因此可以看出,现在r3中的条目包含寄存器r1一半数据单元的组合结果(即,r3包含:[0]op[2];[1]op[3];[2]op[0];和[3]op[1])。
接着,在步骤C发出第三指令,使存储在寄存器r3中的结果被旋转一个并行处理通道,并被存储在寄存器r4中。存储在r3中的数据单元相对于r4的数据单元的旋转再一次使不同的数据单元能够占用相同的并行处理通道。
最后,在步骤D,发出第四指令,使得对存储在每个通道的数据单元执行另一个单指令多数据操作,并将结果存储在寄存器r5。
因此,可以看出,可通过仅仅利用四个指令来组合寄存器上的所有数据单元,并把结果存储在寄存器r5的每一条目(即,r5中的每一条目包含:[0]op[1]op[2]op[3])。可以根据需要从寄存器r5中的四个条目中的任何一个读出结果数据单元。
图28图解说明一个实施例的折叠指令的原理。不同于并行处理通道的传统配置(参照图27所描述的),在并行处理通道传统配置中每个并行处理通道在整个通道中具有等于一个数据单元宽度的固定宽度,在本实施例中,并行处理通道的配置情况就不一样。在新的配置中,在其输入端每一个并行处理通道的宽度等于至少两个源数据单元的宽度,而在其输出端,一般地等于一个结果数据单元的宽度。已经发现,这样配置并行处理通道,较之先有技术配置提供重要的有点,因为单一寄存器内的数据单元组(例如,数据单元对)可以进行并行处理操作。如从下面的讨论将会清晰看到的,这免去执行先有技术配置的数据处理操作(即,旋转操作)的必要性,因为没有必要为了允许并行地出现多个操作而把数据单元安排在其它寄存器中正确的条目位置上。
相应地,源数据单元d[0]至d[3]设置在寄存器中各自的条目中。可以把相邻的源数据单元d[0]和d[1]看作成一对源数据单元。也可以把源数据单元d[2]和d[3]看作成一对源数据单元。因而,在此实例中,有两对源数据单元。
在步骤(A),对寄存器中的每对源数据单元执行操作,以便产生结果数据单元,对每个相邻一对源数据单元执行同一操作。
因而,应该理解,该对源数据单元和相应的结果数据单元全都占用并行处理的同一通道。可以看出,在步骤(A)之后,结果数据单元的数目是源数据单元数目的一半。也可以将数据单元d[2]op d[3]和d[0]op d[1]看作成一对源数据单元。
在步骤(B),对一对源数据单元执行另一个相同的操作,以便产生结果数据单元d[0]op d[1]op d[2]op d[3]。可以看出,在步骤(B)之后,结果数据单元的数目也是源数据单元数目的一半。如以前提到的,操作是可交换和关联操作,且无论源数据单元的组合的精确次序如何,都会产生相同的结果数据单元。
因而,可以看出,源数据单元的数目可以减半,作为各个操作的结果,并且可以对那些源数据单元执行同一操作,以便产生所需的结果。相应地,可以看出,所需的结果数据单元可以刚好在两个操作中产生,而图27的先有技术配置需要执行至少四个操作。应该理解,通过对源寄存器内的数据单元组执行并行处理操作来实现效率上的改善。虽然为清晰起见,仅仅用两对源数据单元进行图解说明,但是应该理解,任何数目的源数据单元对都可以操作。另外,虽然为清晰起见,已经图解说明对各源数据单元对进行的操作,但是应该理解,任何数目的源数据单元(例如,3个、4个或更多)都可以操作。
在实践中,为了提高效率,折叠指令配置成对由寄存器数据文件20中所支持的最小寄存器大小确定的最小数目的数据单元执行并行操作。图29图解说明一种实现方案,它产生数目与源数据单元的数目相同的结果数据单元。
在寄存器Dn中提供源数据单元d[0]至d[3]。为了产生相同数目的结果数据单元,还在寄存器Dm中提供源数据单元d[0]至d[3]。应该理解,寄存器Dn和Dm很可能是相同的寄存器,其中SIMD处理逻辑18分两次从寄存器Dn读出每一个源数据单元,以便产生重复的结果数据单元。
在步骤(A),发出单一SIMD指令,每对源数据单元都具有对其执行的操作,并产生相应的结果数据单元。
在步骤(B),发出另一个单一SIMD指令,使每对源数据单元具有对其执行的操作,以便产生相应的结果数据单元。
相应地,可以看出,已经把所有源数据单元组合起来产生结果数据单元。
图30a至30d图解说明遵循在别处描述的相同语法的不同折叠指令的操作。应该理解,其中给出两个源寄存器,但它们可以是相同的寄存器。另外,应该理解,每一个源寄存器都可以被指定为目的寄存器,以便减少所用的寄存器空间数量。
图30A图解说明SIMD折叠指令的操作,由此,来自同一寄存器的、用′n′位表示的源数据单元对已经在其上执行了操作,以便产生由2n位表示的结果数据单元。使结果数据单元提升为2n位,减少了出现溢出的可能性。当提升结果数据单元时,一般对它们进行符号扩展或用0填充。概括折叠指令的以下实例支持这样一种操作:
助记符 | 数据类型 | 操作数格式 | 说明 |
VSUM | .S16.S8.S32.S16.S64.S32.U16.U8.U32.U16.U64.U32 | Dd,DmQd,Qm | (相邻对单元相加并提升) |
在图30a所示的特定实例中(VSUM.S32.S16 Dd,Dm),包含四个16位数据单元的64位寄存器Dm被折叠,并且被存储在包含两个32位结果数据单元的64位寄存器Dd中。
图30b图解说明SIMD折叠指令的操作,由此来自不同寄存器的、用′n′位表示的源数据单元对已经在其上执行了操作,以便产生也用′n′位表示的结果数据单元。以下实例求和、最大值和最小值指令支持这样一种操作:
助记符 | 数据类型 | 操作数格式 | 说明 |
VSUM | .I8.I16.I32.F32 | Dd,Dn,Dm | (将相邻对单元相加) |
助记符 | 数据类型 | 操作数格式 | 说明 |
VFMX | .S8.S16.S32.U8.U16.U32.F32 | Dd,Dn,Dm | (求相邻对的最大值) |
助记符 | 数据类型 | 操作数格式 | 说明 |
VFMN | .S8.S16.S32.U8.U16.U32.F32 | Dd,Dn,Dm | (求相邻对的最小值) |
在图30b所示的特定实例中(VSUM.I16 Dd,Dn,Dm),两个64位寄存器Dm、Dn,每个都包含四个16位数据单元,被折叠,并存储在包含四个16位结果数据单元的64位寄存器Dd中。
图30c图解说明SIMD折叠指令的操作,由此来自用′n′位表示的同一寄存器的源数据单元对具有对其执行的操作,以便产生也用′n′位表示的结果数据单元。在图30c所示的特定实例中,包含八个16位数据单元的128位寄存器Qm被折叠,并存储在包含四个16位结果数据单元的64位寄存器Dd中。
图30d图解说明类似于图30b的SIMD折叠指令的操作,但是其中Dm=Dn,这使结果数据值复制到目的寄存器中。来自同一寄存器的、用′n′位表示的源数据单元对具有对其执行的操作,以便产生也用′n′位表示的结果数据单元,每一个都复制到寄存器的另一个条目上。在图30d所示的特定实例中,包含四个16位数据单元的64位寄存器Dm被折叠,并存储在包含两组两个16位结果数据单元的64位寄存器Dd中。
图31示意地图解说明实例SIMD折叠逻辑,它可以支持折叠指令,而且作为SIMD处理逻辑18的一部分提供。为清晰起见,图中示出的逻辑用来支持选择每一个相邻对的最大值的指令。但是,应该理解,该逻辑可以容易地适于为其它操作提供支持,这在下面将要更详细描述。
该逻辑从寄存器Dm接收源数据单元(Dm[0]至Dm[3]),任选地连同来自寄存器Dn的源数据单元(Dn[0]至Dn[3])一起。作为备选方案,该逻辑从寄存器Qm接收源数据单元(Qm[0]至Qm[7])。向相关的折叠操作逻辑单元400提供每对相邻的源数据单元。每一个折叠操作逻辑单元400都具有算术单元410,算术单元410把一个源数据单元从另一个源数据单元减去,并经路径415向多路复用器420提供它较大的指示。根据经路径415提供的指示,多路复用器从操作逻辑单元400输出较大值的源数据单元。因而,可以看出,每一个折叠操作逻辑单元400配置成经由各自的路径425、435、445、455输出相关联的相邻对数据单元的最大值。
选择和分布逻辑450接收结果数据单元,并根据需要经由路径431至434提供这些数据,用于存储在SIMD寄存器数据文件20中寄存器Dd的条目中,以便支持上述指令。现将描述选择和分布逻辑450的操作。
为了支持在图30a中图解说明的指令,向较低的两个折叠操作逻辑单元400提供源数据单元Dm[0]至Dm[3]。折叠操作逻辑单元400经由路径425和435输出数据单元。路径431和432将以符号扩展或零扩展格式提供Dm[0]op Dm[1],而路径433和434将以符号扩展或零扩展格式提供Dm[2]op Dm[3]。这是通过SIMD解码器16响应该折叠指令产生信号而实现的,折叠指令使多路复用器470选择它们的B输入、使多路复用器460选择符号扩展或者零扩展、使多路复用器490选择它们的E输入、而使多路复用器480选择它的D输入。
为了支持在图30b中图解说明的指令,向较低的两个折叠操作逻辑单元400提供源数据单元Dm[0]至Dm[3],而向较高的两个折叠操作逻辑单元400提供源数据单元Dn[0]至Dn[3]。折叠操作逻辑单元400经由路径425、435、445和455输出数据单元。路径431将提供Dm[0]op Dm[1],路径432将提供Dm[2]op Dm[3],路径433将提供Dn[0]op Dn[1],而路径434将提供Dn[2]op Dn[3]。这是通过SIMD解码器16响应该折叠指令产生信号来实现的,折叠指令使多路复用器470选择它们的A输入、使多路复用器480选择它们的C输入、而使多路复用器490选择它们的E输入。
为了支持在图30c中图解说明的指令,向折叠操作逻辑单元400提供源数据单元Qm[0]至Qm[7]。折叠操作逻辑单元400经由路径425、435、445和455输出数据单元。路径431将提供Qm[0]op Qm[1],路径432将提供Qm[2]op Qm[3],路径433将提供Qm[4]op Qm[5],而路径434将提供Qm[6]op Qm[7]。这是通过SIMD解码器16响应该折叠指令产生信号来实现的,折叠指令使多路复用器470选择它们的A输入、使多路复用器480选择它们的C输入、而使多路复用器490选择它们的E输入。
为了支持在图30d中图解说明的指令,向较低的两个折叠操作逻辑单元400提供源数据单元Dm[0]至Dm[3]。折叠操作逻辑单元400经由路径425和435输出数据单元。路径431将提供Dm[0]op Dm[1],路径432将提供Dm[2]op Dm[3],路径433将提供Dm[0]op Dm[1],而路径434将提供Dm[2]op Dm[3]。这是通过SIMD解码器16响应该折叠指令产生信号来实现的,折叠指令使多路复用器470选择它们的A输入、使多路复用器480选择它们的D输入,而使多路复用器490选择它们的F输入。作为另一方案,应该理解,作为代替还可以向上面的两个折叠操作逻辑单元400提供源数据单元,并可以执行与参照图30b图解说明的相同操作,这会减少选择和分布逻辑450的复杂性。
相应地,可以看出,这个逻辑能够在单个直接来自源数据单元的操作中,从两个相邻源数据单元产生结果数据单元。
如上所述,折叠操作逻辑单元400可以配置成对源数据单元执行任何数目的操作。例如,可以容易地设置其它逻辑来选择性地允许多路复用器420经由路径425提供源数据单元的最小值。作为另一方案,算术单元410可以配置成选择性地对源数据单元进行加法、减法、比较或乘法,并输出结果数据单元。因而,应该理解,本实施例的方法在可以利用这种配置执行的折叠操作的范围内,有利地提供大量灵活性。
另外,应该理解,虽然参照图31描述的逻辑支持16位操作,但是可以提供类似的逻辑来支持32位或8位或任何其它大小的操作。
图32图解说明矢量-标量SIMD指令的操作。SIMD指令遵循在别处描述的相同的语法。应该理解,如前所述,其中给出两个源寄存器,但它们可以是同一寄存器。另外,每一个源寄存器可以被指定作为目的寄存器,以便减少所使用的寄存器空间数量,并允许数据单元的有效再循环。
寄存器Dm存储若干数据单元Dm[0]至Dm[3]。这些数据单元中的每一个都代表可选的标量操作数。矢量-标量SIMD指令指定数据单元之一作为标量操作数,并利用此标量操作数并行地对另一个寄存器Dn中的所有数据单元执行操作,其结果存储在寄存器Dd中相应的条目中。应该理解,存储在寄存器Dm、Dn和Dd中的数据单元全都具有不同的大小。具体地说,可以相对于源数据单元提升结果数据单元。提升可能涉及从一种数据类型至另一种的转换的零填充或符号扩展。这可能具有额外的优点,就是确保不会出现溢出。
在涉及数据单元矩阵的情况下,能够为SIMD操作选择一个标量操作数是特别有效的。不同标量操作数可以写入SIMD寄存器文件20,然后容易地选择用于不同的矢量-标量操作,而不必重写数据单元或旋转数据单元。以下示范乘法指令支持这样一个操作:
标量乘 | |||||||
助记符 | 数据类型 | 操作数格式 | 说明 | ||||
VMUL | .I16.I32.F32.S32.S16.S64.S32.U32.U16.U64.U32 | Dd,Dn,Dm[x]Qd,Qn,Dm[x]Qd,Dn,Dm[x] | (Vd[i]=Vn[i]*Vm[x]) | ||||
标量乘累加 | |||||||
助记符 | 数据类型 | 操作数格式 | 说明 | ||||
VMLA | .I16.I32.F32.S32.S16.S64.S32.U32.U16.U64.U32 | Dd,Dn,Dm[x]Qd,Qn,Dm[x]Qd,Dn,Dm[x] | (Vd[i]=Vd[i]+(Vn[i]*Vm[x])) | ||||
标量乘减 | |||||||
助记符 | 数据类型 | 操作数格式 | 说明 | ||||
VMLS | .I16.I32.F32.S32.S16.S64.S32.U32.U16.U64U32 | Dd,Dn,Dm[x]Qd,Qn,Dm[x]Qd,Dn,Dm[x] | (Vd[i]=Vd[i]-(Vn[i]*Vm[x])) |
Vd、Vn和Vm描述从选择的寄存器格式和选择的数据类型构造的单元矢量。此矢量内的单元利用阵列符号[x]选择。例如,Vd[0]选择矢量Vd中最低的单元。
用叠代符i来允许矢量定义;对所有i值保持语义,其中i小于矢量内单元的数目。指令定义提供“数据类型”和“操作数格式”列;通过从每一列取一个来构成有效指令。
图33图解说明S1MD寄存器文件20中的标量操作数H0至H31的配置。如在别处提到的,指令字段中用于指定数据单元在SIMD寄存器文件20中的位置的位的优选数目是5位。这使得指定32个可能的位置成为可能。应该理解,把标量操作数映射到SIMD寄存器文件20的一种可能的办法是,把每一个操作数放入各个寄存器D0到D31中的第一条目。但是,作为代替,SIMD寄存器文件20配置成将可选的标量操作数映射或混叠到SIMD寄存器文件20中第一32逻辑条目上。这样映射标量操作数提供了重要的有点。首先,通过标量操作数在连续条目的定位来把用于存储标量操作数的D寄存器的数目减到最小,这又使可用于存储其它数据单元的D寄存器的数目最大化。通过把标量操作数存储在连续条目中来使矢量内所有标量操作数被访问成为可能,这当执行矩阵或滤波操作时特别有利。例如,矢量矩阵乘法要求对从矢量中选择的每个标量执行矢量-标量操作。另外,以这种方法存储来自至少一些寄存器的可选的标量操作数使得从那些寄存器中选择所有标量操作数成为可能。
图34示意地图解配置成执行实施例的矢量-标量操作的逻辑。
从寄存器Dm提供源数据单元(Dm[0]至Dm[3])。向标量选择逻辑510提供每一个源数据单元,该逻辑包括若干多路复用器500。向各多路复用器500的一个输入端提供各源数据单元(即,每个多路复用器接收源数据单元Dm[0]至Dm[3])。因而,可以看出,每个多路复用器都可以输出源数据单元Dm[0]至Dm[3]中的任一个。在此实施例中,每个多路复用器配置成输出相同的源数据单元。因而,标量选择逻辑510可以配置成选择和输出一个标量操作数。这是通过SIMD解码器16响应矢量-标量指令产生信号来实现的,该指令使多路复用器输出源数据单元Dm[0]至Dm[3]之一,作为选择的标量操作数。
矢量-标量操作逻辑520接收选择的标量操作数,而且还接收从寄存器Dn提供的源数据单元Dn[0]至Dn[3]。向矢量-标量操作逻辑520提供每一个源数据单元,该操作逻辑包括若干操作单元530。每个源数据单元被提供给操作单元530之一(即,每一个操作单元接收源数据单元Dm[0]至Dm[3]之一,以及选择的标量操作数)。在支持上述指令时,矢量-标量操作逻辑520对两个数据单元执行操作,并输出结果数据单元,用于存储在SIMD寄存器数据文件20中寄存器的各自的条目。这是通过SIMD解码器16响应矢量-标量指令产生信号来实现的,该指令使操作单元530对所接收的数据单元执行所需操作。
相应地,可以看出,该逻辑使源寄存器数据单元之一被选择作为标量操作数,并利用相同的标量操作数对来自另一个寄存器的所有源数据单元执行矢量-标量操作成为可能。
图35示出在SIMD处理过程中处理移位和变窄操作的一个已知办法。如可以看到的,需要3个单独的指令(SHR、SHR和PACK LO)来执行该操作。为了清晰起见,在图35中和图36和38中,中间值用虚线示出。
图36示出按照本技术的右移和变窄操作。本实施例的体系结构特别适用于处理移位和变窄操作,并可以响应单一指令这样做。该指令由SIMD解码器16(见图1)中的指令解码器解码。在此实例中,位于SIMD寄存器文件20中寄存器Qn(见图1)中的数据被右移5位,然后剩余数据四舍五入,然后把16个右手侧位传输至也位于SIMD寄存器文件20内的目的寄存器Dd。根据指令,硬件能够任选地支持四舍五入和/或数据饱和。一般地,右移指令并不要求饱和,因为当处理整数右移时,一般产生较小的数。但是,当右移和变窄时,饱和可能是适当的。
饱和是这样一种处理过程:它可以用来通过选择最接近允许值来把数据单元限制至某一范围。例如,若两个无符号的8位整数利用8位寄存器做乘法,那么结果可能溢出。在这种情况下,可以给定的最准确的结果是二进制11111111,因而,将使数目饱和,以便给出该值。当移位和变窄时,可能出现类似的问题,由此一个变窄后的数无法装入较窄的空间。在这种情况下,在一个无符号数的情况下,当移位步骤中放弃的任何位不是零时,那么,使数饱和为最大允许值。在有符号数的情况下,问题就更复杂了。在这种情况下,当最高有效位不同于任何被放弃的位时,那么,必须使数饱和至最大允许正数,或者最大值允许负数。
在输入的数据单元类型不同于输出的地方,也可能出现饱和,例如,有符号的值可能被移动和变窄,输出无符号值。输出不同数据类型的能力可能是非常有用的。例如,在像素处理时亮度是无符号的值,但在处理该值过程中,把它作为有符号的值处理可能是适当的。但在处理之后,应该输出不带符号的值,从有符号的值简单地变换为不带符号的值就会引起问题,除非提供使值饱和的能力。例如,若在处理过程中,由于略微不准确,亮度值已经丢失,变为负数,简单地把这个负的有符号值作为无符号值输出将是毫无意义的。因而,输出不带符号的值之前使任何负数饱和至零的能力是非常有用的工具。
下面在表6和7中给出用于不同移位指令的可能格式的实例。如可以看到的,该指令指定,它是前端具有V的矢量指令,然后用SH指定移位,并且在利用立即存取的移位的情况下,用R或L来表示方向右或左。于是,该指令包括两种类型,如表0中所示,第一是目的寄存器中的数据单元大小,第二是源寄存器中的单元大小。下一个信息包括目的寄存器和源寄存器的名字,并且随后可以给定立即值,该值表示数据移动的位数前面加一个#号。可以使用对指令一般格式的修改符,Q用来指示操作使用饱和整数运算,而R用来指示操作执行四舍五入。指令格式的更多细节在例如表0中描述。
表7示出用于通过有符号变量移位的指令。该指令和通过立即存取左移相同,但是不是提供利用指令的立即存取,而是利用指令来提供表示其中存储有符号变量的矢量的寄存器地址。在这种情况下,负数指示右手移位。因为要移动的位数存储在矢量中,所以可以为每个数据单元存储不同的有符号变量,使得它们每一个都可以移动不同数量。该处理更详细地如图39所示。
表6
立即移位
立即移位使用编码在指令内的立即值来使源矢量的所有单元移位相同的量。变窄版本允许使值向下变换,这可以包括饱和,同时长版本允许用任何定点向上变换。
提供带有累加版本的移位来支持在许多DSP算法中找到的有效的按比例缩放和累加。右移指令还提供四舍五入选项。四舍五入是通过实际上加上要四舍五入的数的一半而执行的。因而,当右移n位时,在它移位之前在值上加上2n-1。因而,在下表中,如果n≥1,则round(n)=2n-1,如果n≤0,则等于0。
包括按位提取指令,以便允许数据的有效紧缩(packing)。
助记符 | 数据类型 | 操作数格式 | 说明 |
VSHR | .S8.S16.S32.S64.U8.U16.U32.U64 | Dd,Dn,#UIMMDd,Dn,#UIMM | 立即右移Vd[i]:=Vn[i]>>UIMM |
.S8.S16.S16.S32.S32.S64.U8.U16.U16.U32.U32.U64 | Dd,Qn,#UIMM | 立即右移和变窄Vd[i]:=Vn[i]>>UIMM | |
VRSHR | .S8.S16.S32 | Dd,Dn,#UIMMQd,Qn,#UIMM | 带四舍五入的立即右移Vd[i]:=(Vn[i]+round(UIMM))>>UIMM |
.S64.U8.U16.U32.U64 | |||
.S8.S16.S16.S32.S32.S64.U8.U16.U16.U32.U32.U64 | Dd,Qn,#UIMM | 带四舍五入的立即右移和变窄Vd[i]:=(Vn[i]+round(UIMM))>>UIMM | |
VQSHR | .S8.S16.S16.S32.S32.S64.U8.U16.U16.U32.U32.U64.U8.S16.U16.S32.U32.S64 | Dd,Qn,#UIMM | 饱和立即右移和变窄Vd[i]:=sat<td>(Vn[i]>>UIMM) |
VQRSHR | .S8.S16.S16.S32.S32.S64.U8.U16.U16.U32.U32.U64.U8.S16.U16.S32.U32.S64 | Dd,Qn,#UIMM | 饱和带四舍五入的立即右移和变窄Vd[i]:=sat<td>((Vn[i]+round(UIMM))>>UIMM) |
VSRA | .S8.S16.S32.S64.U8.U16.U32.U64 | Dd,Dn,#UIMMQd,Qn,#UIMM | 立即右移和累加Vd[i]:=Vd[i]+(Vn[i]>>UIMM) |
VQSRA | .S8.S16.S32.S64.U8.U16.U32 | Dd,Dn,#UIMMQd,Qn,#UIMM | 饱和立即右移和累加Vd[i]:=sat<td>(Vd[i]+(Vn[i]>>UIMM)) |
.U64 | |||
VRSRA | .S8.S16.S32.S64.U8.U16.U32.U64 | Dd,Dn,#UIMMQd,Qn,#UIMM | 带四舍五入的立即右移和累加Vd[i]:=Vd[i]+((Vn[i]+round(UIMM))>>UIMM) |
VQRSRA | .S8.S16.S32.S64.U8.U16.U32.U64 | Dd,Dn,#UIMMQd,Qn,#UIMM | 饱和带四舍五入的立即右移和累加Vd[i]:=sat<td>(Vd[i]+((Vn[i]+round(UIMM))>>UIMM)) |
VSHL | .I8.I16.I32.I64 | Dd,Dn,#UIMMQd,Qn,#UIMM | 立即左移Vd[i]:=Vn[i]<<UIMM |
.S16.S8.S32.S16.S64.S32.U16.U8.U32.U16.U64.U32 | Qd,Dn,#UIMM | 立即左长移Vd[i]:=Vn[i]<<UIMM | |
VQSHL | .S8.S16.S32.S64.U8.U16.U32.U64.U8.S8.U16.S16.U32.S32.U64.S64 | Dd,Dn,#UIMMQd,Qn,#UIMM | 饱和立即左移Vd[i]:=sat<td>(Vn[i]<<UIMM) |
表7
移位有符号的变量
在本节中的移位是对受第二矢量中指定的带符号移位量控制的单元的一个矢量执行的移位。支持带符号移位量允许支持按指数值的移位,它可能合理地是负数;负控制值将执行右移。矢量移位允许每个单元移动不同的量,但是可用来通过以下方法将所有通道移位相同的量:在执行移位以前将移位控制操作数复制到矢量的所有通道。带符号的移位控制值是具有与要移位的操作数的最小操作数单元大小相同的大小的单元。但是,只利用每个通道的低8位来解释移位器变量,以便确定移位量。四舍五入和饱和选项也是可用的。
助记符 | 数据类型 | 操作数格式 | 说明 |
VSHL | .S8.S16.S32.S64.U8.U16.U32.U64 | Dd,Dn,DmQd,Qn,Qm | 通过带符号变量的左移Vd[i]:=Vn[i]<<Vm[i] |
VQSHL | .S8.S16.S32.S64.U8.U16.U32.U64 | Dd,Dn,DmQd,Qn,Qm | 通过带符号变量的饱和左移Vd[i]:=sat<td>(Vn[i]<<Vm[i]) |
VRSHL | .S8.S16.S32.S64.U8.U16.U32.U64 | Dd,Dn,DmQd,Qn,Qm | 通过带符号变量的四舍五入左移Vd:=(Vn[i]+round(-Vm[i]))<<Vm[i] |
VQRSHL | .S8.S16.S32.S64.U8 | Dd,Dn,DmQd,Qn,Qm | 通过带符号变量的饱和四舍五入左移Vd[i]:=sat<td>((Vn[i]+round(-Vm[i]))<<Vm[i]) |
.U16.U32.U64 |
因而,如可以看到的,硬件支持既能指定源数据单元大小又能指定结果数据单元大小而且有时指定要移位的数据的位数的指令。这使之变得极其可适应,而且是功能强大的工具。
图36中所示的右移和变窄操作具有若干可能的应用。例如,在涉及要求某种准确度的定点数的计算中,在执行计算的同时向32位数据值的中心某处放置例如16位数以减少数据上溢或下溢风险可能是适当的。在计算结束时,可以要求16位数,并因而如图36所示的移位和变窄将是适当的。本技术所设想的使用不同大小的源和目的寄存器的可能性在这里特别有效,并允许在SIMD处理过程中不同大小的数据保持在特定通道内。
类似于在图36中图解说明的移位和变窄操作的其它用途可能是彩色像素数据的处理。SIMD处理特别适合于视频数据,因为视频数据包括全都要求对其执行同一操作的许多像素。因而,不同像素数据可以处在寄存器的不同通道中,而且单一指令可以对全部数据执行相同的操作。视频数据往往以红、绿和蓝数据的形式表示。这需要在可以对其执行有意义的操作以前分离出。图37表示红、绿和蓝数据的典型实例,它们存在于16位数据单元中。在所示实例中,蓝数据可以通过左移3位和变窄操作来提取。左移3位把蓝数据发送到数据单元中间的右边,如虚线寄存器示意性示出的(代表中间值),数据左移所引起的数据值右边的3个空位填充3个零。变窄操作导致蓝数据和3个零被转移到结果的8位数据单元。
除移位和变窄以外,本技术也可以用来向上转换和移位,该过程如图38所示。在这种情况下,执行向上转换,后跟左移。该操作可以用来例如把32位值转变为64位值,32位值被放入64位值内适当的位置。在所示实例中,两个32位值通过放置在通道中的最高有效位,同时在最低有效位加零,而转变为64位值。
图39示出利用指示每个数据单元应移位的位数的值的矢量的可能性,该值是带符号整数,负数指示右移。使用为每个数据单元保存一个值的寄存器,而且每个数据单元移位由位于其通道中的值所指定的量。先前在表7中给出了用于这样的操作的指令。
图40示意地示出一个简单多路复用操作。在此多路复用操作中,多路复用器700选择值a或者值b在D处输出,取决于控制位c的值。c用来在a和b之间选择输出。c往往基于判决的结果,诸如a>b。体系结构的实施例提供了在SIMD处理过程中执行多路复用操作的能力。SIMD处理不适于执行转移操作,因而,可以不利用标准if thenelse指令执行多路复用,而是建立掩码,该掩码用来指示要选择两个源寄存器a和b的哪些部分。
该掩码由控制值构成,这些控制值用来指示要选择两个源寄存器a和b中哪些部分。在某些实施例中,某个位置中的一个可指示将选择b的某部分,而同时在该位置中的零指示将选择a的相应部分。该掩码存储在通用寄存器中,从而减少对专用寄存器的需求。
掩码的产生取决于要执行的多路复用操作,并响应该操作而建立。例如,在上面给定的情况下,执行a和b的比较。这可以一部分一部分地进行,例如,对SIMD处理中相应的数据单元进行比较。比较b和a的相应数据单元,并把值写入通用寄存器中根据b大于a还是b等于或小于a来存储控制值的部分。这可以利用对全部数据单元进行比较大于指令VCGT来并行地执行。在系统实施例的指令集中提供该指令。下表8示出一些由体系结构实施例提供的宽范围比较指令。
表8
比较和选择
可以执行对产生掩码的变量的比较和测试,其可用来提供数据平面选择和掩蔽。它还提供指令来选择最大值和最小值,包括折叠型式,折叠型式可以在矢量化代码结束时使用,以便求出矢量内的最大值或最小值。
助记符 | 数据类型 | 操作数格式 | 说明 |
VCEQ | .I8.I16.I32.F32 | Dd,Dn,DmQd,Qn,Qm | 比较相等Vd[i]:=(Vn[i]==Vm[i])?1∶0 |
VCGE | .S8.S16.S32.U8.U16.U32.F32 | Dd,Dn,DmQd,Qn,Qm | 比较大于或等于Vd[i]:=(Vn[i]>=Vm[i])?1∶0 |
VCGT | .S8.S16.S32.U8.U16.U32.F32 | Dd,Dn,DmQd,Qn,Qm | 比较大于Vd[i]:=(Vn[i]>Vm[i])?1∶0 |
VCAGE | .F32 | Dd,Dn,DmQd,Qn,Qm | 比较绝对值大于或等于Vd[i]:=(|Vn[i]|>=|Vm[i]|)?1∶0 |
VCAGT | .F32 | Dd,Dn,DmQd,Qn,Qm | 比较绝对值大于Vd[i]:=(|Vn[i]|>|Vm[i]|)?1∶0 |
VCEQZ | .I8.I16.I32.F32 | Dd,DmQd,Qm | 比较等于0Vd[i]:=(Vm[i]==0)?1∶0 |
VCGEZ | .S8.S16.S32.F32 | Dd,DmQd,Qm | 比较大于或等于0Vd[i]:=(Vm[I]>=0)?1∶0 |
VCGTZ | S8.S16.S32.F32 | Dd,DmQd,Qm | 比较大于0Vd[i]:=(Vm[i]>0)?1∶0 |
VCLEZ | F32 | Dd,DmQd,Qm | 比较小于或等于0Vd[i]:=(Vm[i]<=0)?1∶0注意:整数a<=0==!(a>0) |
VCLTZ | F32 | Dd,DmQd,Qm | 比较小于0Vd[i]:=(Vm[i]<0)?1∶0注意:整数a<0==!(a>=0) |
VTST | .I8.I16.I32 | Dd,Dn,DmQd,Qn,Qm | 位测试Vd[i]:=((Vn[i]&Vm[i])!=0)?1∶0 |
VMAX | .S8.S16.S32.U8.U16.U32.F32 | Dd,Dn,DmQd,Qn,Qm | 求最大值Vd[i]:=(Vn[i]>=Vm[i])?Vn[i]∶Vm[i] |
VMIN | .S8.S16.S32.U8.U16.U32.F32 | Dd,Dn,DmQd,Qn,Qm | 求最小值Vd[i]:=(Vn[i]>=Vm[i])?Vm[i]∶Vn[i] |
一旦建立了掩码,单指令便可以用于利用包含该掩码的通用寄存器、控制寄存器C来选择a或b。因而,数据处理器由C控制来执行选择a或b的多路复用操作。
图41示意地示出系统的一个实施例,其中源值a或b的选择是按位执行的。在这种情况下,控制寄存器730已经通过比较寄存器a710和b 720中的数据单元而用数据填充了。因而,例如八位宽的数据单元a0与具有相同大小的数据单元b0相比较。在这种情况下,a小于或等于b,因而,八个零插入控制寄存器730的相应部分。若a大于b,则8个1插入控制寄存器730的相应部分。类似的比较是并行地针对所有数据单元执行的,并产生相应的控制位。产生控制矢量的比较操作对应于指令VCGT.S8c、a、b。于是,选择可以通过在存储在源寄存器的位和存储在控制寄存器中的相应位之间执行简单的逻辑操作而非常简单地逐位执行,每一个结果位都写入目的寄存器,在此实例中是寄存器730,即,结果重写控制值。这种按位选择的优点是它与数据类型和宽度无关,而且适当的话,可以比较不同大小的数据单元。
图42示出备选实施例,其中控制不是按位执行的,而是在数据单元基础上执行的。在所示实施例中,若控制寄存器C 730中的数据单元大于或等于零,则源寄存器b 720中相应的数据单元写入目的寄存器(在这种情况下是寄存器720)。如在此实例中,如果C是带符号的整数,则当决定选择a还是b时,只需考虑C的最高有效位。
在其它实施例中,C的其它特性可以用来确定是选择来自寄存器a 710的数据单元还是来自寄存器b 720的数据单元。这样的特性的实例包括:C是奇数还是偶数,其中再一次只需要考虑控制值的一个位,在这种情况下是最低有效位;或者C是等于零、不等于零或大于零。
一般地说,ARM指令和事实上许多其它RISC指令只为任何指令提供3个操作数。多路复用操作一般要求四个操作数来指定两个源寄存器a和b、控制寄存器C和目的寄存器D。本系统的实施例利用以下事实:一般地说,继多路复用操作之后,不再需要两组源数据或控制数据中的至少一组。因而,目的寄存器被选择为两个源寄存器之一或者控制寄存器。这只在控制寄存器是通用寄存器而不是专用寄存器时起作用。在系统的实施例中,在指令集中提供3个不同指令,一个指令专用于写回一个源寄存器,另一个指令用于写回另一源寄存器,而第三指令用于写入控制寄存器。每个指令都要求刚好3个操作数,指定两个源寄存器和一个控制寄存器。这3个指令在下表9中指定。
表9
逻辑和按位选择
助记符 | 数据类型 | 操作数格式 | 说明 |
VBIT | 无 | Dd,Dn,DmQd,Qn,Qm | 若真则按位插入Vd:=(Vm)?Vn∶Vd |
VBIF | 无 | Dd,Dn,DmQd,Qn,Qm | 若假则按位插入Vd:=(Vm)?Vd∶Vn |
VBSL | 无 | Dd,Dn,DmQd,Qn,Qm | 按位选择Vd:=(Vd)?Vn∶Vm |
图43示意地示出与系统提供的3个多路复用指令对应的多路复用器配置的3个实例。图43a示出多路复用器701接线来执行指令按位选择VBSL。在此实例中,与在图41和42中图解说明的实例相反,当C为假(0)时选择A,而当C为真(1)时选择B。在所图解说明的实施例中,目的寄存器与控制寄存器相同,使得结果值重写控制值。若要求反向选择,即,当C为真时选择A,而当C为假时选择B,则可以通过简单地交换操作数A和B使用同一电路。
图43b示出多路复用器702,其对应于指令BIT若真则按位插入,而源寄存器A中的结果同时用作源和目的寄存器,并用结果数据重写。在此实例中,当C为真时B写入A,而若C为假则存在于寄存器A中的值保持不变。在实施例中,若要求反向选择,即,若C为假而不是真时要求B写入目的寄存器,这不可能简单地切换寄存器,因为器件没有多路复用器701的对称性。
图43c示出多路复用器703,它设置成对应于图43b的反向选择,即,若为假则指令BIF按位插入。在此实施例中,当C为假时,寄存器A中的值写入寄存器B,而当C为真时,寄存器B中的值保持不变。与图43b中一样,此系统中没有对称性。
图44示意地图解说明存储在存储器内的数据字节序列B0至B7。这些字节是按照字节不变寻址存储的,由此相同的数据字节将响应于读出给定的存储器地址而返回,不管当前的字节顺序模式如何。存储器还支持不对齐寻址,由此可以从存储器读出半字、字或较大的多字节数据单元,在任意存储器字节地址开始。
当系统工作在小尾模式下而从存储器读出八字节的数据B0至B7时,则字节B0至B7按照图44所示的顺序布置在寄存器800内。寄存器800包含四个数据单元,每一个都包括一个16位的半字。图44还示出当系统操作在大尾模式下时,相同的八字节的数据B0至B7读出到寄存器802中。
在此实例中,数据一旦从存储器读出到各自的SIMD寄存器800、802中,便进行平方操作,这使数据单元的大小加倍。相应地,结果写入两个目的SIMD寄存器804、806。如将从图44看出的,分别写入这些寄存器对804、806中的第一或第二的结果值根据字节顺序模式改变,数据已经以该字节顺序模式从存储器读出。相应地,进一步处理平方结果值的SIMD计算机程序可能必须改变,以根据字节顺序模式考虑数据的不同布局。这不利地导致需要产生两个不同形式的计算机程序来处理数据存储在存储器内所用的不同字节顺序。
图45通过提供重排序逻辑808解决问题。数据处理系统包括存储器访问逻辑810,其用来在指定的存储器地址开始,从存储器读出八字节数据B0至B7,并且利用存储器的字节不变寻址特性。存储器访问逻辑810的输出相应地提供在同一输出通道从给定存储器地址读出的字节,而与字节顺序模式无关。因而,在数据单元是半字的图解说明的实例中,在一种字节顺序模式下从特定存储器地址恢复的字节可以是半字的最高有效部分,而在另一种字节顺序模式下它是半字的最低有效部分。
数据单元重排序逻辑808负责对存储器访问逻辑810从存储器检索到的数据单元进行重排序,使得装入SIMD寄存器812的数据单元的形式将与已经存储为小尾模式而且不重新排列装入的数据一致,与存储系统内使用的字节顺序模式无关。在存储系统内使用小尾模式的情况下,数据单元重排序逻辑808不会将字节重排序,并且将不加改变地让其通过。但是,在数据以大尾模式存储在存储系统内的情况下,数据单元重排序逻辑808用来反转每个半字内字节从存储器读出的顺序,使得半字数据单元将在SIMD寄存器812内以小尾模式出现。这样,单个SIMD计算机程序可以对传输到SIMD寄存器的数据单元执行正确的数据处理操作,而与它们存储在存储器内的字节顺序模式无关。从图45将会看出,数据单元重排序逻辑808响应表示字节顺序模式被存储器使用的信号和表示所涉及的数据单元大小的信号。正在使用的字节顺序模式将控制是否要求任何重排序,而若需要,则大小将控制所施加的重排序的性质。将会看出,当数据以小尾模式存储在存储器内而且SIMD寄存器是小尾时,不需要重排序。相反,若SIMD寄存器采取大尾模式,则当数据以大尾模式存储在存储器内时,将不需要重排序,但是当数据以小尾模式存储在存储器内时,则将需要重排序。
图46图解说明类似于图45的实例,除在此实例中,数据单元是32位数据字以外。如将要看出的,当这些数据字以大尾模式存储在存储器内时,由数据单元重排序逻辑808进行的重排序反转四字节数据单元由存储器访问逻辑810检索到的字节次序,使得它们以与已经以小尾模式存储在存储器内并不重排列地装入的数据一致的形式,存入SIMD寄存器812内。
应该理解,在处理器系统作为整体描述的环境中,存储器访问逻辑810和数据单元重排序单元808可形成以前描述的装入存储单元的一部分。当对于标量寄存器内的数据采取特定的字节顺序时而把数据读入标量寄存器时,数据单元重排序逻辑808还可以用来补偿存储系统字节顺序。
图47更详细地图解说明数据单元重排序逻辑808。将会看出,它形成为3级多路复用器,分别由各自的控制信号Z、Y和X控制。这3级分别负责反转数据的相邻字节、相邻半字和相邻字的位置。当标志指示大尾模式而大小信号分别指示64、32或16位数据单元大小时,控制信号X、Y和Z从字节顺序信号解码,如在图47中图解说明的。应该理解,数据单元重排序逻辑的许多其它形式都可以用来实现如在图45和46中图解说明的相同的功能结果。
用来执行存储器的字节不变寻址的存储器访问指令方便地使用保存在处理器标量寄存器组的寄存器内的存储器地址指针。处理器支持改变数据单元大小的数据处理指令,以及对SIMD寄存器内选择的数据单元执行操作的数据处理指令。
图48图解说明寄存器数据存储器900,它包括各用作表寄存器的寄存器列表D0、D1;索引寄存器D7;以及结果寄存器D5。将会看出,表寄存器D0、D1是寄存器数据存储器900内连续编号的寄存器。结果寄存器D7和索引寄存器D5任意地相对于表寄存器并且彼此相对地定位。图中示出了与该数据处理对应的指令的语法。
图49示意地图解说明查表扩展指令的操作。该指令指定要用作表寄存器块的寄存器列表,诸如通过指定列表中的第一寄存器以及列表中寄存器的数目(例如1至4个)。该指令还指定要用作索引寄存器D7的寄存器和要用作结果寄存器D5的寄存器。查表扩展指令还指定存储在表寄存器D0、D1内和要选择并写入结果寄存器D5的数据单元的数据单元大小。在所图解说明的实例中,表寄存器D0、D1每个都包含八个数据单元。相应地,索引值具有0至15的范围跨度。在此预定范围外的索引值不会进入查表,而代之以结果寄存器D5内相应的位置将保持不变。如图解说明的,第四和第六索引值就是这样超范围的。其它索引值指向表寄存器D0、D1内的各自数据单元,而这些数据单元然后存入结果寄存器D5内相应的位置。在索引寄存器D7内索引值位置和结果寄存器D5内数据单元位置之间存在一对一的对应关系。结果寄存器D5内标记为″U″的值指示存储在那些位置的值在查表扩展指令操作过程中保留。因而,无论该指令执行之前那些位置上存储什么位,该指令执行之后那些位置内存储的仍不变。
图50图解说明来自图49的索引值,这些值然后进行SIMD减法操作,由此给索引值中的每一个都施加16的偏移。这使以前的范围内的索引值变为超范围值。先前的超范围值现在移入范围内。因而,当包含现在修改的索引值的索引寄存器D7在另一个查表扩展指令下重新使用时,第四和第六索引值现在在范围内,而结果在表寄存器D0、D1中执行查表(或者其它可以在第二查表扩展指令中指定的不同寄存器中执行查表),这在第二查表扩展指令执行之前也重新装入。因而,索引寄存器D7内的单一组索引值可以加上偏移,然后与重新装入的表寄存器D0、D1重新使用,以便给出可得到的更大表的作用。
图51进一步图解说明除查表扩展指令以外可以提供的查表指令。这些指令之间的差异是,当在查表指令中遇到超范围索引值时,在结果寄存器D5内与该索引值对应的位置被写入零值,而不是保持不变。此类型的行为在某些编程情况是有用的。图51的实例图解说明了3个表寄存器,而不是两个表寄存器。第一、第三、第四、第六和第七索引值超出范围。第二、第五和第八索引值在范围内,并且导致在表寄存器内对相应的数据单元进行查表。
如之前提到的,装入和存储指令提供用于在SIMD寄存器文件20(见图1)和存储器之间移动数据。每一个这样的装入和存储指令都将指定起始地址,起始地址识别存储器内访问操作(是装入操作还是存储操作)应开始的位置。按照这些实施例的装入和存储指令,作为装入或存储指令对象的数据量可针对每个指令改变。在特定的实施例中,数据量通过识别数据类型″dt″(即各数据单元的大小)来识别,并通过识别SIMD寄存器列表和任选地识别要访问的结构数来识别要访问的数据单元数。
执行SIMD处理时,往往有这样的情况:针对需要的数据单元执行的访问操作往往是不对齐访问(这里亦称为字节对齐访问)。换句话说,起始地址往往不对齐,而在这样的情况下,LSU 22需要为访问操作分配可能需要以允许完成访问操作的最大访问次数。
虽然在可能的实现方案中,LSU 22可配置成假定每次访问都是不对齐的,但这意味着,LSU 22在起始地址事实上与某多个字节对齐的情况下不能改善访问操作的效率。
尽管LSU 22将能够根据起始地址确定起始地址是否具有预定的对齐方式,但LSU 22一般必须在实际上计算起始地址之前的时间提交访问操作的访问次数。在特定的实施例中,LSU 22具有流水线体系结构,而要用来执行任何特定访问操作的访问次数在流水线的解码阶段由LSU确定。但是,起始地址往往是在流水线的后续执行阶段计算,例如,通过给基地址加上偏移值,因此LSU 22不能等待在确定多少次访问要分配给访问操作以前确定该起始地址。
按照一个实施例,通过在访问指令内提供对齐说明符字段,这里亦称为对齐限定符,来减轻这个问题。在一个特定实施例中,对齐限定符可以取第一值,第一值指示起始地址被作为字节对齐处理,即,不对齐。应该理解,可以通过对齐说明符字段的任何预定的编码来提供第一值。另外,对齐限定符可以采取多个第二值中的任何一个,第二值指示不同的预定对齐方式,起始地址将被看作与多个可用的第二值一致,并在一个特定实施例中,多个可用的第二值如下表所示:
对齐方式限定符 | 起始地址格式 | 约定和有效性 |
@16 | ..xxxxxxx0 | 起始地址将认为是2字节的倍数。可用于传送恰好2字节的指令。 |
@32 | ..xxxxxx00 | 起始地址将认为是4字节的倍数。可用于传送恰好4字节的指令。 |
@64 | ..xxxxx000 | 起始地址将认为是8字节的倍数。可用于传送多个8字节的指令。 |
@128 | ..xxxx0000 | 起始地址将认为是16字节的倍数。可用于传送多个16字节的指令。 |
@256 | ..xxx00000 | 起始地址将认为是32字节的倍数。可用于传送多个32字节的指令。 |
表10
现将参照图52在一个实施例中描述使用此对齐方式说明符信息的方式。如图52所示,LSU 22一般通过预定宽度的数据总线连接到存储系统。该存储系统往往由多个不同层的存储器构成,存储器的第一层往往是高速缓存,这是LSU通过数据总线通信的存储器层。因此,如图52所示,LSU 22配置成通过数据总线1020与存储器层1高速缓存1010通信,在该特定实例中,考虑具有64位宽的数据总线。高速缓存命中时,进行针对层1高速缓存的内容的访问,而高速缓存没有命中时,层1高速缓存1010将通过一个或多个其它总线1030与存储系统1000的其它部件通信。
存储系统的不同部件可以是分布式的,而在图52图解说明的实例中,假设层1高速缓存1010设置在芯片上,即,包含在图1的集成电路2内,而同时存储系统1000的其余部件设置在芯片外。芯片上和芯片外之间的界限由图52中的虚线1035表示。但是,本专业的技术人员将会意识到,其它配置也可以使用,例如,存储系统全部可以设置在芯片外,或者可以在存储系统芯片上的部件和存储系统芯片外的部件之间设置某些其它分界。
LSU 22也配置成与存储器管理单元(MMU)1005通信,后者一般包括变换后援缓冲器(TLB)1015。如本专业技术人员将会意识到的,MMU用来执行某些访问控制功能,例如,虚拟地址至物理地址的变换、访问许可的确定(即,是否可以进行访问)等。为了做到这些,MMU在TLB 1015内存储从存储器中的页面表获得的描述符。每个描述符为相应的存储器页面定义与该存储器页面有关的需要的访问控制信息。
LSU 22配置成通过控制路径1025向层1高速缓存1010和MMU1005两者传递访问的某些细节。具体地说,LSU 22配置成向层1高速缓存和MMU输出起始地址和要访问的数据块的大小的指示。另外,按照一个实施例,LSU 22输出由对齐方式说明符导出的对齐方式信息。现将参照图53A至54B进一步描述LSU 22和/或层1高速缓存1010和MMU 1005使用对齐方式说明符信息的方式。
图53A图解说明存储器地址空间,每条水平实线指示存储器中64位对齐方式。若访问操作指定128位长数据块1040,为了便于论证,我们假定具有起始地址0x4,于是LSU 22需要确定在64位数据总线1020上的单独访问次数,以分配给该访问操作。另外,如早先讨论的,一般需要在知道起始地址是什么以前作出决定。在参照图52设想的实施例中,当确定要分配的访问次数时,LSU 22配置成使用对齐方式说明符信息。
在图53A的实例中,起始地址是32位对齐的,而对齐方式说明符可以识别出该对齐方式。在这种情况下,如从图53A可以看到的,LSU 22必须假定最坏的情况,因此假定将需要3次单独的访问,以便对数据块1040执行必要的访问操作。这与分配给不对齐访问具有相同的访问次数。
但是,若我们现在考虑在图53B中图解说明的类似实例,便可以看出,仍将访问128位数据块1045,但是在该实例中,起始地址是64位对齐的。若对齐方式说明符信息识别出此64位对齐方式,或者甚至识别出数据是128位对齐,则在这种情况下,LSU 22只需要分配两次单独的访问给该访问操作,由此在效率上提供重大的改善。但若数据总线是128位宽,则若对齐方式说明符表明128位对齐方式而不是64位对齐方式,则LSU 22只需要分配单次访问。
现在考虑在图53C中的实例,这里可以看出,需要访问96位大小的数据块1050,并在此实例中,假设对齐方式说明符识别出起始地址是32位对齐。再一次,在此实例中,尽管LSU 22实际上没有在需要提交访问次数时算出起始地址,但是LSU 22仍旧可以假定只需要向访问操作分配两次访问。图53D图解说明第四实例,其中将访问80位数据块1055,而且其中对齐方式说明符识别起始地址是16位对齐的。再一次,LSU 22只需要向访问操作分配两次访问。如果不是这样,而是对齐方式说明符已经表明,访问要作为不对齐访问处理,那么显然,LSU可能要向访问操作分配3次访问,如对于在图53C中图解说明的访问,实际上就是这种情况。因此,可以看出,可以通过LSU 22使用对齐方式说明符信息,以在对齐方式说明符指示起始地址某种预定对齐方式的情况下显著改善访问的性能。
应该指出,对齐方式说明符不能认为是起始地址(这里亦称为有效地址)将具有该对齐方式的保证,但是确实为LSU 22提供了继续进行的假定。若随后起始地址证实不遵循对齐方式说明符所指定的对齐方式,则在一个实施例中,相关的装入或存储操作配置成产生对齐方式故障。然后,对齐方式故障可以利用若干已知技术中的任何一个进行处理。
如早先指出的,对齐方式信息不仅由LSU 22使用,而且还通过路径1025既传播到层1高速缓存1010又传播到MMU 1005。现将参照图54A和54B描述层1高速缓存或MMU可以使用信息的方式。如在图54A和54B图解说明的,考虑对256位数据块1060、1065的访问,在这些实例中,图中的水平实线表示存储器中128位对齐方式。在图54A中,假设数据块是64位对齐的,而图54B中,假设数据块是128位对齐的。在两个实例中,因为数据总线1020只有64位宽,显然LSU 22需要向访问操作分配四次访问。从LSU的观点看,对齐方式说明符指定起始地址是64位对齐还是128位对齐并不重要。
但是,层1高速缓存1010内的各高速缓存线各自能够存储超过256位数据,且还可能是128位对齐的。在图54A的实例中,因为数据块不是128位对齐的,因此高速缓存需要假定将需要访问两个高速缓存线。但是,在图54B的实例中,层1高速缓存1010可以根据对齐方式说明符确定,只需要访问层1高速缓存内的单个高速缓存线,而这可以用来提高层1高速缓存1010内访问操作的效率。
类似地,必须由MMU访问,以便在TLB 1015中检索适当的描述符的页面表往往存储超过256位的数据,并通常可能是128位对齐的。相应地,MMU 1005可以使用通过路径1025提供的对齐方式信息来确定要访问的页面表的数目。尽管在图54A的实例中,MMU1005可能需要假定将需要访问超过一个页面表,在图54B的实例中,MMU可以从对齐方式说明符确定,只需要访问单个页面表,而此信息可以用来改善MMU 1005执行访问控制功能的效率。
因此,可以看出,装入或存储指令内对齐方式说明符的使用,如上面描述的,可以用来允许硬件优化访问操作的某些方面,若必须在可以确定起始地址以前提交访问周期数和/或高速缓存访问数,则这是特别有用的。该方案对指定要访问的不同数据长度的装入或存储指令,以及在LSU和存储系统之间带有不同数据总线大小的处理器上是有用的。
有若干种数据处理操作,它们本身无法以标准SIMD格式执行,在标准SIMD格式中,多个数据单元并排放置在寄存器内,然后并行地对那些数据单元执行操作。在图55A至55C中,图解说明某些这种操作的实例。图55A图解说明交织操作,其中最好交织第一寄存器1100内的四个数据单元A、B、C、D与第二寄存器1102内的四个数据单元E、F、G、H。在图55A中,所得到的交织数据单元显示在目的寄存器1104、1106内。这些目的寄存器可以是不同于源寄存器1100、1102的寄存器,或者可以是与源寄存器相同组的两个寄存器。如从图55A可以看到的,按照交织操作,来自每一个源寄存器的第一数据单元并排放置在目的寄存器内,后跟来自两个源寄存器的第二数据单元,后跟来自两个源寄存器的第三数据单元,后跟来自两个源寄存器的第四数据单元。
图55B图解说明反向去交织操作,其中要求对放入两个源寄存器1108和1110的八个数据单元去交织。按照此操作,第一、第三、第五和第七数据单元放入一个目的寄存器1112,而第二、第四、第六和第八数据单元放入第二目的寄存器1114。如同图55A实例的情况一样,应该理解,目的寄存器可以是不同于源寄存器的寄存器,或者可以是相同的寄存器。若在图55A和55B的实例中假设该寄存器是64位寄存器,则在此特定实例中,正在交织或去交织的数据单元是16位宽的数据单元。但应该理解,不要求数据单元交织或去交织为16位宽,源和目的寄存器也没有必要为64位寄存器。
图55C图解说明通过转置操作执行的功能。按照此实例,来自第一源寄存器1116的两个数据单元A、B和来自第二源寄存器1118的两个数据单元C、D被转置,转置的结果是来自第一源寄存器1116的第二数据单元与来自第二源寄存器1118的第一数据单元交换,使得第一目的寄存器1120内提供数据单元A、C,而在第二目的寄存器1122中提供数据单元B、D。此外,目的寄存器可以不同于源寄存器,但是目的寄存器事实上往往是与源寄存器相同的寄存器。在一个实例中,寄存器1116、1118、1120、1122中的每一个都可以看作64位寄存器,在这种情况下,数据单元是32位宽数据单元。但是,不要求数据单元为32位宽,也不要求寄存器为64位寄存器。
另外,尽管在全部上述实例中已经假定,寄存器的整个内容都表示出来,但是可以设想,所讨论的3个操作中的任何一个都可以对相关源寄存器的不同部分内的数据单元独立地执行,因此在这种情况下,该图只图解说明源/目的寄存器的一部分。
如之前提到的,标准SIMD方法涉及在寄存器内并排放置多个数据单元,然后并行地对那些数据单元执行操作。换句话说,以数据单元的粒度执行操作的并行化。尽管以这样一种方式安排所需的数据单元,例如,通过把所需的源数据单元散布在多个寄存器中,会导致操作非常有效地执行,但是以这样的方式安排所需的源数据单元,对数目巨大的操作而言是不实际的,因此以前一直无法利用SIMD方法的这种潜在的速度优点。上述交织、去交织和转置操作就是这样的以前一直无法利用SIMD方法速度优点的操作实例,但是应该理解,还有许多其它实例,例如,某些类型的算术运算。这样一种算术运算的一个特定实例是需要应用于由实部和虚部构成的复数的算术运算。
按照一个实施例,这个问题通过为某些数据处理指令提供不仅识别数据单元大小而且进一步以单独的实体形式识别通道大小(通道大小是数据单元大小的倍数)的能力而得以减轻。然后,以通道大小而不是数据单元大小的粒度进行数据处理操作的并行化,使得参与特定的数据处理操作实例化的一个以上数据单元可以在相同的源寄存器内共存。因而,用来执行数据处理操作的处理逻辑可以根据通道大小定义若干并行处理的通道,然后并行地对通道中的每一个执行数据处理操作,该数据处理操作适用于并行处理的每一个这样的通道内选择的数据单元。
采用这样一个方法,就有可能以SIMD方式执行诸如以前参照图55A描述的交织操作。具体地说,图56A图解说明当按照一个实施例执行″ZIP″指令时执行的处理。在该特定实例中,ZIP指令是32|ZIP.8指令。因而该指令把数据单元识别为8位宽,而通道是32位宽。对于图56A的实例,假设ZIP指令已经指定源寄存器为64位寄存器D01125和D1 1130。因而,这些寄存器中的每一个都包含八个8位数据单元。每一个通道内交织操作是独立并行地施加的,结果得出如图56A下半所示数据单元的重新排列。在一个实施例中,假设对于ZIP指令,目的寄存器与源寄存器相同,相应地这些重新排列的数据单元再一次存储在寄存器D0 1125和D1 1130内。如从图56A可以看到的,在通道1内,每一个源寄存器的第一4个数据单元已经交织,而在通道2内,每一个源寄存器的第二4个数据单元已经交织。
不难意识到,通过改变通道大小或数据单元大小可以执行不同交织形式。例如,若通道大小被识别为64位,即,造成那里只有单个通道,则可以看出,目的寄存器D0会包含每一个寄存器的第一4个数据单元的交织结果,而目的寄存器D1会包含每一个寄存器的第二4个数据单元的交织结果。应该理解,可以设置相应的UNZIP指令,以便执行相应的去交织操作,UNZIP指令也能够指定通道大小和数据单元大小。
一般转置操作被看作相当不同于交织操作或去交织操作的操作,因此一般可以设想,只需要设置单独的指令即可执行转置操作。但是,已经认识到,当提供具有单独定义通道大小和数据单元大小的能力的交织或去交织时,事实上当指定两个源寄存器并将通道大小设置为数据单元大小的两倍时,相同的指令将可以用来执行转置操作。这在图56B中图解说明,其中交织指令ZIP已经设置为识别8位数据单元大小和16位通道大小(即数据单元大小的两倍)。假定选择与图56的实例相同的64位源寄存器D0 1125和D1 1130,这定义了四个通道的并行处理,如图56B所示。于是,如从图56B下半部分可以看出,交织处理实际上在每一个通道内导致转置结果的产生,这是因为每一个通道内第二源寄存器的第一数据单元与每一个通道内第一源寄存器的第二数据单元交换。
因而,按照上述实施例,同样的ZIP指令可以用来执行交织或转置操作,取决于如何定义通道大小和数据单元大小。还应注意,转置也可以利用UNZIP指令以完全相同的方式执行,因此,16|UNZIP.8指令将执行与16|ZIP.8指令完全相同的转置操作。
图57A至57C图解说明实现这样的ZIP指令的特定实例,其中图像内的4×4像素阵列1135要绕线1136转置(见图57A)。每一个像素一般都由用RGB格式表示的红、绿和蓝分量构成。为了便于论证,我们假定定义每一个像素所需的数据是16位长度,则可以看出,阵列1135中四个像素的每一条水平线都可以放入单独的源寄存器A、B、C、D。
图57B图解说明若执行以下两个指令则会出现的不同转置:
32|ZIP.16A,B
32|ZIP.16C,D
因而每一个ZIP指令把通道宽度定义为32位,而数据单元宽度定义为16位,因而,每一个通道内第二寄存器中的第一数据单元与第一寄存器中的第二数据单元交换,如在图57B中四个对角线箭头表示的线所示。因而,在4个2×2的块1137、1141、1143和1145中的每一个内出现单独的转置。
然后,图57C图解说明作为执行以下两个指令的结果而发生的转置:
64|ZIP.32A,C
64|ZIP.32B,D
按照这些指令,通道宽度设置为64位(即源寄存器的整个宽度),而数据单元宽度选择为32位。因而,执行第一ZIP指令造成寄存器A 1147内的第二32位宽的数据单元与寄存器C 1151内第一32位宽数据单元交换。类似地,第二ZIP指令造成寄存器B 1149内第二32位宽数据单元与寄存器D 1153内第一32位数据单元交换。因而,如在图57C中对角线箭头直线所图解说明的,其结果是左上角中的2×1像素块被右下角的2×1像素块替换。因而,如本专业的技术人员将会意识到的,四个ZIP指令的该序列已经围绕对角线1136转置了像素的整个4×4阵列1135。图58图解说明使用交织指令的一个特定实例。在此实例中,考虑由实部和虚部构成的复数。这可以是这样的情况,需要对一系列复数的实部执行某些计算,而同时需要对那些复数的虚部执行单独的计算。其结果是,实部可能已经安排在特定的寄存器D0 1155中,而虚部可能已经放入单独的寄存器D1 1160内。在某些时刻,这可能要求再结合每一个复数的实部和虚部,使得它们在寄存器内彼此相邻。如在图58中图解说明的,这可以通过使用64|ZIP.16指令实现,它把通道宽度设置为源寄存器的整个宽度,而把数据单元宽度设置为16位,即,实部和虚部中的每一个的宽度。如图58下半部分所示,执行ZIP指令的结果是每一个复数a、b、c、d的实部和虚部中的每一个在寄存器空间内再结合,目的寄存器D01155包含复数a和b的实部和虚部,而目的寄存器D1 1160包含复数c和d的实部和虚部。
不仅是象交织和去交织指令的数据重新排列指令可以利用与数据单元大小无关地指定通道大小的能力。例如,图59A和59B图解说明可以用来执行两个复数的乘法的两个指令的序列。具体地说,想要用复数B乘以复数A,以便产生结果复数D,如通过以下公式说明的:
Dre=Are*Bre-Aim*Bim
Dim=Are*Bim+Aim*Bre
图59A示出响应于以下形式的第一乘法指令所执行的操作:
32|MUL.16 Dd,Dn,Dm[0]
源寄存器是64位寄存器,而乘法指令指定32位的通道宽度和16位的数据单元大小。乘法指令安排在每一个通道内,以便使第一源寄存器Dm 1165内该通道中的第一数据单元乘以第二源寄存器Dn1170内该通道中的各个数据单元(如图59A所示),结果值存储在目的寄存器Dd 1175内相应的位置。每一个通道内,目的寄存器中的第一数据单元被认为代表复数部分结果的实部,而第二数据单元被认为代表复数部分结果的虚部。
在执行图59A中图解说明的指令之后,然后执行以下指令:
32|MASX.16 Dd,Dn,Dm[1]
如图59B图解说明的,此指令是“乘法加法减法带交换”指令。按照该指令,源寄存器Dm的每一个通道内的第二数据单元,以图59B图解说明的方式乘以第二源寄存器Dn的相应通道内的每一个数据单元。于是,乘法的结果加到已经存储在目的寄存器Dd 1175内的相应的数据单元的值,或者从其中减去,然后结果放回目的寄存器Dd1175。把图59A和59B的操作与之前所识别的通过依次使用这两个指令生成的结果复数D的实部和虚部用的公式加以比较将会意识到,该计算可以并行地对两组复数执行,由此能够实现SIMD方法的速度好处。
根据上述实例,应该理解,通过提供除数据单元大小外具有指定通道大小能力的指令,潜在地从SIMD实现方案得益的操作的数目增加了,因此在实现以SIMD方式操作方面提供大大改善的灵活性。
本技术提供对矢量执行SIMD处理的能力,其中源和目的数据单元宽度是不同的。在此环境下特别有用的操作是加法或减法,然后返回高半部SIMD操作。图60表示按照本技术的加法返回高半部的操作实例。SIMD解码器16内的指令解码器(见图1)对指令VADH.I16.I32 Dd,Qn,Qm进行解码,并执行图60中图解说明的加法返回高半部,并在下面陈述。
在图60中,位于SIMD寄存器文件20(见图1)内的两个源寄存器Qn和Qm包含32位数据单元a和b的矢量。它们加在一起形成16位数据单元Dd的矢量,还位于从数据和的高半部形成的寄存器文件20内:
Qn=[a3 a2 a1 a0]
Qm=[b3 b2 b1 b]
输出
Dd[(a3+b3)>>16,(a2+b2)>>16,(a1+b1)>>16,(a0+b0)>>16]。
图61示意地示出类似于图60所示的操作,但在这种情况下,解码的指令是VRADH.I16.I32 Dd,Qn,Qm,所执行的操作是加法四舍五入返回高。这是以非常类似于在图60中所图解说明的操作的办法执行的,但是高半部四舍五入。在此实例中,这是通过在加法之后和取高半部之前,加上一个数据值而完成的,该数据值的下半部的最高有效位位置中为1,并且在其它地方为0。
在该图中和在图61一样,为清晰起见,中间值用虚线表示。
可以支持的其它指令(图中未示出)是加法或减法带饱和返回高。在这种情况下,需要时,在取高半部之前使加法或减法饱和。
表11示出本技术支持的一些指令的实例。Size<a>返回数据类型的大小(位),而round<td>返回四舍五入常数1<<(size<dt>-1)。
助记符 | 数据类型 | 操作数格式 | 说明 |
VADH | .I8.I16.I16.I32.I32.I64 | Dd,Qn,Qm | 加法返回高半部Vd[i]:=(Vn[i]+Vm[i])>>size<td> |
VRADH | .I8.I16.I16.I32.I32.I64 | Dd,Qn,Qm | 加法带四舍五入的返回高半部Vd[i]:=(Vn[i]+Vm[i]+round<td>)>>size<td> |
VSBH | .I8.I16.I16.I32.I32.I64 | Dd,Qn,Qm | 减法返回高半部Vd[i]:=(Vn[i]-Vm[i])>>size<td> |
VRSBH | .I8.I16.I16.I32.I32.I64 | Dd,Qn,Qm | 减法带四舍五入的返回高半部Vd[i]:=(Vn[i]-Vm[i]+round<td>)>>size<td> |
表11
本技术可以对不同类型的数据执行,假定获取数据的高半部是需要做的事情。这对定点数执行的处理特别适宜。
上述技术具有许多用途,而且可以例如用来加速SIMD FFT的实现。SIMD对执行FFT(快速傅里叶变换)操作特别有用,其中需要对多个数据执行相同的操作。因而,利用SIMD处理允许并行地处理多个数据。对FFT执行的计算往往涉及把复数乘在一起。这涉及数据值的乘法,然后对乘积进行加法或减法。在SIMD处理中这些计算是并行执行的,以便提高处理速度。
下面给出需要执行的这种求和的简单实例。
(a+ic)*(b+id)=e+if
因而,实部e等于:a*b-c*d,而
虚部f等于:a*d+c*b
图62示出用于求出实部e的计算。如可以看到的,包含16位数据单元的矢量a乘以包含相同大小数据单元的矢量b,而矢量c乘以矢量d。这些乘积产生两个带有32位数据单元的矢量。为了产生e,需要将这些矢量之一从另一个中减去,但是最后的结果只需要达到和原值相同的准确性。因而,需要带有16位数据单元的结果矢量。此操作可以响应单个指令VSBH.16.32 Dd,Qn,Qm执行,如图中所示。因此,该指令减法返回高半部在这种环境下特别有用。另外,它具有允许算术运算以加宽的数据宽度执行,只是在算术运算(减法)之后才变窄。这一般地给出比执行减法之前变窄更准确的结果。
ARM已经为它们的指令集提供了指令编码,该指令编码允许用某些指令来指定立即数。显然,若利用指令对其进行编码,则立即数的大小应该受到限制。
大小适合于利用指令编码的立即值在数据单元并行处理的SIMD处理中用途有限。为了解决该问题,提供带有产生的常数的指令集,它具有与此相关联的受限大小的立即数,但是具有扩展此立即数的能力。因而,例如字节大小的立即数可以扩展为产生64位常数或立即数。这样,立即数可以用在带有64位源寄存器的逻辑运算中,包括在SIMD处理中的多个源数据单元。
图63示出立即数abcdefgh,就是说,它与控制值一起编码在指令内,这如表左手列所示。可以扩展二元立即数,以便填充64位寄存器,实际的扩展根据指令和与它相关联的控制部分执行。在所示的实例中,8位立即数abcdefgh在64位数据值内的不同位置上重复,立即数放置的位置取决于控制值。另外,0和/或1可以用来填充其中不放置数值的空的空间。1和/或0的选择由控制值确定。因而,在此实例中,可以从具有8位立即数和4位控制值的指令产生用于SIMD处理的范围很宽的可能常数。
在一个实施例中(表的最后一行),不是在某些位置重复立即数,而是扩展立即数的各个位,以便产生新的64位立即数或常数。
如在某些情况下可以看到的,常数在每一个通道是相同的,而在其它情况下,在一些通道中出现不同的常数。在某些实施例中(未示出),还提供反转这些常数的可能性,这也增加了能够产生的常数的数目。
下面给出如图63所示可以用来产生常数的指令的格式的实例。指令中<value>是数据部分或立即数,而<mode>是控制部分,它提供在所产生的常数内的<value>部分如何被扩展的指示(如图63的表中不同行所示)。
VMOV Dd,#<value>,<mode>
其中
<value>是字节
<mode>是列举的扩展功能之一
这些修改后的指令一般具有相关的数据值,该数据值具有包括立即数部分<value>和控制部分<mode>。如图63所示,控制部分指示立即数如何被扩展。这可以各种方法执行,但在某些实施例中,控制部分指示将利用常数产生逻辑来执行常数的哪些扩展。
图64示意地示出常数产生逻辑的实例,它可以用来按照本技术从数据部分1210和与指令相关联的控制部分1200产生常数。在所示的实例中,控制部分1200控制该控制产生逻辑1220,该逻辑1220包括门1230,以便向要产生的常数1240内每一个位输出数据值1210的一部分,或者1或0。
图65示出类似于图1所示的数据处理器(集成电路),相同的附图标记代表相同的功能部件。图65不同于图1的地方在于,它明确给出了常数产生逻辑1220。常数产生逻辑1220可以看作与解码控制部分14、16相邻,或形成其一部分。如可以看到的,指令从指令流水线12发送至解码/控制逻辑14、16。这产生控制处理器的SIMD处理逻辑18、装入存储单元22和标量处理部分4、6、8、10的操作的控制信号。若在解码/控制部分14、16收到带有常数产生的指令,则常数产生逻辑用来产生用于SIMD处理的常数。可以把常数直接发送至SIMD寄存器数据存储器20(虚线1222),或者如果带有常数产生的指令包括SIMD数据处理部分,则把所产生的常数发送到SIMD处理逻辑(直线1224),其中对所产生的常数执行其它操作,以便产生新的数据值。
图66A和B示意地图解说明图65所示的两个不同路径。图66A示出其中指令产生直接发送至寄存器存储器即虚线1222的常数的情况。图66B示出带有产生的常数的指令包括数据处理部分的情况。在这种情况下,数据处理操作(OP)是对所产生的常数和另一个源操作数1250执行的,以便响应该指令产生最后的数据值1260,这对应于图65的线1224。
除了图63所示的常数和它们的反以外,对所产生的常数可以执行附加的数据处理操作,诸如OR(“或”)、AND(“与”)、测试、加法或减法,以便产生范围宽得多的数据值。这对应于图13B和在图65中的路径1224。表12给出按位AND和按位OR的实例,它们可以用来产生某些附加的数据值。
助记符 | 数据类型 | 操作数格式 | 说明 |
VAND | 无 | Dd,#<value>,<mode> | 与所产生的常数按位“与”Vd:=Vd&<所产生的常数> |
VORR | 无 | Dd,#<value>,<mode> | 与所产生的常数按位“或”Vd:=Vd|<所产生的常数> |
对所产生的常数执行其它数据处理操作的能力可以有各种各样的用途。例如,图67示出本技术的实施例可以如何用来产生位屏蔽,以便从矢量中的若干数据单元中提取某一位或某些位。在所示的实例中,从源矢量提取每一个数据单元的第四位。最初通过重复立即数8来扩展它,后跟逻辑AND指令,它使所产生的常数与源矢量进行AND运算,从每一个数据单元提取所需的位。这些操作是响应以下指令执行的:
VAND Dd,#0b00001000,0b1100
其中<mode>值1100涉及所产生的常数,包括扩展的数据部分(见图63)。
尽管这里已经描述了特定的实施例,但应该理解,本发明不限于此,而且在本发明的范围内可以对其进行许多修改和添加。例如,在不脱离本发明的范围的情况下,可以对独立权项的特征与后面的从属权项的特征进行不同组合。
Claims (57)
1.一种用于处理数据的设备,所述设备包括:
寄存器数据存储器,可操作上用于存储多个数据单元;以及
处理逻辑,响应于数据处理指令来对作为所述寄存器数据存储器的寄存器访问的所选择的多个数据单元并行地执行数据处理操作;其中
所述选择的多个数据单元中的数据单元共享多个不同数据单元大小之一,所述寄存器具有多个不同寄存器大小之一,并且所述数据处理指令为所述数据处理操作指定由所述选择的多个数据单元共享的数据单元大小以及所述寄存器的寄存器大小,并且还包括:
寄存器访问逻辑,可操作上用于根据所述寄存器的所述寄存器大小,将所述寄存器映射到所述寄存器数据存储器的一部分,使得存储在所述寄存器数据存储器的所述部分中的数据单元可作为具有不同寄存器大小的各自不同寄存器的一部分进行访问。
2.如权利要求1所述的设备,其中所述数据处理指令为一个或多个源寄存器中的每一个指定各自的源寄存器大小以及由所述数据处理指令指定的源数据单元大小。
3.如权利要求1和2中任一项所述的设备,其中所述数据处理指令为一个或多个目的寄存器指定目的寄存器大小以及由所述数据处理指令指定的目的数据单元大小。
4.如权利要求2和3所述的设备,其中所述目的数据单元大小不同于所述一个或多个源数据单元大小中的至少一个。
5.如上述权利要求中任一项所述的设备,其中用两个不同寄存器向所述寄存器数据存储器写入的一组数据单元能够全部一起从所述寄存器数据存储器在另一单个寄存器内读出。
6.如权利要求5所述的设备,其中所述两个不同寄存器写入所述寄存器数据存储器的相邻部分。
7.如权利要求6所述的设备,其中所述另一单个寄存器的寄存器大小等于所述两个不同寄存器的寄存器大小之和。
8.如上述权利要求中任一项所述的设备,其中一起从单个寄存器向所述寄存器数据存储器写入的一组数据单元能够从所述寄存器数据存储器在另外两个不同寄存器内读出。
9.如权利要求8所述的设备,其中所述另外两个不同寄存器从所述寄存器数据存储器的相邻部分读出。
10.如权利要求9所述的设备,其中所述单个寄存器的寄存器大小等于所述另外两个不同寄存器的寄存器大小之和。
11.如权利要求1至7中任一项所述的设备,其中一起从具有第一寄存器大小的第一寄存器向所述寄存器数据存储器写入的一组数据单元能够从所述寄存器数据存储器在具有第二寄存器大小的第二寄存器内读出,所述第一寄存器大小不同于所述第二寄存器大小。
12.如上述权利要求中任一项所述的设备,其中所述数据处理指令为两个源寄存器指定各自的寄存器大小S1和S2,并且为目的寄存器指定寄存器大小D。
13.如权利要求12所述的设备,其中S1=S2=D。
14.如权利要求12所述的设备,其中2×S1=2×S2=D。
15.如权利要求12所述的设备,其中2×S1=S2=D。
16.如权利要求12所述的设备,其中S1=S2=2×D。
17.如权利要求1至11中任一项所述的设备,其中所述数据处理指令为源寄存器指定寄存器大小S,并且为目的寄存器指定寄存器大小D。
18.如权利要求17所述的设备,其中S=D。
19.如权利要求17所述的设备,其中2×S=D。
20.如权利要求17所述的设备,其中S=2×D。
21.如上述权利要求中任一项所述的设备,其中所述数据处理指令包括寄存器指定字段,所述寄存器指定字段可操作上用于指定所述寄存器数据存储器中的寄存器,对于给定寄存器指定字段的所述寄存器对应于所述寄存器数据存储器的不同部分,取决于所述数据单元大小和所述寄存器大小。
22.如权利要求21所述的设备,其中在用使用不同寄存器大小和不同数据单元大小中的至少一个的寄存器访问时,对于给定数据单元大小和寄存器大小,对应于一个范围的所述寄存器指定字段的多个寄存器映射到所述寄存器数据存储器的相连部分。
23.如上述权利要求中任一项所述的设备,其中具有不同寄存器大小的所述不同寄存器包括至少一个其数据单元大小不同于存储在所述部分中的所述数据单元的大小的寄存器。
24.如上述权利要求中任一项所述的设备,其中所述数据处理指令包括对所述寄存器的寄存器号编码的多个位,所述多个位可映射到相连字段的位,所述相连字段的位可根据所述寄存器大小旋转多个位位置,以形成所述寄存器号。
25.如权利要求24所述的设备,其中所述寄存器访问逻辑还可操作上用于作为存储从所述寄存器数据存储器读出的单个数据单元的标量寄存器来访问所述寄存器数据存储器。
26.如权利要求24所述的设备,其中所述寄存器访问逻辑还可操作上用于作为存储从所述寄存器数据存储器读出的单个数据单元的多个复本的寄存器来访问所述寄存器数据存储器。
27.如权利要求25和26中任一项所述的设备,其中所述寄存器访问逻辑可操作上用于产生用于访问所述寄存器数据存储器的行地址和列地址,所述相连字段的位的第一部分对应于所述行地址,并且所述相连字段的位的第二部分对应于所述列地址。
28.如权利要求27所述的设备,其中所述第一部分和所述第二部分之间一个或多个边界的位置根据所述数据单元大小而改变。
29.一种处理数据的方法,所述方法包括如下步骤:
在寄存器数据存储器中存储多个数据单元;以及
响应于数据处理指令,对作为所述寄存器数据存储器的寄存器访问的所选择的多个数据单元并行地执行数据处理操作;其中
所述选择的多个数据单元中的数据单元共享多个不同数据单元大小之一,所述寄存器具有多个不同寄存器大小之一,并且所述数据处理指令为所述数据处理操作指定由所述选择的多个数据单元共享的数据单元大小以及所述寄存器的寄存器大小;并且还包括:
根据所述寄存器的所述寄存器大小,将所述寄存器映射到所述寄存器数据存储器的一部分,使得存储在所述寄存器数据存储器的所述部分中的数据单元可作为具有不同寄存器大小的各自不同寄存器的一部分进行访问。
30.如权利要求29所述的方法,其中所述数据处理指令为一个或多个源寄存器中的每一个指定各自的源寄存器大小以及由所述数据处理指令指定的源数据单元大小。
31.如权利要求29和30中任一项所述的方法,其中所述数据处理指令为一个或多个目的寄存器指定目的寄存器大小以及由所述数据处理指令指定的目的数据单元大小。
32.如权利要求30和31所述的方法,其中所述目的数据单元大小不同于所述一个或多个源数据单元大小中的至少一个。
33.如权利要求29至32中任一项所述的方法,其中用两个不同寄存器向所述寄存器数据存储器写入的一组数据单元能够全部一起从所述寄存器数据存储器在另一单个寄存器内读出。
34.如权利要求33所述的方法,其中所述两个不同寄存器写入所述寄存器数据存储器的相邻部分。
35.如权利要求34所述的方法,其中所述另一单个寄存器的寄存器大小等于所述两个不同寄存器的寄存器大小之和。
36.如权利要求29至35中任一项所述的方法,其中一起从单个寄存器向所述寄存器数据存储器写入的一组数据单元能够从所述寄存器数据存储器在另外两个不同寄存器内读出。
37.如权利要求36所述的方法,其中所述另外两个不同寄存器从所述寄存器数据存储器的相邻部分读出。
38.如权利要求37所述的方法,其中所述单个寄存器的寄存器大小等于所述另外两个不同寄存器的寄存器大小之和。
39.如权利要求29至35中任一项所述的方法,其中一起从具有第一寄存器大小的第一寄存器向所述寄存器数据存储器写入的一组数据单元能够从所述寄存器数据存储器在具有第二寄存器大小的第二寄存器内读出,所述第一寄存器大小不同于所述第二寄存器大小。
40.如权利要求29至39中任一项所述的方法,其中所述数据处理指令为两个源寄存器指定各自的寄存器大小S1和S2,并且为目的寄存器指定寄存器大小D。
41.如权利要求40所述的方法,其中S1=S2=D。
42.如权利要求40所述的方法,其中2×S1=2×S2=D。
43.如权利要求40所述的方法,其中2×S1=S2=D。
44.如权利要求40所述的方法,其中S1=S2=2×D。
45.如权利要求29至39中任一项所述的方法,其中所述数据处理指令为源寄存器指定寄存器大小S,并且为目的寄存器指定寄存器大小D。
46.如权利要求45所述的方法,其中S=D。
47.如权利要求45所述的方法,其中2×S=D。
48.如权利要求45所述的方法,其中S=2×D。
49.如权利要求29至44中任一项所述的方法,其中所述数据处理指令包括寄存器指定字段,所述寄存器指定字段可操作上用于指定所述寄存器数据存储器中的寄存器,对于给定寄存器指定字段的所述寄存器对应于所述寄存器数据存储器的不同部分,取决于所述数据单元大小和所述寄存器大小。
50.如权利要求49所述的方法,其中在用使用不同寄存器大小和不同数据单元大小中的至少一个的寄存器访问时,对于给定数据单元大小和寄存器大小,对应于一个范围的所述寄存器指定字段的多个寄存器映射到所述寄存器数据存储器的相连部分。
51.如权利要求29至50中任一项所述的方法,其中具有不同寄存器大小的所述不同寄存器包括至少一个其数据单元大小不同于存储在所述部分中的所述数据单元的大小的寄存器。
52.如权利要求29至51中任一项所述的方法,其中所述数据处理指令包括对所述寄存器的寄存器号编码的多个位,所述多个位可映射到相连字段的位,所述相连字段的位可根据所述寄存器大小旋转多个位位置,以形成所述寄存器号。
53.如权利要求52所述的方法,其中所述寄存器访问逻辑还可操作上用于作为存储从所述寄存器数据存储器读出的单个数据单元的标量寄存器来访问所述寄存器数据存储器。
54.如权利要求52所述的方法,其中所述寄存器访问逻辑还可操作上用于作为存储从所述寄存器数据存储器读出的单个数据单元的多个复本的寄存器来访问所述寄存器数据存储器。
55.如权利要求53至54中任一项所述的方法,其中所述寄存器访问逻辑可操作上用于产生用于访问所述寄存器数据存储器的行地址和列地址,所述相连字段的位的第一部分对应于所述行地址,并且所述相连字段的位的第二部分对应于所述列地址。
56.如权利要求55所述的方法,其中所述第一部分和所述第二部分之间一个或多个边界的位置根据所述数据单元大小而改变。
57.一种计算机程序产品,包括计算机程序,所述计算机程序包括至少一个数据处理指令,所述指令可操作上用于控制处理逻辑来执行如权利要求24至46中任一项所述的方法。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
GB0328513.7 | 2003-12-09 | ||
GB0328513A GB2409062C (en) | 2003-12-09 | 2003-12-09 | Aliasing data processing registers |
PCT/GB2004/002836 WO2005057417A2 (en) | 2003-12-09 | 2004-07-01 | Method and apparatus for performing packed data operations with element size control |
Publications (2)
Publication Number | Publication Date |
---|---|
CN1914592A true CN1914592A (zh) | 2007-02-14 |
CN1914592B CN1914592B (zh) | 2010-05-12 |
Family
ID=30129894
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2004800412896A Expired - Lifetime CN1914592B (zh) | 2003-12-09 | 2004-07-01 | 执行具有单元大小控制的紧缩数据操作的方法和设备 |
Country Status (11)
Country | Link |
---|---|
US (1) | US7822947B2 (zh) |
EP (1) | EP1692611B1 (zh) |
JP (1) | JP4727589B2 (zh) |
KR (1) | KR100996888B1 (zh) |
CN (1) | CN1914592B (zh) |
GB (1) | GB2409062C (zh) |
IL (1) | IL175901A (zh) |
MY (1) | MY137496A (zh) |
RU (1) | RU2006124547A (zh) |
TW (1) | TWI322958B (zh) |
WO (1) | WO2005057417A2 (zh) |
Cited By (18)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102043608A (zh) * | 2009-10-19 | 2011-05-04 | Arm有限公司 | 寄存器状态保存和恢复 |
CN103189837A (zh) * | 2011-10-18 | 2013-07-03 | 松下电器产业株式会社 | 混洗模式生成电路、处理器、混洗模式生成方法、命令 |
CN103606129A (zh) * | 2013-11-29 | 2014-02-26 | 广东威创视讯科技股份有限公司 | 图像处理系统中控制器与图像处理芯片的寻址方法和系统 |
CN104011668A (zh) * | 2011-12-22 | 2014-08-27 | 英特尔公司 | 用于将源操作数映射到不同范围的系统、装置和方法 |
CN104081342A (zh) * | 2011-12-23 | 2014-10-01 | 英特尔公司 | 经改进的插入指令的装置和方法 |
CN105531738A (zh) * | 2013-09-17 | 2016-04-27 | 富士通株式会社 | 菌落检查程序、菌落检查装置以及菌落检查方法 |
CN106415635A (zh) * | 2014-01-27 | 2017-02-15 | 邵通 | 一种双通道身份认证选择的装置、系统和方法 |
US9588764B2 (en) | 2011-12-23 | 2017-03-07 | Intel Corporation | Apparatus and method of improved extract instructions |
US9632980B2 (en) | 2011-12-23 | 2017-04-25 | Intel Corporation | Apparatus and method of mask permute instructions |
US9658850B2 (en) | 2011-12-23 | 2017-05-23 | Intel Corporation | Apparatus and method of improved permute instructions |
CN104063841B (zh) * | 2013-03-14 | 2018-01-19 | 英特尔公司 | 改善渲染效率的技术 |
US9946540B2 (en) | 2011-12-23 | 2018-04-17 | Intel Corporation | Apparatus and method of improved permute instructions with multiple granularities |
CN108369573A (zh) * | 2015-12-18 | 2018-08-03 | 英特尔公司 | 用于设置多个向量元素的操作的指令和逻辑 |
CN108733345A (zh) * | 2017-04-24 | 2018-11-02 | Arm 有限公司 | 乘法累加乘积指令 |
CN108845826A (zh) * | 2013-06-28 | 2018-11-20 | 英特尔公司 | 多寄存器存储器访问指令、处理器、方法和系统 |
CN109062608A (zh) * | 2012-09-28 | 2018-12-21 | 英特尔公司 | 用于独立数据上递归计算的向量化的读和写掩码更新指令 |
CN109298886A (zh) * | 2017-07-25 | 2019-02-01 | 合肥君正科技有限公司 | Simd指令执行方法、装置及处理器 |
CN112859377A (zh) * | 2019-11-28 | 2021-05-28 | 京东方科技集团股份有限公司 | 一种复用寄存器、三维显示装置及其控制方法 |
Families Citing this family (34)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7483595B2 (en) | 2004-09-16 | 2009-01-27 | Marvell International Technology Ltd. | Image processing method and device |
US20060218377A1 (en) * | 2005-03-24 | 2006-09-28 | Stexar Corporation | Instruction with dual-use source providing both an operand value and a control value |
US20070226469A1 (en) * | 2006-03-06 | 2007-09-27 | James Wilson | Permutable address processor and method |
US9069547B2 (en) | 2006-09-22 | 2015-06-30 | Intel Corporation | Instruction and logic for processing text strings |
JP5760532B2 (ja) * | 2011-03-14 | 2015-08-12 | 株式会社リコー | プロセッサ装置及びその演算方法 |
US8933954B2 (en) * | 2011-03-23 | 2015-01-13 | Qualcomm Incorporated | Register allocation for graphics processing |
US10803009B2 (en) * | 2011-07-14 | 2020-10-13 | Texas Instruments Incorporated | Processor with table lookup processing unit |
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 |
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 |
CN104011646B (zh) | 2011-12-22 | 2018-03-27 | 英特尔公司 | 用于产生按照数值顺序的连续整数的序列的处理器、方法、系统和指令 |
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 |
US9639356B2 (en) * | 2013-03-15 | 2017-05-02 | Qualcomm Incorporated | Arbitrary size table lookup and permutes with crossbar |
CN103235762B (zh) * | 2013-04-19 | 2016-06-22 | 中国科学院自动化研究所 | 一种自索引寄存器文件堆装置 |
US9772848B2 (en) * | 2014-11-14 | 2017-09-26 | Intel Corporation | Three-dimensional morton coordinate conversion processors, methods, systems, and instructions |
US9772849B2 (en) * | 2014-11-14 | 2017-09-26 | Intel Corporation | Four-dimensional morton coordinate conversion processors, methods, systems, and instructions |
US20170046156A1 (en) * | 2015-08-14 | 2017-02-16 | Qualcomm Incorporated | Table lookup using simd instructions |
US9852080B2 (en) | 2015-08-17 | 2017-12-26 | Qualcomm Incorporated | Efficiently generating selection masks for row selections within indexed address spaces |
US10275243B2 (en) * | 2016-07-02 | 2019-04-30 | Intel Corporation | Interruptible and restartable matrix multiplication instructions, processors, methods, and systems |
EP3586228B1 (en) * | 2017-02-23 | 2023-03-29 | ARM Limited | Element by vector operations in a data processing apparatus |
US10671349B2 (en) | 2017-07-24 | 2020-06-02 | Tesla, Inc. | Accelerated mathematical engine |
US11409692B2 (en) * | 2017-07-24 | 2022-08-09 | Tesla, Inc. | Vector computational unit |
US11893393B2 (en) | 2017-07-24 | 2024-02-06 | Tesla, Inc. | Computational array microprocessor system with hardware arbiter managing memory requests |
US10552154B2 (en) | 2017-09-29 | 2020-02-04 | Intel Corporation | Apparatus and method for multiplication and accumulation of complex and real packed data elements |
US11256504B2 (en) | 2017-09-29 | 2022-02-22 | Intel Corporation | Apparatus and method for complex by complex conjugate multiplication |
US11074073B2 (en) | 2017-09-29 | 2021-07-27 | Intel Corporation | Apparatus and method for multiply, add/subtract, and accumulate of packed data elements |
US10514924B2 (en) * | 2017-09-29 | 2019-12-24 | Intel Corporation | Apparatus and method for performing dual signed and unsigned multiplication of packed data elements |
US10795677B2 (en) | 2017-09-29 | 2020-10-06 | Intel Corporation | Systems, apparatuses, and methods for multiplication, negation, and accumulation of vector packed signed values |
US11243765B2 (en) | 2017-09-29 | 2022-02-08 | Intel Corporation | Apparatus and method for scaling pre-scaled results of complex multiply-accumulate operations on packed real and imaginary data elements |
US10534838B2 (en) | 2017-09-29 | 2020-01-14 | Intel Corporation | Bit matrix multiplication |
US10664277B2 (en) | 2017-09-29 | 2020-05-26 | Intel Corporation | Systems, apparatuses and methods for dual complex by complex conjugate multiply of signed words |
US10802826B2 (en) | 2017-09-29 | 2020-10-13 | Intel Corporation | Apparatus and method for performing dual signed and unsigned multiplication of packed data elements |
US10795676B2 (en) | 2017-09-29 | 2020-10-06 | Intel Corporation | Apparatus and method for multiplication and accumulation of complex and real packed data elements |
US11561791B2 (en) | 2018-02-01 | 2023-01-24 | Tesla, Inc. | Vector computational unit receiving data elements in parallel from a last row of a computational array |
US11449336B2 (en) * | 2019-05-24 | 2022-09-20 | Texas Instmments Incorporated | Method of storing register data elements to interleave with data elements of a different register, a processor thereof, and a system thereof |
Family Cites Families (62)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4876660A (en) * | 1987-03-20 | 1989-10-24 | Bipolar Integrated Technology, Inc. | Fixed-point multiplier-accumulator architecture |
JPH0778735B2 (ja) * | 1988-12-05 | 1995-08-23 | 松下電器産業株式会社 | キャッシュ装置と命令読出し装置 |
US5771368A (en) * | 1990-10-29 | 1998-06-23 | Sun Microsystems, Inc. | Memory addressing scheme for increasing the number of memory locations available in a computer for storing higher precision numbers |
JPH05233281A (ja) * | 1992-02-21 | 1993-09-10 | Toshiba Corp | 電子計算機 |
US5408670A (en) * | 1992-12-18 | 1995-04-18 | Xerox Corporation | Performing arithmetic in parallel on composite operands with packed multi-bit components |
DE69424355T2 (de) * | 1993-08-31 | 2001-02-15 | Sun Microsystems, Inc. | Speicheradressierungsschema zur Erhöhung der Anzahl von Speicherplätzen in einem Rechner zur Speicherung von Doppelgenauigkeitszahlen |
US5481743A (en) * | 1993-09-30 | 1996-01-02 | Apple Computer, Inc. | Minimal instruction set computer architecture and multiple instruction issue method |
US5881302A (en) * | 1994-05-31 | 1999-03-09 | Nec Corporation | Vector processing unit with reconfigurable data buffer |
US6009508A (en) * | 1994-06-21 | 1999-12-28 | Sgs-Thomson Microelectronics Limited | System and method for addressing plurality of data values with a single address in a multi-value store on FIFO basis |
GB9412434D0 (en) * | 1994-06-21 | 1994-08-10 | Inmos Ltd | Computer instruction compression |
GB9412487D0 (en) * | 1994-06-22 | 1994-08-10 | Inmos Ltd | A computer system for executing branch instructions |
US5513366A (en) * | 1994-09-28 | 1996-04-30 | International Business Machines Corporation | Method and system for dynamically reconfiguring a register file in a vector processor |
EP0795155B1 (en) * | 1994-12-01 | 2003-03-19 | Intel Corporation | A microprocessor having a multiply operation |
US5761103A (en) * | 1995-03-08 | 1998-06-02 | Texas Instruments Incorporated | Left and right justification of single precision mantissa in a double precision rounding unit |
GB9509987D0 (en) * | 1995-05-17 | 1995-07-12 | Sgs Thomson Microelectronics | Manipulation of data |
GB9509983D0 (en) * | 1995-05-17 | 1995-07-12 | Sgs Thomson Microelectronics | Replication of data |
GB9509989D0 (en) * | 1995-05-17 | 1995-07-12 | Sgs Thomson Microelectronics | Manipulation of data |
GB9509988D0 (en) * | 1995-05-17 | 1995-07-12 | Sgs Thomson Microelectronics | Matrix transposition |
GB9513515D0 (en) * | 1995-07-03 | 1995-09-06 | Sgs Thomson Microelectronics | Expansion of data |
GB9514684D0 (en) * | 1995-07-18 | 1995-09-13 | Sgs Thomson Microelectronics | An arithmetic unit |
GB9514695D0 (en) * | 1995-07-18 | 1995-09-13 | Sgs Thomson Microelectronics | Combining data values |
JP3526976B2 (ja) * | 1995-08-03 | 2004-05-17 | 株式会社日立製作所 | プロセッサおよびデータ処理装置 |
US6295599B1 (en) * | 1995-08-16 | 2001-09-25 | Microunity Systems Engineering | System and method for providing a wide operand architecture |
US5907865A (en) * | 1995-08-28 | 1999-05-25 | Motorola, Inc. | Method and data processing system for dynamically accessing both big-endian and little-endian storage schemes |
AU6905496A (en) * | 1995-09-01 | 1997-03-27 | Philips Electronics North America Corporation | Method and apparatus for custom operations of a processor |
US6088783A (en) * | 1996-02-16 | 2000-07-11 | Morton; Steven G | DPS having a plurality of like processors controlled in parallel by an instruction word, and a control processor also controlled by the instruction word |
US5937178A (en) * | 1996-02-13 | 1999-08-10 | National Semiconductor Corporation | Register file for registers with multiple addressable sizes using read-modify-write for register file update |
US5808875A (en) * | 1996-03-29 | 1998-09-15 | Intel Corporation | Integrated circuit solder-rack interconnect module |
US6058465A (en) * | 1996-08-19 | 2000-05-02 | Nguyen; Le Trong | Single-instruction-multiple-data processing in a multimedia signal processor |
US5838984A (en) * | 1996-08-19 | 1998-11-17 | Samsung Electronics Co., Ltd. | Single-instruction-multiple-data processing using multiple banks of vector registers |
TW364976B (en) * | 1996-09-23 | 1999-07-21 | Arm Corp | Input operand control in data processing systems |
TW380237B (en) | 1996-09-23 | 2000-01-21 | Advanced Risc Mach Ltd | Data processing system register control |
GB2317467B (en) | 1996-09-23 | 2000-11-01 | Advanced Risc Mach Ltd | Input operand control in data processing systems |
US5996066A (en) * | 1996-10-10 | 1999-11-30 | Sun Microsystems, Inc. | Partitioned multiply and add/subtract instruction for CPU with integrated graphics functions |
US6173366B1 (en) * | 1996-12-02 | 2001-01-09 | Compaq Computer Corp. | Load and store instructions which perform unpacking and packing of data bits in separate vector and integer cache storage |
US5909572A (en) * | 1996-12-02 | 1999-06-01 | Compaq Computer Corp. | System and method for conditionally moving an operand from a source register to a destination register |
US5893145A (en) * | 1996-12-02 | 1999-04-06 | Compaq Computer Corp. | System and method for routing operands within partitions of a source register to partitions within a destination register |
US5991531A (en) * | 1997-02-24 | 1999-11-23 | Samsung Electronics Co., Ltd. | Scalable width vector processor architecture for efficient emulation |
US5898896A (en) * | 1997-04-10 | 1999-04-27 | International Business Machines Corporation | Method and apparatus for data ordering of I/O transfers in Bi-modal Endian PowerPC systems |
US5973705A (en) * | 1997-04-24 | 1999-10-26 | International Business Machines Corporation | Geometry pipeline implemented on a SIMD machine |
US6047304A (en) * | 1997-07-29 | 2000-04-04 | Nortel Networks Corporation | Method and apparatus for performing lane arithmetic to perform network processing |
US6209017B1 (en) * | 1997-08-30 | 2001-03-27 | Lg Electronics Inc. | High speed digital signal processor |
GB2329810B (en) * | 1997-09-29 | 2002-02-27 | Science Res Foundation | Generation and use of compressed image data |
US5933650A (en) * | 1997-10-09 | 1999-08-03 | 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 |
US6085213A (en) * | 1997-10-23 | 2000-07-04 | Advanced Micro Devices, Inc. | Method and apparatus for simultaneously multiplying two or more independent pairs of operands and summing the products |
US6223198B1 (en) * | 1998-08-14 | 2001-04-24 | Advanced Micro Devices, Inc. | Method and apparatus for multi-function arithmetic |
US6038583A (en) * | 1997-10-23 | 2000-03-14 | Advanced Micro Devices, Inc. | Method and apparatus for simultaneously multiplying two or more independent pairs of operands and calculating a rounded products |
US6269384B1 (en) * | 1998-03-27 | 2001-07-31 | Advanced Micro Devices, Inc. | Method and apparatus for rounding and normalizing results within a multiplier |
US6144980A (en) * | 1998-01-28 | 2000-11-07 | Advanced Micro Devices, Inc. | Method and apparatus for performing multiple types of multiplication including signed and unsigned multiplication |
US6223277B1 (en) * | 1997-11-21 | 2001-04-24 | Texas Instruments Incorporated | Data processing circuit with packed data structure capability |
US6223320B1 (en) * | 1998-02-10 | 2001-04-24 | International Business Machines Corporation | Efficient CRC generation utilizing parallel table lookup operations |
US6334176B1 (en) * | 1998-04-17 | 2001-12-25 | Motorola, Inc. | Method and apparatus for generating an alignment control vector |
JP2000020486A (ja) * | 1998-06-29 | 2000-01-21 | Ricoh Co Ltd | Simd型演算器 |
US6292888B1 (en) * | 1999-01-27 | 2001-09-18 | Clearwater Networks, Inc. | Register transfer unit for electronic processor |
GB2352065B (en) | 1999-07-14 | 2004-03-03 | Element 14 Ltd | A memory access system |
US6408345B1 (en) * | 1999-07-15 | 2002-06-18 | Texas Instruments Incorporated | Superscalar memory transfer controller in multilevel memory organization |
EP1236097A4 (en) | 1999-09-01 | 2006-08-02 | Intel Corp | BRANCH COMMAND TO THE PROCESSOR |
US6546480B1 (en) * | 1999-10-01 | 2003-04-08 | Hitachi, Ltd. | Instructions for arithmetic operations on vectored data |
US6748521B1 (en) | 2000-02-18 | 2004-06-08 | Texas Instruments Incorporated | Microprocessor with instruction for saturating and packing data |
TW538335B (en) | 2001-12-24 | 2003-06-21 | Winbond Electronics Corp | Method and device for speeding up reading and writing the register for the processor |
US7761683B2 (en) * | 2002-03-05 | 2010-07-20 | Hewlett-Packard Development Company, L.P. | Variable width memory system and method |
-
2003
- 2003-12-09 GB GB0328513A patent/GB2409062C/en not_active Expired - Lifetime
-
2004
- 2004-07-01 RU RU2006124547/09A patent/RU2006124547A/ru not_active Application Discontinuation
- 2004-07-01 CN CN2004800412896A patent/CN1914592B/zh not_active Expired - Lifetime
- 2004-07-01 JP JP2006543598A patent/JP4727589B2/ja not_active Expired - Lifetime
- 2004-07-01 WO PCT/GB2004/002836 patent/WO2005057417A2/en active Application Filing
- 2004-07-01 EP EP04743183.8A patent/EP1692611B1/en not_active Expired - Lifetime
- 2004-07-01 KR KR1020067011129A patent/KR100996888B1/ko active IP Right Grant
- 2004-07-13 US US10/889,314 patent/US7822947B2/en active Active
- 2004-08-10 MY MYPI20043244A patent/MY137496A/en unknown
- 2004-08-11 TW TW093124099A patent/TWI322958B/zh not_active IP Right Cessation
-
2006
- 2006-05-24 IL IL175901A patent/IL175901A/en active IP Right Grant
Cited By (39)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102043608A (zh) * | 2009-10-19 | 2011-05-04 | Arm有限公司 | 寄存器状态保存和恢复 |
CN102043608B (zh) * | 2009-10-19 | 2015-02-04 | Arm有限公司 | 寄存器状态保存和恢复 |
CN103189837B (zh) * | 2011-10-18 | 2016-12-28 | 松下知识产权经营株式会社 | 混洗模式生成电路、处理器、混洗模式生成方法、命令 |
CN103189837A (zh) * | 2011-10-18 | 2013-07-03 | 松下电器产业株式会社 | 混洗模式生成电路、处理器、混洗模式生成方法、命令 |
US9292286B2 (en) | 2011-10-18 | 2016-03-22 | Panasonic Intellectual Property Management Co., Ltd. | Shuffle pattern generating circuit, processor, shuffle pattern generating method, and instruction sequence |
CN104011668A (zh) * | 2011-12-22 | 2014-08-27 | 英特尔公司 | 用于将源操作数映射到不同范围的系统、装置和方法 |
CN106843811A (zh) * | 2011-12-22 | 2017-06-13 | 英特尔公司 | 用于将源操作数映射到不同范围的系统、装置和方法 |
CN104011668B (zh) * | 2011-12-22 | 2017-03-22 | 英特尔公司 | 用于将源操作数映射到不同范围的系统、装置和方法 |
CN107193537A (zh) * | 2011-12-23 | 2017-09-22 | 英特尔公司 | 经改进的插入指令的装置和方法 |
CN107193537B (zh) * | 2011-12-23 | 2020-12-11 | 英特尔公司 | 经改进的插入指令的装置和方法 |
US11354124B2 (en) | 2011-12-23 | 2022-06-07 | Intel Corporation | Apparatus and method of improved insert instructions |
US9588764B2 (en) | 2011-12-23 | 2017-03-07 | Intel Corporation | Apparatus and method of improved extract instructions |
US11347502B2 (en) | 2011-12-23 | 2022-05-31 | Intel Corporation | Apparatus and method of improved insert instructions |
US9619236B2 (en) | 2011-12-23 | 2017-04-11 | Intel Corporation | Apparatus and method of improved insert instructions |
US9632980B2 (en) | 2011-12-23 | 2017-04-25 | Intel Corporation | Apparatus and method of mask permute instructions |
US9658850B2 (en) | 2011-12-23 | 2017-05-23 | Intel Corporation | Apparatus and method of improved permute instructions |
CN104081342A (zh) * | 2011-12-23 | 2014-10-01 | 英特尔公司 | 经改进的插入指令的装置和方法 |
CN104081342B (zh) * | 2011-12-23 | 2017-06-27 | 英特尔公司 | 经改进的插入指令的装置和方法 |
US11275583B2 (en) | 2011-12-23 | 2022-03-15 | Intel Corporation | Apparatus and method of improved insert instructions |
US10719316B2 (en) | 2011-12-23 | 2020-07-21 | Intel Corporation | Apparatus and method of improved packed integer permute instruction |
US9946540B2 (en) | 2011-12-23 | 2018-04-17 | Intel Corporation | Apparatus and method of improved permute instructions with multiple granularities |
US10474459B2 (en) | 2011-12-23 | 2019-11-12 | Intel Corporation | Apparatus and method of improved permute instructions |
US10467185B2 (en) | 2011-12-23 | 2019-11-05 | Intel Corporation | Apparatus and method of mask permute instructions |
US10459728B2 (en) | 2011-12-23 | 2019-10-29 | Intel Corporation | Apparatus and method of improved insert instructions |
CN109062608A (zh) * | 2012-09-28 | 2018-12-21 | 英特尔公司 | 用于独立数据上递归计算的向量化的读和写掩码更新指令 |
CN109062608B (zh) * | 2012-09-28 | 2023-09-22 | 英特尔公司 | 用于独立数据上递归计算的向量化的读和写掩码更新指令 |
CN104063841B (zh) * | 2013-03-14 | 2018-01-19 | 英特尔公司 | 改善渲染效率的技术 |
CN108845826A (zh) * | 2013-06-28 | 2018-11-20 | 英特尔公司 | 多寄存器存储器访问指令、处理器、方法和系统 |
CN108845826B (zh) * | 2013-06-28 | 2022-10-14 | 英特尔公司 | 多寄存器存储器访问指令、处理器、方法和系统 |
CN105531738A (zh) * | 2013-09-17 | 2016-04-27 | 富士通株式会社 | 菌落检查程序、菌落检查装置以及菌落检查方法 |
CN103606129B (zh) * | 2013-11-29 | 2016-08-24 | 广东威创视讯科技股份有限公司 | 图像处理系统中控制器与图像处理芯片的寻址方法和系统 |
CN103606129A (zh) * | 2013-11-29 | 2014-02-26 | 广东威创视讯科技股份有限公司 | 图像处理系统中控制器与图像处理芯片的寻址方法和系统 |
CN106415635A (zh) * | 2014-01-27 | 2017-02-15 | 邵通 | 一种双通道身份认证选择的装置、系统和方法 |
CN108369573A (zh) * | 2015-12-18 | 2018-08-03 | 英特尔公司 | 用于设置多个向量元素的操作的指令和逻辑 |
CN108733345A (zh) * | 2017-04-24 | 2018-11-02 | Arm 有限公司 | 乘法累加乘积指令 |
CN108733345B (zh) * | 2017-04-24 | 2024-03-15 | Arm 有限公司 | 乘法累加乘积指令 |
CN109298886A (zh) * | 2017-07-25 | 2019-02-01 | 合肥君正科技有限公司 | Simd指令执行方法、装置及处理器 |
CN112859377A (zh) * | 2019-11-28 | 2021-05-28 | 京东方科技集团股份有限公司 | 一种复用寄存器、三维显示装置及其控制方法 |
CN112859377B (zh) * | 2019-11-28 | 2023-03-14 | 京东方科技集团股份有限公司 | 一种复用寄存器、三维显示装置及其控制方法 |
Also Published As
Publication number | Publication date |
---|---|
JP2007514226A (ja) | 2007-05-31 |
CN1914592B (zh) | 2010-05-12 |
TWI322958B (en) | 2010-04-01 |
JP4727589B2 (ja) | 2011-07-20 |
WO2005057417A2 (en) | 2005-06-23 |
US20050172106A1 (en) | 2005-08-04 |
IL175901A (en) | 2011-11-30 |
EP1692611B1 (en) | 2018-08-22 |
KR100996888B1 (ko) | 2010-11-29 |
IL175901A0 (en) | 2006-10-05 |
GB0328513D0 (en) | 2004-01-14 |
GB2409062B (en) | 2006-08-16 |
WO2005057417A3 (en) | 2006-03-23 |
GB2409062A (en) | 2005-06-15 |
GB2409062C (en) | 2007-12-11 |
TW200525417A (en) | 2005-08-01 |
MY137496A (en) | 2009-02-27 |
EP1692611A2 (en) | 2006-08-23 |
US7822947B2 (en) | 2010-10-26 |
RU2006124547A (ru) | 2008-01-20 |
KR20070001903A (ko) | 2007-01-04 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN1914592A (zh) | 执行具有单元大小控制的紧缩数据操作的方法和设备 | |
CN1894659A (zh) | 在寄存器和存储器之间移动数据的数据处理设备和方法 | |
CN1890630A (zh) | 在寄存器和存储器之间移动数据的数据处理设备和方法 | |
CN1135468C (zh) | 对存储设备中信号数据字执行数字信号处理的方法和装置 | |
CN1186718C (zh) | 微控制器指令集 | |
CN1265280C (zh) | 扩展整数的计算域的范围 | |
CN1684058A (zh) | 处理器 | |
CN1059225A (zh) | 用于结构运算的运算单元 | |
CN1252587C (zh) | 移位分组数据的方法、装置和处理数字音频信号的系统 | |
CN1293518C (zh) | 具有割截与支援框线模式的三角形描绘方法与装置 | |
CN1656495A (zh) | 标量/矢量处理器 | |
CN1442797A (zh) | 数据处理装置和程序 | |
CN1260054A (zh) | 协处理器的数据访问控制 | |
CN1860441A (zh) | 用于可重新配置环境中的高效高性能数据操作元件 | |
CN1886744A (zh) | 在可扩展的处理器架构中增加高级指令所用的方法和装置 | |
CN1688966A (zh) | 包括对准或者广播指令的多媒体协处理器控制机制 | |
CN1188939A (zh) | 高速傅里叶变换装置、高速傅里叶反变换装置及方法 | |
CN86107558A (zh) | 具有带式随机存取存储器和地址发生器装置的单指令多数据单元阵列处理机 | |
CN1653487A (zh) | 具有边绘制单元的图形引擎以及合并有该图形引擎的电子装置及存储器 | |
CN1993709A (zh) | 信号处理设备 | |
CN1922630A (zh) | 图象处理装置、图象处理系统、图象处理方法、图象处理程序及集成电路装置 | |
CN1509475A (zh) | 存储单元电路、存储设备、运动矢量检测器、和运动补偿预测编码器 | |
CN1862521A (zh) | 处理器 | |
CN1115631C (zh) | 具有risc结构的八位微控制器 | |
CN1269052C (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 | ||
CX01 | Expiry of patent term |
Granted publication date: 20100512 |
|
CX01 | Expiry of patent term |