CN103562856B - 用于数据元素的跨步图案聚集及数据元素的跨步图案分散的系统、装置及方法 - Google Patents
用于数据元素的跨步图案聚集及数据元素的跨步图案分散的系统、装置及方法 Download PDFInfo
- Publication number
- CN103562856B CN103562856B CN201180071342.7A CN201180071342A CN103562856B CN 103562856 B CN103562856 B CN 103562856B CN 201180071342 A CN201180071342 A CN 201180071342A CN 103562856 B CN103562856 B CN 103562856B
- Authority
- CN
- China
- Prior art keywords
- data element
- instruction
- write mask
- memorizer
- value
- 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.)
- Expired - Fee Related
Links
- 238000000034 method Methods 0.000 title claims abstract description 38
- 230000015654 memory Effects 0.000 claims description 169
- 239000013598 vector Substances 0.000 claims description 124
- 238000003860 storage Methods 0.000 claims description 51
- 230000008859 change Effects 0.000 claims description 22
- 238000000151 deposition Methods 0.000 claims description 7
- 230000008901 benefit Effects 0.000 claims description 5
- VOXZDWNPVJITMN-ZBRFXRBCSA-N 17β-estradiol Chemical compound OC1=CC=C2[C@H]3CC[C@](C)([C@H](CC4)O)[C@@H]4[C@@H]3CCC2=C1 VOXZDWNPVJITMN-ZBRFXRBCSA-N 0.000 description 64
- 238000006073 displacement reaction Methods 0.000 description 51
- 238000010586 diagram Methods 0.000 description 26
- 238000007667 floating Methods 0.000 description 22
- 238000006243 chemical reaction Methods 0.000 description 16
- 230000008569 process Effects 0.000 description 15
- 239000003607 modifier Substances 0.000 description 14
- 238000012545 processing Methods 0.000 description 14
- 230000003321 amplification Effects 0.000 description 11
- 238000003199 nucleic acid amplification method Methods 0.000 description 11
- 239000000203 mixture Substances 0.000 description 10
- 230000002159 abnormal effect Effects 0.000 description 7
- 230000005540 biological transmission Effects 0.000 description 7
- 238000005516 engineering process Methods 0.000 description 7
- 230000006870 function Effects 0.000 description 7
- 238000011282 treatment Methods 0.000 description 7
- 239000003795 chemical substances by application Substances 0.000 description 6
- 230000008878 coupling Effects 0.000 description 6
- 238000010168 coupling process Methods 0.000 description 6
- 238000005859 coupling reaction Methods 0.000 description 6
- 238000013461 design Methods 0.000 description 6
- 235000013399 edible fruits Nutrition 0.000 description 6
- 239000006185 dispersion Substances 0.000 description 5
- 238000004519 manufacturing process Methods 0.000 description 5
- 230000003068 static effect Effects 0.000 description 5
- 238000004891 communication Methods 0.000 description 4
- 230000000295 complement effect Effects 0.000 description 4
- 230000000694 effects Effects 0.000 description 4
- 230000009471 action Effects 0.000 description 3
- 230000003139 buffering effect Effects 0.000 description 3
- 230000006835 compression Effects 0.000 description 3
- 238000007906 compression Methods 0.000 description 3
- 230000002349 favourable effect Effects 0.000 description 3
- 238000002372 labelling Methods 0.000 description 3
- 238000013519 translation Methods 0.000 description 3
- 230000006978 adaptation Effects 0.000 description 2
- 238000001816 cooling Methods 0.000 description 2
- 230000001934 delay Effects 0.000 description 2
- 230000007246 mechanism Effects 0.000 description 2
- 238000002156 mixing Methods 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 238000011084 recovery Methods 0.000 description 2
- 238000004088 simulation Methods 0.000 description 2
- 239000000758 substrate Substances 0.000 description 2
- 230000001629 suppression Effects 0.000 description 2
- 230000001960 triggered effect Effects 0.000 description 2
- 241000208340 Araliaceae Species 0.000 description 1
- 241001269238 Data Species 0.000 description 1
- 241000196324 Embryophyta Species 0.000 description 1
- 235000005035 Panax pseudoginseng ssp. pseudoginseng Nutrition 0.000 description 1
- 235000003140 Panax quinquefolius Nutrition 0.000 description 1
- 230000005856 abnormality Effects 0.000 description 1
- 230000001133 acceleration Effects 0.000 description 1
- 230000003190 augmentative effect Effects 0.000 description 1
- 230000004888 barrier function Effects 0.000 description 1
- 230000006399 behavior Effects 0.000 description 1
- 229910002056 binary alloy Inorganic materials 0.000 description 1
- 230000033228 biological regulation Effects 0.000 description 1
- 230000015572 biosynthetic process Effects 0.000 description 1
- 238000004364 calculation method Methods 0.000 description 1
- 238000013501 data transformation Methods 0.000 description 1
- 238000000354 decomposition reaction Methods 0.000 description 1
- 238000005034 decoration Methods 0.000 description 1
- 238000001514 detection method Methods 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 238000009826 distribution Methods 0.000 description 1
- 238000005538 encapsulation Methods 0.000 description 1
- 235000008434 ginseng Nutrition 0.000 description 1
- 238000010438 heat treatment Methods 0.000 description 1
- 230000008676 import Effects 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 238000002789 length control Methods 0.000 description 1
- 239000011159 matrix material Substances 0.000 description 1
- 230000005055 memory storage Effects 0.000 description 1
- 230000002093 peripheral effect Effects 0.000 description 1
- 238000013139 quantization Methods 0.000 description 1
- 230000008439 repair process Effects 0.000 description 1
- 230000000717 retained effect Effects 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
- 230000009466 transformation Effects 0.000 description 1
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
-
- 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/30018—Bit or string instructions
-
- 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/30003—Arrangements for executing specific machine instructions
- G06F9/3004—Arrangements for executing specific machine instructions to perform operations on memory
- G06F9/30043—LOAD or STORE instructions; Clear instruction
-
- 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/3004—Arrangements for executing specific machine instructions to perform operations on memory
- G06F9/30047—Prefetch instructions; cache control instructions
-
- 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/3013—Organisation of register space, e.g. banked or distributed register file according to data content, e.g. floating-point registers, address registers
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/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/30185—Instruction operation extension or modification according to one or more bits in the instruction, e.g. prefix, sub-opcode
-
- 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/34—Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes
- G06F9/345—Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes of multiple operands or results
- G06F9/3455—Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes of multiple operands or results using stride
-
- 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/34—Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes
- G06F9/355—Indexed addressing
-
- 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/34—Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes
- G06F9/355—Indexed addressing
- G06F9/3555—Indexed addressing using scaling, e.g. multiplication of index
-
- 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/383—Operand prefetching
-
- 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/3861—Recovery, e.g. branch miss-prediction, exception handling
- G06F9/3865—Recovery, e.g. branch miss-prediction, exception handling using deferred exception handling, e.g. exception flags
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Mathematical Physics (AREA)
- Executing Machine-Instructions (AREA)
- Complex Calculations (AREA)
- Advance Control (AREA)
Abstract
描述了在计算机处理器中用于执行聚集和分散跨步指令的系统、装置及方法的实施例。在一些实施例中,聚集跨步指令的执行造成来自存储器的跨步数据元素根据写屏蔽的至少若干位值而有条件地存储于目的地寄存器中。
Description
技术领域
本发明领域大体上关于计算机处理器体系结构,更具体地,关于在执行时造成特定结果的指令。
背景技术
随着处理器的单指令多数据(SIMD)宽度的增加,应用程序开发者(及编译器)发现由于其想同时操作的数据元素在存储器中并非连续的,所以完全利用SIMD硬件的困难日益增加。处理此困难的一个方法是使用聚集及分散指令。聚集指令从存储器读取一组(可能地)非连续元素并将其封包在一起,典型地到单个寄存器。分散指令则进行相反的处理。不幸地,甚至聚集及分散指令并未总是提供期望的效率。
附图说明
本发明通过例子而说明,且不局限于附图的图式,其中相似的附图标记表示类似元件,且其中:
图1描绘聚集跨步指令的执行的例子。
图2描绘聚集跨步指令的执行另一例子。
图3描绘聚集跨步指令的执行又一例子。
图4描绘使用处理器中聚集跨步指令的实施例。
图5描绘用于处理聚集跨步指令的方法的实施例。
图6描绘分散跨步指令的执行的例子。
图7描绘分散跨步指令的执行另一例子。
图8描绘分散跨步指令的执行又一例子。
图9描绘使用处理器中分散跨步指令的实施例。
图10描绘用处处理分散跨步指令的方法的实施例。
图11描绘聚集跨步预取指令的执行的例子。
图12描绘使用处理器中聚集跨步预取指令的实施例。
图13描绘用于处理聚集跨步预取指令的方法的实施例。
图14A为描绘根据本发明的实施例的一般矢量友好指令格式及其A类指令模板的方框图。
图14B为描绘根据本发明的实施例的一般矢量友好指令格式及其B类指令模板的方框图。
图15A-C描绘根据本发明的实施例的示范特定矢量友好指令格式。
图16为根据本发明的一个实施例的寄存器体系结构的方框图。
图17A为根据本发明的实施例的单一CPU核心的方框图,连同其到片上互连网络的连接及其2级(L2)高速缓存的本地子集。
图17B为根据本发明的实施例的图17A中部分CPU核心的分解图。
图18为描绘根据本发明的实施例的示范无序体系结构的方框图。
图19为根据本发明的实施例的系统的方框图。
图20为根据本发明的实施例的第二系统的方框图。
图21为根据本发明的实施例的第三系统的方框图。
图22为根据本发明的实施例的SoC的方框图。
图23为根据本发明的实施例的单核心处理器和具有集成的存储器控制器及图形的多核心处理器的方框图。
图24为方框图,根据本发明的实施例的对照将源指令集中的二进制指令转换成目标指令集中的二进制指令的软件指令转换器的使用的框图
具体实施方式
在下面的说明中,阐述了多方面具体细节。然而,应当理解的是,本发明的实施例可在不具有这些具体细节的情况下实现。在其它实例中,为了不使得本说明的理解不清晰,未详细示出公知的电路、结构和技术。
说明书中提到“一个实施例”、“实施例”、“示例性实施例”等表示所描述的实施例可包括特定的特征、结构或特点,但是每个实施例可不必包括该特定的特征、结构或特点。而且,这种术语不一定指的是同一实施例。此外,当结合实施例描述特定的特征、结构或特点时,假设结合其它实施例来实现这样的特征、结构或特点在本领域技术人员的知识范围内,无论是否做出明确说明。
在高性能计算/产量计算应用中,最常见非联系存储器参考图案为“跨步的存储器图案”。跨步的存储器图案是存储器位置的稀疏集,且每一元素与前者相离e19t相同固定量(称为跨步)。当存取多维“C”或其它高阶编程语言数组的对角线或行时,常发现此存储器图案。
跨步的图案的例子为:A、A+3、A+6、A+9、A+12、…,其中A为基址且跨步为3。处理跨步的存储器图案的聚集及分散的问题在于其经设计以假设元素随机分布,且无法利用跨步所提供的本质信息(可预测性程度越高,允许越高性能实施)。再者,程序员和编译器导致将已知跨步转换为聚集/分散可用作输入的存储器索引的矢量的负担。以下为利用跨步的若干聚集及分散指令的实施例,及可用以执行这种指令的系统、体系结构、指令格式等的实施例。
聚集跨步
第一个这种指令为聚集跨步指令。此指令通过处理器的执行有条件地将数据元素从存储器载入目的地寄存器。例如,在一些实施例中最多16个32位或8个64位浮点数据元素有条件地封包到目的地,诸如XMM、YMM、或ZMM寄存器。
将载入的数据元素经由SIB(标度、索引、及基础)寻址的类型指明。在一些实施例中,指令包括通用寄存器中传递的基址、传递作为立即数的标度、传递作为通用寄存器的跨步寄存器、及可选位移。当然可使用其它实现,诸如包括基址和/或跨步的立即数值的指令等。
聚集跨步指令还包括写屏蔽。在一些实施例中,使用专用屏蔽寄存器,诸如之后详细说明的“k”写屏蔽,当其相应写屏蔽位指示其应如此时(例如,在一实施例中如果位为“1”),将载入存储器数据元素。在其它实施例中,数据元素的写屏蔽位是来自写屏蔽寄存器(例如,XMM或YMM寄存器)的相应元件的符号位。在这些实施例中,写屏蔽元素被视为与数据元素尺寸相同。如果未设定数据元素的相应写屏蔽位,则目的地寄存器(例如,XMM、YMM、或ZMM寄存器)的相应数据元素保持未改变。
典型地,除非有异常,否则聚集跨步指令的执行将导致整个写屏蔽寄存器设定为零。然而,在一些实施例中,如果至少一个元素已被聚集(即,如果通过除了具其写屏蔽位集的最低有效者之外的元素触发异常),则指令将被异常所暂停。当此发生时,目的地寄存器及写屏蔽寄存器被部分地更新(已聚集的这些元素被置入目的地寄存器,并使屏蔽位设定为零)。如果已聚集的元素即将发生任何抑制或中断,则其可代替异常而被递送,并将EFLAGS恢复标志或等价件设置为使得当指令继续时不重新触发指令断点。
在具128位大小矢量的一些实施例中,指令将聚集多达四个单精度浮点值或两个双精度浮点值。在具256位大小矢量的一些实施例中,指令将聚集多达八个单精度浮点值或四个双精度浮点值。在具512位大小矢量的一些实施例中,指令将聚集多达16个单精度浮点值或8个双精度浮点值。
在一些实施例中,如果掩码和目的地寄存器相同,则该指令递送GP故障。典型地,可以按任何顺序从存储器读取数据元素值。然而,故障是以从右至左方式递送。即,如果故障被通过元素触发并进行递送,则接近目的地XMM、YMM、或ZMM的LSB的所有元素将被完成(并且非故障)。接近MSB的个体元素可被完成或未被完成。如果给定元素触发多个故障,则将以传统顺序递送。此指令的给定实现可重复-假设输入值及体系结构状态相同,将聚集故障元素左边的元素的相同集合。
此指令的示范格式为“VGATHERSTR zmm1{k1},[基址、标度*跨步]+位移”,其中zmm1为目的地矢量寄存器操作数(诸如128、256、512位寄存器等),k1是写屏蔽操作数(诸如之后详细说明的16位寄存器例子),及基址、标度、跨步、及位移用以产生存储器中第一数据元素的存储器源地址,及跨步值用于后续存储器数据元素将被有条件地封包到目的地寄存器。在一些实施例中,写屏蔽也是不同尺寸(8位、32位等)的。此外,在一些实施例中,以下将详细说明并非写屏蔽的所有位都被指令利用。VGATHERSTER为指令的操作码(opcode)。典型地,指令中明白定义每一操作数。数据元素的大小可于指令的“前缀”中定义,诸如经由使用如本文所述的“W”的数据粒度位的指示。在大部分实施例中,数据粒度位将指示数据元素为32位或64位。如果数据元素的尺寸为32位,且源的尺寸为512位,那么每一源便存在十六(16)个数据元素。
寻址的快速绕行(quick detour)可用于此指令。在常规Intel体系结构(x86)存储器操作数中,可具有下列,例如:[rax+rsi*2]+36,其中RAX:为基址,RSI:为索引,2:为标度SS,36:为位移,及[]:括号表示存储器操作数的内容。因此,在此地址的数据为数据=MEM_CONTENTS(addr=RAX+RSI*2+36)。在常规聚集中,人们可以具有下列,例如:[rax+zmm2*2]+36,其中RAX:为基址,Zmm2:为索引的*矢量*,2:为标度SS,36:为位移,及[]:括号表示存储器操作数的内容。因此,数据的矢量为:data[i]=MEM_CONTENTS(addr=RAX+ZMM2[i]*2+36)。在一些实施例中,在聚集跨步中,再次寻址:[rax,ris*2]+36,其中RAX:为基址,RSI:为跨步,2:为标度SS,36:为位移,及[]:括号表示存储器操作数的内容。此处,数据的矢量为data[i]=MEM_CONTENTS(addr=RAX+跨步*i*2+36)。其它“跨步”指令可具有类似寻址模型。
图1中描绘聚集跨步指令的执行的例子。在此例子中,源是初始定址于在RAX寄存器中所发现的地址处的存储器(这是存储器寻址及位移等可用以产生地址的简单看法)。当然,存储器地址可存储于其它寄存器中,或可被发现为如以上详细说明的指令中的立即数。
在此例子中写屏蔽是具有相应于4DB4的十六进制值的位值的16位写屏蔽。对具有值“1”的写屏蔽的每一位位置而言,来自存储器源的数据元素存储于目的地寄存器中相应位置处。写屏蔽的第一位置(例如,k1[0]为“0”,其指示相应目的地数据元素位置(例如,目的地寄存器的第一数据元素)不会将来自源存储器的数据元素存储在此。在此状况下,将不存储与RAX地址相关联的数据元素。写屏蔽的下一位也是“0”,其指示来自存储器的后续“跨步的”数据元素也将不存储于目的地寄存器中。在此例子中,跨步值为“3”,因而该后续跨步数据元素为远离第一数据元素的第三数据元素。
写屏蔽中第一“1”值是在第三位位置中(例如,k1[2])。这指示存储器的先前跨步数据元素后的跨步数据元素将存储于目的地寄存器中相应数据元素位置处。该后续跨步数据元素远离先前跨步数据元素3,及远离第一数据元素6。
剩余写屏蔽位位置用以确定存储器源的哪些额外数据元素将存储于目的地寄存器中(在此状况下,存储总共8个数据元素,但依据写屏蔽位可为更少或更多)。此外,来自存储器源的数据元素可在存储到目的地之前向上转换以适应目的地的数据元素尺寸,诸如从16位浮点值至32位浮点值。以上已详细说明向上转换以及如何将其编码为指令格式的例子。此外,在一些实施例中,在存储到目的地之前,存储器操作数的跨步数据元素被存储于寄存器中。
图2中描绘执行聚集跨步指令的另一例子。此例子与前一例子类似,但数据元素的尺寸不同(例如,数据元素为64位而非32位)。因为此尺寸改变,所以用于掩码的位数也改变(其为八)。在一些实施例中,使用掩码的较低八位(8个最低有效位)。在其它实施例中,使用屏蔽的较高八位(8个最高有效位)。在其它实施例中,使用掩码的每隔一位(即,偶数位或奇数位)。
图3中描绘执行聚集跨步指令的又一例子。此例子与先前的例子类似,除了掩码不是16位寄存器。相反地,写屏蔽寄存器是矢量寄存器(诸如XMM或YMM寄存器)。在此例子中,将有条件地存储的每一数据元素的写屏蔽位是写屏蔽中相应数据元素的符号位。
图4描绘在处理器中使用聚集跨步指令的实施例。在401处,取出具有目的地操作数、源地址操作数(基址、位移、索引、和/或标度)、及写屏蔽的聚集跨步指令。先前已详细说明操作数的示范尺寸。
在403处,对聚集跨步指令进行解码。依据指令的格式,可于此阶段解释各种数据,诸如是否将向上转换(或其它数据变换)、将写入或取回哪些寄存器、源存储器地址是什么,等等。
在405处,取回/读取源操作数值。在大部分实施例中,此时读取与存储器源位置地址及后续跨步的地址相关联的数据元素(例如,读取整个高速缓存行)。此外,可临时存储于不是目的地的矢量寄存器中。然而,可从源一次取回一项数据元素。
如果将执行任何数据元素变换(诸如向上转换),则可在407处执行。例如,可以将来自存储器的16位数据元素向上转换为32位数据元素。
在409处,通过执行资源来执行聚集跨步指令(或包含这种指令的操作,诸如微操作)。此执行致使寻址的存储器的跨步的数据元素将依据写屏蔽的相应位而有条件地存储于目的地寄存器中。先前已描绘了该存储的例子。
图5描绘用于处理聚集跨步指令的方法的实施例。在此实施例中,假设先前已执行一些(若非全部)的操作401-407,然而,并未显示其以免模糊以下呈现的细节。例如,未显示取出和解码,也未显示操作数(源和写屏蔽)取回。
在501处,确定掩码和目的地是否是相同寄存器。如果是,则将产生故障并将停止指令执行。
如果它们并不相同,则在503处,根据源操作数的地址数据产生存储器中第一数据元素的地址。例如,基址及位移用以产生地址。再次,这可已于先前执行。此时如果尚未执行则取回数据元素。在一些实施例中,如果未取回所有的(跨步的)数据元素,则取回若干。
在504处,确定第一数据元素是否存在故障。如果存在故障,则停止指令的执行。
如果未存在故障,则在505处确定相应于存储器中第一数据元素的写屏蔽位值是否指示其应被存储于目的地寄存器中相应位置处。回头看先前的例子,该确定注视写屏蔽的最低有效位置,诸如图1的写屏蔽的最低有效值,看存储器数据元素是否应被存储于目的地的第一数据元素位置。
当写屏蔽位未指示存储器数据元素应被存储于目的地寄存器中时,则在507处不处理目的地的第一位置中的数据元素。典型地,这是通过写屏蔽中的“0”值指示,然而,可使用相反习惯。
当写屏蔽位指示存储器数据元素应被存储于目的地寄存器中时,则在509处,目的地的第一位置中的数据元素被存储于该位置。典型地,这是通过写屏蔽中“1”值指示,然而,可使用相反习惯。如果需任何数据变换,如向上转换,则如果尚未进行则也在此时执行。
在511处,清除第一写屏蔽位以指示成功写入。
在513处,产生将有条件地存储于目的地寄存器中的后续跨步数据元素的地址。如先前例子中详细说明的,该数据元素是远离存储器的先前数据元素的“x”数据元素,其中“x”为包括指令的跨步值。再次,这可已于先前执行。如果先前尚未执行,则在此时取回数据元素。
在515处,确定后续跨步数据元素是否存在故障。如果存在故障,则停止指令的执行。
如果未存在故障,则在517处确定相应于存储器中后续跨步数据元素的写屏蔽位值是否指示其应被存储于目的地寄存器中相应位置处。回头看先前的例子,该确定注视写屏蔽的下一位置,诸如图1的写屏蔽的第二最低有效值,以查看存储器数据元素是否应被存储于目的地的第二数据元素位置中。
当写屏蔽位未指示存储器数据元素应被存储于目的地寄存器中时,则在523处不处理目的地的该位置中的数据元素。典型地,这是通过写屏蔽中“0”值指示,然而可使用相反习惯。
当写屏蔽位指示存储器数据元素应被存储于目的地寄存器中时,则在519处,目的地的该位置中的数据元素被存储于该位置。典型地,这是通过写屏蔽中“1”值指示,然而可使用相反习惯。如果需任何数据变换,诸如向上转换,则如果尚未进行则在此时也可执行。
在521处,清除写屏蔽评估位,以指示成功写入。
在525处,确定评估的写屏蔽位置是否是最后的写屏蔽,或是否目的地的所有数据元素位置已被填满。如果为真,则操作结束。如果为假,则评估另一写屏蔽位,等等。
虽然此图及以上说明认为各第一位置为最低有效位置,但在一些实施例中,第一位置为最高有效位置。在一些实施例中,未进行故障确定。
分散跨步
第二个这种指令为分散跨步指令。在一些实施例中,由处理器执行此指令致使来自源寄存器(例如,XMM、YMM、或ZMM)的数据元素依据写屏蔽中的值而有条件地存储到目的地存储器位置。例如,在一些实施例中,多达16个32位或8个64位浮点数据元素有条件地存储于目的地存储器中。
典型地,目的地存储器位置是经由SIB信息指明的(如上所述)。如果其相应屏蔽位指示其应如此,则存储数据元素。在一些实施例中,指令包括在通用寄存器中传递的基址、传递作为立即数的标度、传递作为通用寄存器的跨步寄存器、及可选位移。当然可使用其它实现,诸如包括基址和/或跨步的立即数值的指令等。
分散跨步指令还包括写屏蔽。在一些实施例中,使用专用屏蔽寄存器,诸如之后详细说明的“k”写屏蔽,如果其相应写屏蔽位指示其应如此(例如,在一些实施例中如果位为“1”),则将存储源数据元素。在其它实施例中,数据元素的写屏蔽位是来自写屏蔽寄存器(例如,XMM或YMM寄存器)的相应元素的符号位。在这些实施例中,写屏蔽元素被视为与数据元素相同尺寸。如果未设定数据元素的相应写屏蔽位,则存储器的相应数据元素便保持未改变。
典型地,除非触发异常,否则将与分散跨步指令相关联的整个写屏蔽寄存器将通过此指令设定为零。此外,如果至少一个数据元素已分散(恰如以上聚集跨步指令),则可通过异常而暂停此指令的执行。当此发生时,目的地存储器及屏蔽寄存器被部分地更新。
在具有128位尺寸矢量的一些实施例中,指令将分散多达四个单精度浮点值或二个双精度浮点值。在具有256位尺寸矢量的一些实施例中,指令将分散多达八个单精度浮点值或四个双精度浮点值。在具有512位尺寸矢量的一些实施例中,指令将分散多达16个32位浮点值或8个64位浮点值。
在一些实施例中,仅到重叠的目的地位置的写入被确保彼此排序(从源寄存器的最低有效位至最高有效位)。如果来自两个不同元素的任何两个位置相同,则元件便重叠。未重叠的写入可以任何顺序发生。在一些实施例中,如果两个或更多目的地位置完全重叠,则可省略“较早”写入。此外,在一些实施例中,数据元素可以任何顺序分散(如果无重叠),但故障是以从右至左顺序递送,恰如以上聚集跨步指令。
此指令的示范格式为“VSCATTERSTR[基址,标度*跨步]+位移{k1},ZMM1”,其中ZMM1是源矢量寄存器操作数(诸如128、256、512位寄存器等),k1为写屏蔽操作数(诸如之后详细说明的16位寄存器例子),以及基址、标度、跨步、及位移提供存储器目的地地址,并且跨步值用于存储器的后续数据元素将有条件地封包到目的地寄存器中。在一些实施例中,写屏蔽也是不同尺寸(8位、32位等)。此外,在一些实施例中,以下将详细说明并非写屏蔽的所有位都被指令利用。VSCATTERSTR是指令的操作码。典型地,指令中清晰定义每一操作数。数据元素的尺寸可于指令的“前缀”中定义,诸如经由使用如本文所述的“W”的数据粒度位的指示。在大部分实施例中,数据粒度位将指示数据元素为32或64位。如果数据元素尺寸为32位,且源的尺寸为512位,那么每一源便存在十六(16)个数据元素。
该指令通常是写屏蔽的,从而在目的地存储器位置中仅修改具有写屏蔽寄存器中相应位集(以上例子中k1)的那些元素。具有写屏蔽寄存器中相应位清除的目的地存储器位置中的数据元素保持其先前值。
图6中描绘了分散跨步指令的执行的例子。源为寄存器,诸如XMM、YMM、或ZMM。在此例子中,目的地是初始定址于RAX寄存器中所发现的地址的存储器(这是存储器寻址及位移等可用以产生地址的简单看法)。当然,存储器地址可存储于其它寄存器中,或可发现为如以上详细说明的指令中的立即数。
在此例子中写屏蔽是具相应于4DB4的十六进制值的位值的16位写屏蔽。对具“1”值的写屏蔽的每一位位置而言,来自寄存器源的相应数据元素存储于目的地存储器中的相应(跨步的)位置处。写屏蔽的第一位置(例如,k1[0])为“0”,其指示相应源数据元素位置(例如,源寄存器的第一数据元素)将不写入到RAX存储器位置。写屏蔽的下一位也是“0”,指示来自源寄存器的下一数据元素将不存储于从RAX存储器位置跨步的存储器位置中。在此例子中,跨步值为“3”,因而距RAX存储器位置三个数据元素的数据元素将不被覆写。
写屏蔽中第一“1”值是在第三位位置中(例如,k1[2])。这指示源寄存器的第三数据元素将存储于目的地存储器中。该数据元素存储于距跨步数据元素3跨步的位置,及距第一数据元素6跨步的位置。
剩余的写屏蔽位位置用以确定源寄存器的哪些额外数据元素将存储于目的地存储器中(在此状况下,存储总共8个数据元素,但依据写屏蔽可为更少或更多)。此外,来自寄存器源的数据元素在存储于目的地之前可向下转换以适应目的地的数据元素尺寸,诸如,从32位浮点值至16位浮点值。以上已详细说明向下转换及任何编码为指令格式的例子。
图7描绘了执行分散跨步指令的另一例子。此例子与前一例子类似,但数据元素的尺寸不同(例如,数据元素是64位而非32位)。因为此尺寸改变,所以用于掩码的位数量也改变(其为八)。在一些实施例中,使用掩码的较低八位(8个最低有效者)。在其它实施例中,使用掩码的较高八位(8个最高有效者)。在其它实施例中,使用掩码的每隔一位(即,偶数位或奇数位)。
图8描绘了执行分散跨步指令的又一例子。此例子与先前的例子类似,除了掩码不是16位寄存器。相反地,写屏蔽寄存器为矢量寄存器(诸如XMM或YMM寄存器)。在此例子中,将有条件地存储的每一数据元素的写屏蔽位是写屏蔽中相应数据元素的符号位。
图9描绘了在处理器中使用分散跨步指令的实施例。在901处,取出具有目的地地址操作数(基址、位移、索引和/或标度)、写屏蔽、及源寄存器操作数的分散跨步指令。先前已详细说明源寄存器的示范尺寸。
在903处,对分散跨步指令进行解码。依据指令的格式,可于此阶段解译各种数据,诸如是否将向下转换(或其它数据变化)、将写入并取回哪些寄存器、存储器地址是什么,等等。
在905处,取回/读取源操作数值。
如果要执行任何数据元素变化(诸如向下转换),可在907处执行。例如,来自源的32位数据元素可向下转换为16位数据元素。
在909处,通过执行资源而执行分散跨步指令(或包含这种指令的操作,诸如微操作)。此执行致使来自源(例如,XMM、YMM、或ZMM寄存器)的数据元素将依据写屏蔽中的值而有条件地从最低至最高有效位存储于任何重叠(跨步)的目的地存储器位置。
图10描绘用于处理分散跨步指令的方法的实施例。在此实施例中,假设先前已执行若干(如果非全部)操作901-907,然而,并未显示其以免模糊以下呈现的细节。例如,未显示取出和解码,也未显示操作数(源及写屏蔽)取回。
在1001处,根据指令的地址数据产生可能被写入至的第一存储器位置的地址。再次,其可已于先前执行。
在1002处,确定该地址是否存在故障。如果存在故障,则执行停止。
如果未存在故障,则在1003处确定第一写屏蔽位的值是否指示源寄存器的第一数据元素应被存储于所产生的地址。回头看先前例子,该确定注视写屏蔽的最低有效位置,诸如图6的写屏蔽的最低有效值,以便看第一寄存器数据元素是否应被存储于所产生的地址。
当写屏蔽位未指示寄存器数据元素应被存储于所产生的地址时,则在1005不处理该地址的存储器中的数据元素。典型地,这是通过写屏蔽中“0”值指示,然而,可使用相反习惯。
当写屏蔽位指示寄存器数据元素应被存储于所产生的地址时,则在1007处,将源的第一位置中数据元素存储于该位置。典型地,这是通过写屏蔽中“1”值指示,然而,可使用相反习惯。如果不需任何数据变化,诸如向下转换,则如果尚未进行则也在此时执行。
在1009处,清除写屏蔽位以指示成功写入。
在1011处,产生使其数据元素有条件地覆写的后续跨步的存储器地址。如先前例子中详细说明,此地址为远离存储器的先前数据元素的“x”数据元素,其中“x”为包括指令的跨步值。
在1013处,确定后续跨步数据元素地址是否存在故障。如果存在故障,则停止指令的执行。
如果未存在故障,则在1015处确定后续写屏蔽位的值是否指示源寄存器的后续数据元素应被存储于所产生的跨步地址。回头看先前的例子,该确定注视写屏蔽的下一位置,诸如图6的写屏蔽的第二最低有效值,以查看相应数据元素是否应被存储于所产生的地址。
当写屏蔽位未指示源数据元素应被存储于存储器位置时,则在1021处不处理该地址的数据元素。典型地,这是通过写屏蔽中“0”值指示,然而可使用相反惯。
当写屏蔽位指示源的数据元素应被存储于所产生的跨步地址时,则在1017处,该地址的数据元素以源数据元素件覆写。典型地,这是通过写屏蔽中“1”值指示,然而可使用相反习惯。如果需任何数据变化,诸如向下转换,则如果尚未进行则也可在此时执行。
在1019处,清除写屏蔽位,以指示成功写入。
在1023处,确定评估的写屏蔽位置是否为写屏蔽的最后,或是否目的地的所有数据元素位置已填满。如果为真,则操作结束。如果为假,则评估另一数据元素用于存储于跨步的地址,等等。
虽然此图及以上说明认为各第一位置为最低有效位置,但在一些实施例中,第一位置为最高有效位置。此外,在一些实施例中,未进行故障确定。
聚集跨步预取
第三个这种指令为聚集跨步预取指令。由处理器执行此指令有条件地从存储器(系统或高速缓存)预取跨步数据元素进入指令根据指令的写屏蔽暗示的高速缓存级别。预取的数据可通过后续指令读取。不同于以上讨论的聚集跨步指令,不存在目的地寄存器,并且写屏蔽未修改(该指令未修改处理器的任何体系结构状态)。数据元素可预取作为整个存储器块的部分,诸如高速缓存行。
如以上讨论的,待预取的数据元素经由SIB(标度、索引、及基址)的类型指明。在一些实施例中,指令包括通用寄存器中传递的基址、传递作为立即数的标度、传递作为通用寄存器的跨步寄存器、及可选位移。当然可使用其它实现,诸如包括基址和/或跨步的立即数值的指令等。
聚集跨步预取指令还包括写屏蔽。在一些实施例中,使用诸如文中详细说明的“k”写屏蔽的专用屏蔽寄存器,如果其相应写屏蔽位指示其应如此(例如,在一些实施例中如果位是“1”),则将预取存储器数据元素。在其它实施例中,数据元素的写屏蔽位是来自写屏蔽寄存器(例如,XMM或YMM寄存器)的相应元件的符号位。在这些实施例中,写屏蔽元素被视为与数据元素相同尺寸。
此外,不同于以上讨论的聚集跨步的实施例,聚集跨步预取指令典型地未于异常而暂停,且未递送页面故障。
此指令的示范格式为“VGATHERSTR_PRE[基址,标度*跨步]+位移,{k1},暗示”,其中k1为写屏蔽操作数(诸如之后详细说明的16位寄存器的例子),及基址、标度、跨步、及位移提供存储器源地址,以及及跨步值用于有条件地预取的存储器的后续数据元素。暗示提供将有条件地预取的高速缓存级别。在一些实施例中,写屏蔽还可以是不同尺寸(8位、32位等)。此外,在一些实施例中,以下将详细说明并非写屏蔽的所有位都被指令利用。VGATHERSTR_PRE为指令的操作码。典型地,指令中清晰定义每一操作数。
此指令通常被写屏蔽,以使得仅预取具有写屏蔽寄存器中相应位集(以上例子中k1)的那些存储器位置。
图11中描绘聚集跨步预取指令的执行的例子。在此例子中,存储器被初始定址于RAX寄存器中所发现的地址(这是存储器寻址及位移等可用以产生地址的简单看法)。当然,存储器地址可存储于其它寄存器中,或可发现如以上详细说明的指令中的立即数。
在此例子中写屏蔽为具相应于4DB4的十六进制值的位值的16位写屏蔽。对具“1”值的写屏蔽的每一位位置而言,来自存储器源的数据元素被预取,其可包括预取高速缓存或存储器的整个行。写屏蔽的第一位置(例如,k1[0])是“0”,其指示相应目的地数据元素位置(例如,目的地寄存器的第一数据元素)将不被预取。在此状况下,将不预取与RAX地址相关联的数据元素。写屏蔽的下一位也是“0”,其指示来自存储器的后续“跨步的”数据元素也将不被预取。在此例子中,跨步值为“3”,因而此后续跨步数据元素为远离第一数据元素的第三数据元素。
写屏蔽中第一“1”值在第三位位置中(例如,k1[2])。此指示后续于存储器的先前跨步数据元素的跨步数据元素将被预取。此后续跨步数据元素远离先前跨步数据元素3,及远离第一数据元素6。
剩余的写屏蔽位位置用以确定存储器源的哪些额外数据元素将被预取。
图12描绘在处理器中使用聚集跨步预取指令的实施例。在1201处,取出具有地址操作数(基址、位移、索引、和/或标度)、写屏蔽、及暗示的聚集跨步预取指令。
在1203处,对聚集跨步预取指令进行解码。依据指令的格式,可于此阶段解译各种数据,如预取的哪一高速缓存级别、来自源的存储器地址是什么。
在1205处,取回/读取源操作数值。在大部分实施例中,在此时读取与存储器源位置地址及后续跨步的地址(及其数据元素)相关联的数据元素(例如,读取整个高速缓存行)。然而,如虚线显示,一次可从源取回一项数据元素。
在1207处,通过执行资源而执行聚集跨步预取指令(或包含这种指令的操作,诸如微操作)。此执行致使处理器有条件地从存储器(系统或高速缓存)预取跨步数据元素进入指令根据指令的写屏蔽暗示的高速缓存级别。
图13描绘用于处理聚集跨步预取指令的方法的实施例。在此实施例中,假设先前已执行若干(如果非全部)的操作1201-1205,然而,并未显示其以免模糊以下呈现的细节。
在1301处,根据源操作数的地址数据产生将有条件地预取的存储器中第一数据元素的地址。再次,此可已于先前执行。
在1303处,确定相应于存储器中第一数据元素的写屏蔽位值是否指示其应被预取。回头看先前例子,该确定注视写屏蔽的最低有效位置,诸如图11的写屏蔽的最低有效值,以查看存储器数据元素是否应被预取。
当写屏蔽未指示存储器数据元素应被预取时,则在1305处未预取。典型地,这是通过写屏蔽中“0”值指示,然而,可使用相反习惯。
当写屏蔽指示存储器数据元素应被预取时,则在1307处预取数据元素。典型地,这是通过写屏蔽中“1”值指示,然而,可使用相反习惯。如先前详细说明,这可表示取出整个高速缓存行或存储器位置,包括其它数据元素。
在1309处,产生将有条件地预取的后续跨步数据元素的地址。如先前例子中详细说明,该数据元素为远离存储器的先前数据元素的“x”数据元素,其中“x”为包括指令的跨步值。
在1311处,确定相应于存储器中后续跨步数据元素的写屏蔽位值是否指示其应被预取。回头看先前例子,该确定注视写屏蔽的下一位置,诸如图11的写屏蔽的第二最低有效值,以查看存储器数据元素是否将被预取。
当写屏蔽未指示存储器数据元素应被预取时,则在1313处未预取。典型地,这是通过写屏蔽中“0”值指示,然而,可使用相反习惯。
当写屏蔽指示存储器数据元素应被预取时,则在1315处预取在目的地的该位置的数据元素。典型地,这是通过写屏蔽中“1”值指示,然而,可使用相反习惯。
在1317处,确定评估的写屏蔽位置是否为写屏蔽的最后。如果为真,则操作结束。如果为假,则评估另一跨步的数据元素,等等。
虽然此图及以上说明认为各第一位置为最低有效位置,但在一些实施例中,第一位置为最高有效位置。
分散跨步预取
第四个这种指令是分散跨步预取指令。由处理器执行此指令有条件地从存储器(系统或高速缓存)预取跨步数据元素进入指令根据指令的写屏蔽暗示的高速缓存级别。该指令与聚集跨步预取之间的差异在于预取的数据将被后续写入且未读取。
以上体现的详细说明的指令实施例可以以下详细说明的“一般矢量友好指令格式”体现。在其它实施例中,未利用这种格式而是使用另一指令格式,然而,以下说明的写屏蔽寄存器、各种数据变换(混合、广播等)、寻址等通常可应用于以上指令的实施例的说明。此外,以下详细说明示范系统、体系结构及管线。以上指令的实施例可于这种系统、体系结构及管线上执行,但不局限于此。
矢量友好指令格式是适于矢量指令的指令格式(例如,某些矢量操作特定字段)。虽然说明实施例其中经由矢量友好指令格式支持矢量及标量操作两者,但替代实施例仅使用矢量友好指令格式的矢量操作。
示范一般矢量友好指令格式-图14A-B。
图14A-B是描绘根据本发明的实施例的一般矢量友好指令格式及其指令模板的方框图。图14A是描绘根据本发明的实施例的一般矢量友好指令格式及其A类指令模板的方框图;同时图14B是描绘根据本发明的实施例的一般矢量友好指令格式及其B类指令模板。具体地,一般矢量友好指令格式1400其中定义A类及B类指令模板,二者包括无存储器存取1405指令模板及存储器存取1420指令模板。矢量友好指令格式的上下文中术语“一般”是指不与任何具体指令集相关联的指令格式。虽然将说明实施例其中矢量友好指令格式的指令在来自寄存器(无存储器存取1405指令模板)或寄存器/存储器(存储器存取1420指令模板)的矢量上操作,但本发明的替代实施例可仅支持其中之一。此外,虽然将说明本发明的实施例其中存在矢量指令格式的加载及存储指令,但可选的实施例取代或额外具有不同指令格式的指令,其将矢量移进和移出寄存器(例如,从存储器到寄存器、从寄存器到存储器、在寄存器之间)。此外,虽然将说明本发明的实施例其支持两类指令模板,但替代实施例可仅支持其中之一或两种以上。
虽然将说明本发明的实施例,其中矢量友好指令格式支持下列:具有32位(4字节)或64位(8字节)数据元素素宽度(或尺寸)的64字节矢量操作数长度(或尺寸)(并且因此,64字节矢量由16个双倍字尺寸的元素或可替代的8个四倍字尺寸的元素构成);具有16位(2字节)或8位(1字节)数据元素素宽度(或尺寸)的64字节矢量操作数长度(或尺寸);具有32位(4字节)、64位(8字节)、16位(2字节)或8位(1字节)数据元素素宽度(或尺寸)的32字节矢量操作数长度(或尺寸);以及具有32位(4字节)、64位(8字节)、16位(2字节)、或8位(1字节)数据元素素宽度(或尺寸)的16字节矢量操作数长度(或尺寸);但是可选的实施例可以支持具有更多、更少、或不同的数据元素素宽度(例如,128位(16字节)数据元素素宽度)的更多、更少和/或不同的矢量操作数尺寸(例如,1456字节矢量操作数)。
图14A中A类指令模板包括:1)在无存储器存取1405指令模板内,显示无存储器存取、完全取整控制类型操作1410指令模板,以及无存储器存取、数据变换类型操作1415指令模板;及2)在存储器存取1420指令模板内,显示存储器存取、临时1425指令模板,以及存储器存取、非临时1430指令模板。图14B中B类指令模板包括:1)在无存储器存取1405指令模板内,显示无存储器存取、写屏蔽控制、部份取整控制类型操作1412指令模板,以及无存储器存取、写屏蔽控制、VSIZE类型操作1417指令模板;及2)在存储器存取1420指令模板内,显示存储器存取、写屏蔽控制1427指令模板。
格式
一般矢量友好指令格式1400包括下列字段,以下以图14A-B中描绘的顺序表列。
格式字段1440-在本字段中,特定值(指令格式识别符值)唯一地识别矢量友好指令格式,因而识别指令流中矢量友好指令格式的指令的出现。因而,格式字段1440的内容区别第一指令格式的指令的发生与其他指令格式的指令的发生,由此允许将矢量友好指令格式导入具有其他指令格式的指令集。同样地,该字段在指令集不需仅具有一般矢量友好指令格式方面是可选的。
基础操作字段1442—其内容区别不同的基础操作。如文中之后所说明,基础操作字段1442可包括操作码字段和/或为操作码字段的部分。
寄存器索引字段1444—其内容直接或经由地址产生而指明源及目的地操作数的位置,是在寄存器或存储器中。这些包括从P×Q(例如32×1612)寄存器文件中选择N个寄存器的足量的位。虽然在一实施例中,N可为多达三个源和一个目的地寄存器,但是替代实施例可支持更多或更少源及目的地寄存器(例如,可支持多达两个源,其中这些源之一也充当目的地;可支持多达三个源,其中这些源之一也充当目的地;可支持多达两个源及一目的地)。虽然在一实施例中,P=32,但替代实施例可支持更多或更少寄存器(例如16)。虽然在一实施例中,Q=1612位,但替代实施例可支持更多或更少位(例如128、1024)。
修饰符字段1446-其内容指定存储器存取的一般矢量指令格式的指令的出现与不指定存储器存取的一般矢量指令格式的那些指令的出现区分开;即,区分无存储器存取1405指令模板与存储器存取1420指令模板。存储器存取操作对存储器层级进行读取和/或写入(在一些情况下,使用寄存器中的值来指定源和/或目的地地址),同时无存储器存取操作并非如此(例如,源和目的地是寄存器)。虽然在一实施例中,此字段还在三种不同方式之间选择,以执行存储器地址计算,但替代实施例可支持更多、更少、或不同方式来执行存储器地址计算。
扩增操作字段1450-其内容区别除了基础操作以外将执行各种不同操作中的哪一个。此字段是上下文特定的。在本发明的一个实施例中,该字段划分为类字段1468、α字段1452、以及β字段1454。扩增操作字段允许将以单一指令执行,而非2、3或4指令中执行共同组的操作。以下为使用扩增字段1450的一些指令例子(其术语于文中之后更详细说明)以减少所需指令数量。
其中[rax]是将用于地址生成的基址指针,及其中{}指示由数据操纵字段指明的转换操作(之后更详细说明)。
标度字段1460-其内容允许对索引字段的内容进行缩放以用于存储器地址生成(例如,用于使用2标度*索引+基址的地址生成)。
位移字段1462A-其内容用作存储器地址产生的部分(例如,用于使用2标度*索引+基址+位移的地址产生)。
位移因子字段1462B(请注意,位移字段1462A直接并置在位移因子字段1462B之上,指示使用其一或另者另一者)-其内容用作地址产生的部分;其指明将由存储器存取的尺寸(N)缩放的位移因子,其中N为存储器存取中字节数量(例如,用于使用2标度*索引+基址+缩放的位移的地址产生)。忽略冗余低阶位,因此位移因子字段的内容乘以存储器操作数总尺寸(N),以便产生用于计算有效地址的最终位移。如文中之后所说明,N值是由处理器硬件在运行时间依据全操作码字段1474(文中之后所说明)及数据操纵字段1454C来确定的。位移字段1462A及位移因子字段1462B在其未用于无存储器存取1405指令模板和/或不同实施例可仅实施二者之一或均未实施方面为可选的。
数据元素宽度字段1464—其内容区别将使用多个数据元素宽度中的哪个(在一些实施例中用于所有指令;在其他实施例中仅用于一些指令)。此字段在如果仅支持一个数据元素宽度和/或使用操作码的一些方面支持数据元素宽度则不需要该字段的方面为可选的。
写屏蔽字段1470—其内容在每一数据元素位置的基础上控制目的地矢量操作数中数据元素位置是否反映基础操作和扩增操作的结果。A类指令模板支持合并-写屏蔽,同时B类指令模板支持合并-写屏蔽和归零-写屏蔽二者。当合并时,矢量掩码允许保护目的地中任何元素集于执行任何操作(由基础操作和扩增操作指明)期间免于更新;在其他实施例中,可保存相应屏蔽位具有0的目的地的每一元素的旧值。相反地,当归零时,矢量掩码允许于执行任何操作(由基础操作及扩增操作指明)期间目的地中任何元素集被归零;在一实施例中,当相应屏蔽位具有0值时,目的地的元件设定为0。此功能的子集是控制所执行的操作的矢量长度的能力(即,所修改的元素从第一至最后一个的跨度);然而,被修改的元件不一定为连续的。因而,写屏蔽字段1470允许部分矢量操作,包括载入、存储、算术、逻辑等。此外,该屏蔽可用于故障抑制(即,借由屏蔽目的地的数据元素位置以避免接收可能/将要致使故障的任何操作的结果,例如,假设存储器中矢量越过页面边界,并且第一页面而非第二页面将致使页面故障,如果第一页面上矢量的所有数据元素由写屏蔽而屏蔽,则可忽略页面故障。)此外,写屏蔽允许“矢量化循环”,其包含某类型的条件语句。虽然说明本发明的实施例,其中写屏蔽字段1470的内容选择包含将使用的写屏蔽的多个写屏蔽寄存器之一(因而写屏蔽字段1470的内容间接识别将执行的屏蔽),但替代实施例取代或额外允许写屏蔽字段1470的内容以直接指明将执行的屏蔽。此外,归零允许在如下情况下时的性能改进:1)寄存器重新命名用于其目的地操作数也不是源的指令(也称为非三元指令)上,因为在寄存器重新命名管线阶段期间,目的地不再为隐式源(没有来自当前目的地寄存器的数据元素需复制到重新命名的目的地寄存器,或以某种方式伴随操作实施,因为并非操作结果的任何数据元素(任何被屏蔽的数据元素)将被归零);及2)在写回阶段,因为零正在被写入。
立即数字段1472-其内容允许立即数的具体说明。在不存在于不支持立即数的一般矢量友好格式的实现中,并且不存在于以不使用立即数的指令的方面,此字段是可选的。
指令模板类型选择
类字段1468-其内容于不同类的指令之间区别。参图2A-B,该字段的内容在A类与B类指令之间选择。在图14A-B中,圆角方形用以指示特定值存在于字段中(例如,分别在图14A-B中的类字段1468的A类1468A和B类1468B)。
A类的无存储器存取指令模板
如果为A类的无存储器存取1405指令模板,则α字段1452被解译为RS字段1452A,其内容区别将执行不同扩增操作类型中的哪一个(例如,针对无存储器存取、取整型操作1410指令模板和无存储器存取、数据变换型操作1415指令模板,分别指明取整1452A.1和数据变换1452A.2),同时β字段1454区别将执行特定类型操作中的哪些。在图14中,圆角方块用以指示存在特定值(例如,修饰符字段1446中无存储器存取1446A;用于α字段1452/rs字段1452A的取整1452A.1和数据变换1452A.2)。在无存储器存取1405指令模板中,不存在标度字段1460、位移字段1462A、和位移因子字段1462B。
无存储器存取指令模板-完全取整控制型操作
在无存储器存取全取整控制型操作1410指令模板中,β字段1454解译为取整控制字段1454A,其内容提供静态取整。虽然在所说明的本发明的实施例中,取整控制字段1454A包括抑制全部浮点异常(SAE)字段1456和取整操作控制字段1458,可选实施例可支持这些构思,并且可以将这些构思编码成相同字段或仅具有这些构思/字段之一或另一个(例如,可仅具有取整操作控制字段1458)。
SAE字段1456-其内容区别是否禁用异常事件报告;当SAE字段1456的内容指示启用抑制时,给定的指令不报导任何种类的浮点异常标记,且不唤起任何浮点异常处理程序。
取整操作控制字段1458-其内容区别将执行一组取整操作中哪一个(例如,上取整、下取整、向零取整和就近取整)。因而,取整操作控制字段1458允许以每一指令为基础的取整模式改变,因而当需要时特别有用。在本发明的一实施例中,其中处理器包括用以指明取整模式的控制寄存器,取整操作控制字段1450的内容覆盖寄存器值(可选择取整模式而不需要在这种控制寄存器上执行保存-修改-恢复是有利的)。
无存储器存取指令模板-数据变换型操作
在无存储器存取数据变换型操作1415指令模板中,β字段1454解译为数据变换字段1454B,其内容区别将执行多个数据变换中的哪一个(例如,无数据变换、混合、广播)。
A类的存储器存取指令模板
如果为A类的存储器存取1420指令模板,α字段1452被解译为驱逐暗示字段1452B,其内容区别将使用哪一个驱逐暗示(在图14A中,针对存储器存取、临时1425指令模板和存储器存取、非临时1430指令模板分别指明临时1452B.1和非临时1452B.2),同时β字段1454被解译为数据操纵字段1454C,其内容区别将执行多个数据操纵操作(也称为基元)的哪一个(例如,无操纵;广播;源的向上转换;及目的地的向下转换)。存储器存取指令模板1420包括标度字段1460,并且可选地包括位移字段1462A或位移因子字段14628。
矢量存储器指令以转换支持执行来自存储器的矢量载入以及到存储器的矢量存储。如同常规矢量指令,矢量存储器指令以逐数据元素(element-wise)的方式转移数据自/至存储器,且通过选择作为写屏蔽的矢量掩码的内容来规定实际转移的元素。在图14A中,圆角方形用以指特定值存在于字段中(例如,修饰符字段1446的存储器存取1446B;α字段1452/驱逐暗示字段1452B的临时1452B.1和非临时1452B.2)。
存储器存取指令模板-临时
临时数据是可能很快被重用而从高速缓存获益的数据。然而,此为暗示,且不同处理器可以不同方式实施,包括完全忽略暗示。
存储器存取指令模板-非临时
非临时数据是不太可能很快被重用而从一级高速缓存的高速缓存获益的数据,并应赋予驱逐优先性。然而,此为暗示,且不同处理器可以不同方式实施,包括完全忽略暗示。
B类指令模板
如果为B类指令模板,α字段1452被解译为写屏蔽控制(Z)字段1452C,其内容区别由写屏蔽字段1470控制的写屏蔽是否应合并或归零。
B类的无存储器存取指令模板
如果为B类的无存储器存取指令模板1405,部分β字段1454被解译为RL字段1457A,其内容区别将执行不同扩增操作类型中的哪一种(例如,分别为无存储器存取、写屏蔽控制、部分取整控制型操作1412指令模板和无存储器存取、写屏蔽控制、矢量长度(VSIZE)型操作1417指令模板指定取整1457A.1和VSIZE1457A.2),同时β字段1454的其余部分区别将执行指定类型操作中的哪些。在图14中,圆角方块用以指示存在特定值(例如,修饰符字段1446中无存储器存取1446A;RL字段1457A的取整1457A.1及VSIZE1457A.2)。在无存储器存取指令模板1405中,不存在标度字段1460、位移字段1462A、及位移因子字段1462B。
无存储器存取指令模板—写屏蔽控制、部分取整控制型操作
在无存储器存取、写屏蔽控制、部份取整控制型操作1410指令模板中,β字段1454的其余部分被解译为取整操作字段1459A,并禁用异常事件报告(给定指令不报告任何种类的浮点异常标记,且不唤起任何浮点异常处理程序)。
取整操作控制字段1459A-正如取整操作控制字段1458,其内容区别执行一组取整操作中的哪一个(例如,上取整、下取整、向零取整及就近取整)。因而,取整操作控制字段1459A允许基于每一指令改变取整模式,因而当需要时尤其有用。在本发明的一个实施例中,其中处理器包括用以指明取整模式的控制寄存器,取整操作控制字段1459的内容覆盖寄存器值(可选择取整模式而不需在这种控制寄存器上执行保存-修改-恢复是有利的)。
无存储器存取指令模板-写屏蔽控制、VSIZE类型操作
在无存储器存取、写屏蔽控制、VSIZE类型操作1417指令模板中,β字段1454的其余部分被解译为矢量长度字段1459B,其内容区别将执行多个数据矢量长度中的哪一个(例如,128、1456、或1612字节)。
B类的存储器存取指令模板
如果为A类的存储器存取1420指令模板,β字段1454的部分被解译为广播字段1457B,其内容区别是否将执行广播型数据操纵操作,同时β字段1454的其余部分被解译为矢量长度字段1459B。存储器存取1420指令模板包括标度字段1460,及可选的包括位移字段1462A或位移标度字段1462B。
关于字段的附加注释
关于一般矢量友好指令格式1400,显示全操作码字段1474,其包括格式字段1440、基础操作字段1442、及数据元素宽度字段1464。虽然显示了全操作码字段1474包括所有这些字段的实施例,但在不支持其全部的实施例中,全操作码字段1474包括少于全部这些字段。全操作码字段1474提供操作码。
扩增操作字段1450、数据元素宽度字段1464、及写屏蔽字段1470允许以一般矢量友好指令格式基于每一指令而指定这些特征。
写屏蔽字段及数据元素宽度字段的组合形成类型确定的(typed)指令,允许依据不同数据元素宽度而施加屏蔽。
指令格式需要相对少量的位,因为其依据其它字段内容针对不同目的而重用不同字段。例如,一个观点为修饰符字段的内容于图14A-B的无存储器存取1405指令模板与图14A-B的存储器存取1420指令模板之间进行选择;同时类型字段1468的内容于图14A的指令模板1410/1415与图14B的指令模板1412/1417之间的这些无存储器存取1405指令模板内进行选择:及同时类型字段1468的内容于图14A的指令模板1425/1430与图14B的指令模板1427之间的这些存储器存取1420指令模板内进行选择。从另一个观点看,类字段1468的内容在图14A及14B的分别的A类及B类指令模板之间进行选择;同时修饰符字段的内容在图14A的指令模板1405与1420之间的这些A类指令模板内进行选择;及同时修饰符字段的内容在图14B的指令模板1405与1420之间的这些B类指令模板内进行选择。如果类字段的内容指示A类指令模板,则修饰符字段1446的内容在rs字段1452A与EH字段1452B之间挑选α字段1452的解译。以相关方式,修饰符字段1446及类字段1468的内容挑选α字段是解译为rs字段1452A、EH字段1452B、或写屏蔽控制(Z)字段1452C。如果类字段和修饰符字段指示A类无存储器存取操作,则扩增字段的β字段的解译依据rs字段的内容而改变;同时如果类字段和修饰符字段指示B类无存储器存取操作,则β字段的解译取决于RL字段的内容。如果类字段和修饰符字段指示A类存储器存取操作,则扩增字段的β字段的解译依据基础操作字段的内容而改变;同时如果类字段和修饰符字段指示B类存储器存取操作,则扩增字段的β字段的广播字段1457B的解译依据基础操作字段的内容而改变。因而,基础操作字段、修饰符字段及扩增操作字段的组合允许指定更广泛的扩增操作。
在A类及B类内发现的各种指令模板于不同情况下有利。当因为性能原因而需要归零-写屏蔽或更小矢量长度时,A类是有帮助的。例如,当使用重新命名时,由于不再需要与目的地人为合并,所以归零允许避免虚假相关性;有关另一例子,当以矢量掩码来仿真更短的矢量尺寸时,矢量长度控制使得存储-载入转发问题变得容易。当期望如下情形时B类是有用的:1)允许浮点异常(即,当SAE字段的内容指示无时)的同时使用取整模式控制;2)可使用向上转换、混合、交换、和/或向下转换;3)在图形数据类型上操作。例如,向上转换、混合、交换、向下转换、及图形数据类型减少当以不同格式的源操作时所需的指令数量;有关另一例子,允许异常的能力提供了全IEEE相容的定向取整模式。
示范特定矢量友好指令格
图15是描绘根据本发明的实施例的示范特定矢量友好指令格式的方框图。图15显示特定矢量友好指令格式1500,其在指明字段的位置、尺寸、解译、及顺序以及用于那些字段中的一些字段的值方面是特定的。特定矢量友好指令格式1500可用以扩展x86指令集,因而若干字段与现有x86指令集及其扩展(例如,AVX)中使用的那些字段类似或相同。此格式保持与现有x86指令集及其宽展的前缀编码字段、实际操作码字节字段、MODR/M字段、SIB字段、位移字段、及立即数字段相符。描绘了图14的字段映射至图15的字段。
应理解的是,尽管本发明的实施例为描绘目的而参照一般矢量友好指令格式1400的上下文中特定矢量友好指令格式1500进行说明,但除非特别声明,否则本发明不局限于特定矢量友好指令格式1500。例如,一般矢量友好指令格式1400考虑各种字段的可能尺寸,同时特定矢量友好指令格式1500显示为具有特定尺寸字段。通过特定例子,虽然数据元素宽度字段1464被图示为特定矢量友好指令格式1500中的一位字段,但本发明并非如此限制(即,一般矢量友好指令格式1400考虑数据元素宽度字段1464的其它尺寸)。
格式-图15
一般矢量友好指令格式1400包括以下依图15中所描绘的顺序表列的下列字段。
EVEX前缀(字节0-3)
EVEX前缀1502-以四字节形式编码。
格式字段1440(EVEX字节0,位[7:0])-第一字节(EVEX字节0)是格式字段1440,其包含0x62(用于区别本发明之一实施例中矢量友好指令格式的唯一值)。
第二-第四字节(EVEX字节1-3)包括提供特定能力的多个位字段。
REX字段1505(EVEX字节1,位[7-5])-包含EVEX.R位字段(EVEX字节1,位[7]-R)、EVEX.X位字段(EVEX字节1,位[6]-X)、及EVEX.B字节字段(EVEX字节1,位[5]-B)。EVEX.R、EVEX.X以及EVEX.B位字段提供与相应VEX位字段相同的功能性,并使用1s补码形式编码,即ZMM0编码为1111B,ZMM15编码为0000B。指令的其它字段编码寄存器索引的较低三位,这是本技术中已知的(rrr、xxx、及bbb),以使得通过附加EVEX.R、EVEX.X和EVEX.B可形成Rrrr、Xxxx和Bbbb。
REX’字段1510-此为REX’字段1510的第一部分,并为EVEX.R’位字段(EVEX字节1,位[4]-R'),用以编码扩增的32寄存器集的较高16或较低16。在本发明的实施例中,此位连同以下指示的其它位以位反转格式存储,以与BOUND指令区别(众知的x8632位模式),其真是操作码字节为62,但在MOD R/M字段(以下说明)中不接受MOD字段中的值11;本发明的替代实施例不以反转格式存储此位及以下指示的其它位。值1用以编码较低16个寄存器。换言之,通过组合EVEX.R’、EVEX.R、及来自其它字段的其它RRR而形成R'Rrrr。
操作码映射字段1515(EVEX 1,位[3:0]-mmm)-其内容对隐含的前置操作码字节(0F、0F 38、或0F 3)进行编码。
数据元素宽度字段1464(EVEX字节2,位[7]-W)-其通过记号EVEX.W代表。EVEX.W用以定义数据类型的粒度(尺寸)(32位数据元素或64位数据元素))。
EVEX.vvvv1520(EVEX字节2,位[6:3]-vvvv)—EVEX.vvvv的作用可包括下列:1)EVEX.vvvv对以反转(1s补码)形式指定的第一源寄存器操作数进行编码,并且对于具有2个或更多个源操作数的指令有效;2)EVEX.vvvv对以用于一定矢量移位的1s补码形式指定的目的地寄存器操作数进行编码;或者3)EVEX.vvvv不对任何操作数进行编码,字段被保留并且应当包含1111b。因此,EVEX.vvvv字段1520对以反转(1s补码)形式存储的第一源寄存器说明符的4个低阶位进行编码。根据指令,额外的不同EVEX位字段用于将说明符尺寸扩展至32个寄存器。
EVEX.U类字段1468(EVEX字节2,位[2]-U)—如果EVEX.U=0,则其表示A类或EVEX.U0;如果EVEX.U=1,则其表示B类或EVEX.U1。
前缀编码字段1525(EVEX字节2,位[1:0]-pp)—为基础操作字段提供了附加位。除了为EVEX前缀格式的传统SSE指令提供支持之外,这还具有压缩SIMD前缀的益处(不是需要字节来表达SIMD前缀,EVEX前缀仅需要2个位)。在一个实施例中,为了支持使用传统格式和EVEX前缀格式的SIMD前缀(66H、F2H、F3H)的传统SSE指令,这些传统SIMD前缀被编码到SIMD前缀编码字段中;并且在提供给解码器的PLA之前在运行时间被扩展成传统SIMD前缀(因此,PLA能够执行这些传统指令的传统和EVEX格式,而无需进行修改)。尽管较新的指令可将EVEX前缀编码字段的内容直接用作操作码扩展,一些实施例以相似方式扩展以确保一致性,但是允许由这些传统SIMD前缀指定不同的含义。可选的实施例可以重新设计PLA以支持2位SIMD前缀编码,并且因此不需要扩展。
α字段1452(EVEX字节3,位[7]-EH;也称为EVEX.EH、EVEX.rs、EVEX.RL、EVEX.写屏蔽控制、以及EVEX.N;还可由α表示)—如之前所述,该字段是上下文特定的。本文稍后将提供进一步的描述。
β字段1454(EVEX字节3,位[6:4]-SSS;也称为EVEX.s2-0、EVEX.r2-0、EVEX.rr1、EVEX.LL0、EVEX.LLB;还由可由βββ表示)—如之前所述,该字段是上下文特定的。本文稍后将提供进一步的描述。
REX’字段1510—这是REX’字段的其余部分并且是EVEX.V’位字段(EVEX字节3,位[3]-V’),其可用于对扩展的32寄存器集的较高16或较低16进行编码。该位以位反转格式存储。值1用于对较低16个寄存器进行编码。换言之,V’VVVV是通过将EVEX.V’、EVEX.vvvv组合而形成的。
写屏蔽字段1470(EVEX字节3,位[2:0]-kkk)—其内容指定写屏蔽寄存器中的寄存器的索引,如之前所描述的。在本发明的一个实施例中,特定值EVEX.kkk=000具有特殊行为,其暗示没有写屏蔽用于特定指令(这可多种方式来实现,包括使用硬连线到全1的写屏蔽或绕过屏蔽硬件的硬件)。
真实操作码字段1530(字节4)
这还称为操作码字节。操作码的一部分在该字段中被指定。
MOD R/M字段1540(字节5)
修饰符字段1446(MODR/M.MOD,位[7-6]-MOD字段1542)—如之前所述,MOD字段1542的内容在存储器存取操作和无存储器存取操作之间进行区分。本文稍后将对该字段进行进一步说明。
MODR/M.reg字段1544,位[5-3]—ModR/M.reg字段的作用能够被概述为如下两种情况:ModR/M.reg对目的地寄存器操作数或源寄存器操作数进行编码,或者ModR/M.reg被处理为操作码扩展且不用于对任何指令操作数进行编码。
MODR/M.r/m字段1546,位[2-0]—ModR/M.r/m字段的作用可包括下述情况:ModR/M.r/m对参考存储器地址的指令操作数进行编码,或者ModR/M.r/m对目的地寄存器操作数或源寄存器操作数进行编码。
标度、索引、基础(SIB)字节(字节6)
标度字段1460(SIB.SS,位[7-6]—如之前所述,标度字段1460的内容用于存储器地址生成。本文稍后将对该字段进行进一步说明。
SIB.xxx1554(位[5-3])和SIB.bbb1556(位[2-0])—之前关于寄存器索引Xxxx和Bbbb提到了这些字段的内容。
位移字节(字节7或字节7-10)
位移字段1462A(字节7-10)—当MOD字段1542包含10时,字节7-10是位移字段1462A,并且其作用与传统32位位移(disp32)相同并且按字节粒度工作。
位移因子字段1462B(字节7)—当MOD字段1542包含01时,字节7是位移因子字段1462B。该字段的位置与按字节粒度工作的传统x86指令集8位位移(disp8)的位置相同。因为disp8是符号扩展的,所以其仅能够在-128和127字节偏移之间进行寻址;按照64字节高速缓冲存储行,disp8使用能够被设定为仅四个实际可用的值-128、-64、0和64的8个位;因为通常需要更大的范围,所以使用disp32;然而,disp32需要4个字节。与disp8和disp32相反,位移因子字段1462B是disp8的重新解释;当使用位移因子字段1462B时,实际的位移由位移因子字段的内容乘以存储器操作数存取的尺寸(N)来确定。这种类型的位移被称为disp8*N。这减少了平均指令长度(所使用的单个字节用于位移,但是具有更大的范围)。这种压缩位移基于如下假设:有效位移是存储器存取的粒度的倍数,并且因此,无需对地址偏移的冗余低阶位进行编码。换言之,位移因子字段1462B替代传统x86指令集8位位移。因此,位移因子字段1462B以与x86指令集8位位移相同的方式进行编码(因此,ModRM/SIB编码规则不变),仅除了disp8被过载为disp8*N。换言之,编码规则或编码长度无变化,而仅仅是硬件对位移值的解释发生了变化(这需要按照存储器操作数的尺寸缩放位移以获得逐字节地址偏移)。
立即数
立即数字段872如之前所描述的那样操作。
示例性的寄存器体系结构-图16
图16为根据本发明的一个实施例的寄存器体系结构1600的框图。寄存器体系结构的寄存器文件和寄存器列于下面:
矢量寄存器文件1610—在图示的实施例中,存在1612位宽的32个矢量寄存器;这些寄存器被称为zmm0至zmm31。较低16个zmm寄存器的较低阶的1456位叠加在寄存器ymm0-16之上。较低16个zmm寄存器的较低阶的128位(ymm寄存器的较低阶的128位)叠加在寄存器xmm0-15之上。特定矢量友好指令格式1500如下表中所图示的那样在这些叠加的寄存器文件上操作。
换言之,矢量长度字段1459B在最大长度和一个或多个其它较短长度之间选择,其中每个这样的较短长度为前一长度的一半;并且不具有矢量长度字段1459B的指令模板在最大矢量长度上操作。此外,在一个实施例中,特定矢量友好指令格式1500的B类指令模板在封包的或标量单/双精度浮点数据和封包的或标量整数数据上操作。标量操作是在zmm/ymm/xmm寄存器中的最低阶数据元素素位置上执行的操作;更高阶数据元素素位置保持与它们在该指令之前相同或者根据实施例进行归零。
写屏蔽寄存器1615—在图示的实施例中,存在8个写屏蔽寄存器(k0至k7),每个的尺寸为64位。如之前所述,在本发明的一个实施例中,矢量屏蔽寄存器k0不能用作写屏蔽;当通常表示k0的编码用于写屏蔽时,其选择0xFFFF的硬接线写屏蔽,有效地对该指令禁用写屏蔽。
多媒体扩展控制状态寄存器(MXCSR)1620—在图示的实施例中,该32位寄存器提供了在浮点运算中使用的状态位和控制位。
通用寄存器1625—在图示的实施例中,存在十六个64位通用寄存器,其连同现有的x86寻址模式一起用于对存储器操作数进行寻址。这些寄存器按名称RAX、RBX、RCX、RDX、RBP、RSI、RDI、RSP和R8至R15进行参考。
扩展标记(EFLAGS)寄存器1630—在图示的实施例中,该32位寄存器用于记录许多指令的结果。
浮点控制字(FCW)寄存器1635和浮点状态字(FSW)寄存器1640—在图示的实施例中,这些寄存器由x87指令集扩展使用来在FCW情况下设定取整模式、异常掩码和标记,并且在FSW的情况下跟踪异常。
标量浮点堆栈寄存器文件(x87堆栈)1645,其上又名(alias)MMX封包整数平面寄存器文件1650—在图示的实施例中,x87堆栈为利用x87指令集扩展对32/64/80位浮点数据执行标量浮点操作的八元素堆栈;而MMX寄存器用于对64位封包整数数据执行操作,以及为在MMX和XMM寄存器之间执行的一些操作保持操作数。
段寄存器1655—在图示的实施例中,存在六个16位寄存器,其用于存储分段地址生成所使用的数据。
RIP寄存器1665—在图示的实施例中,该64位寄存器存储指令指针。
本发明的替代实施例可以使用更宽或更窄的寄存器。另外,本发明的可替代实施例可以使用更多、更少、或不同的寄存器文件和寄存器。
示例性的有序处理器体系结构—图17-17B
图17A-17B图示了示例性的有序处理器体系结构的框图。围绕扩增有宽矢量处理器(VPU)的有序CPU核心的多个实例来设计这些示例性的实施例。核心通过高带宽互连网络与某些固定功能逻辑、存储器I/O接口和其它必要的I/O逻辑进行通信,取决于e19t应用。例如,该实施例实现为独立式GPU通常包括PCI总线。
图17A是根据本发明的实施例的单CPU核心连同其与片上互连网络1702的连接及其2级(L2)高速缓冲存储器1704的本地子集的框图。指令解码器1700支持带有包括特定矢量指令格式1500的扩展的x86指令集。尽管在本发明的一个实施例中(为了简化设计),标量单元1708和矢量单元1710使用单独的寄存器集(分别是标量寄存器1712和矢量寄存器1714),并且在它们之间传递的数据被写入存储器并且然后从1级(L1)高速缓冲存储器1706中读回,但是本发明的替代实施例可以使用不同的方法(例如,使用单个寄存器集或者包括允许数据在两个寄存器文件之间传递的通信路径,而不进行写入和读回)。
L1高速缓冲存储器1706允许低时延存取高速缓冲存储器的标量和矢量单元。连同矢量友好指令格式的load-op指令,这表示能够有点类似于扩展寄存器文件来处理L1高速缓冲存储器1706。这显著地提高了许多算法的性能,尤其是利用驱逐暗示字段1452B。
L2高速缓冲存储器1704的本地子集是被划分成单独的本地子集的全局L2高速缓冲存储器的一部分,每个CPU核心各一个本地子集。每个CPU具有通往其L2高速缓冲存储器1704的自身本地子集的直接存取路径。由CPU核心读取的数据被存储在其L2高速缓冲存储器子集1704中,并且能够与存取其自身局部L2高速缓冲存储器子集的其它CPU并行地被快速地存取。由CPU核心写入的数据被存储在其自身的L2高速缓冲存储器子集1704中,并且如果有必要的话从其它子集中清除。环形网络确保共享数据的一致性。
图17B是根据本发明的实施例的图17A中的CPU核心的部分的分解视图。图17B包括L1高速缓冲存储器1704的L1数据高速缓冲存储器1706A部分,以及关于矢量单元1710和矢量寄存器1714的更多细节。具体地,矢量单元1710是16-宽矢量处理单元(VPU)(参见16-宽ALU1728),其执行整数、单精度浮点和双精度浮点指令。VPU支持用混合单元1720混合寄存器输入、用数字转换单元1722A-B进行数字转换、以及在存储器输入上用复制单元1724进行复制。写屏蔽寄存器1726允许预测作为结果的矢量写入。
寄存器数据能够以多种方式进行混合,例如,支持矩阵乘法。来自存储器的数据能够跨越VPU通道而被复制。这是图形和非图形并行数据处理的共同操作,显著地提高了高速缓冲存储效率。
环形网络是双向的,以允许诸如CPU核心、L2高速缓冲存储器和其它逻辑块的代理在芯片内彼此通信。每个环形数据路径在每个方向上为1612位宽。
示例性的无序体系结构—图18
图18是示出根据本发明的实施例的示例性的无序体系结构的框图。具体地,图18示出了公知的示例性无序体系结构,其已被修改而并入了矢量友好指令格式及其执行。在图18中,箭头表示在两个或更多个单元之间的耦合,并且箭头的方向指示在那些单元之间的数据流方向。图18包括前端单元1805,其与执行引擎单元1810和存储器单元1815耦合;执行引擎单元1810进一步与存储器单元1815耦合。
前端单元1805包括1级(L1)分支预测单元1820,其与2级(L2)分支预测单元1822耦合。L1和L2分支预测单元1820和1822与L1指令高速缓冲存储单元1824耦合。L1指令高速缓冲存储单元1824与指令转换后援缓冲器(TLB)1826耦合,指令转换后援缓冲器1826进一步与指令取回和预解码单元1828耦合。指令取回和预解码单元1828与指令队列单元1830耦合,指令队列单元1830进一步与解码单元1832耦合。解码单元1832包括复杂解码器单元1834和三个简单解码器单元1836、1838和1840。解码单元1832包括微代码ROM单元1842。解码单元1832可如前所述在解码阶段部分中那样操作。L1指令高速缓冲存储单元1824进一步与存储器单元1815中的L2高速缓冲存储单元1848耦合。指令TLB单元1826进一步与存储器单元1815中的第二级TLB单元1846耦合。解码单元1832、微代码ROM单元1842和循环流探测器单元1844各自与执行引擎单元1810中的重命名/分配器单元1856耦合。
执行引擎单元1810包括重命名/分配器单元1856,重命名/分配器单元1856与引退单元(retirement unit)1874和统一调度器单元1858耦合。引退单元1874进一步与执行单元1860耦合并且包括重排序缓冲单元1878。统一调度器单元1858进一步与物理寄存器文件单元1876耦合,物理寄存器文件单元1876与执行单元1860耦合。物理寄存器文件单元1876包括矢量寄存器单元1877A、写屏蔽寄存器单元1877B、和标量寄存器单元1877C;这些寄存器单元可以提供矢量寄存器1610、矢量屏蔽寄存器1615、以及通用寄存器1625;并且物理寄存器文件单元1876可以包括未示出的附加寄存器文件(例如,标量浮点堆栈寄存器文件1645,其又名MMX封包整数平面寄存器文件1650)。执行单元1860包括三个混合标量和矢量单元1862、1864和1872;加载单元1866;存储地址单元1868;存储数据单元1870。加载单元1866、存储地址单元1868和存储数据单元1870各自进一步与存储器单元1815中的数据TLB单元1252耦合。
存储器单元1815包括与数据TLB单元1852耦合的第二级TLB单元1846。数据TLB单元1852与L1数据高速缓冲存储单元1854耦合。L1数据高速缓冲存储单元1854与L2高速缓冲存储单元1848进一步耦合。在一些实施例中,L2高速缓冲存储单元1848进一步与存储器单元1815内部和/或外部的L3和更高的高速缓冲存储单元1850耦合。
通过举例的方式,示例性的无序体系结构可以实现如下的过程管线:1)指令取回和预解码单元1828执行取回和长度解码阶段;2)解码单元1832执行解码阶段;3)重命名/分配器单元1856执行分配阶段和重命名阶段;4)统一调度器1858执行调度阶段;5)物理寄存器文件单元1876、重排序缓冲单元1878和存储器单元1815执行寄存器读取/存储器读取阶段;执行单元1860执行执行/数据变换阶段;6)存储器单元1815和重排序缓冲单元1878执行写回/存储器写入阶段1960;7)引退单元1874执行ROB读取阶段;8)各个单元可在异常处理阶段中被涉及;以及9)引退单元1874和物理寄存器文件单元1876执行提交阶段。
示例性的单核心和多核心处理器
图23是根据本发明的实施例的带有集成存储器控制器和图形的单核心处理器和多核心处理器2300的框图。图23中的实线框示出了带有单核心2302A、系统代理2310、一组一个或多个总线控制器单元2316的处理器2300,而虚线框的任选添加示出了带有多个核心2302A-N、系统代理单元2310中的一组一个或多个集成存储器控制器单元2314、以及集成图形逻辑2308的可选处理器2300。
存储器层级包括核心内的一级或多级高速缓冲存储器、一组或一个或多个共享高速缓冲存储单元2306以及与一组集成存储器控制器单元2314耦合的外部存储器(未显示)。这组共享高速缓冲存储单元2306可包括一个或多个中级高速缓冲存储器,诸如2级(L2)、3级(L3)、4级(L4)或其它级的高速缓冲存储器、最后一级高速缓冲存储器(LLC)、和/或其组合。尽管在一个实施例中,基于环的互连单元2312将集成图形逻辑2308、一组共享高速缓冲存储单元2306和系统代理单元2310互连,可选的实施例可以使用任何数量的用于将这些单元互连的公知技术。
在一些实施例中,核心2302A-N中的一个或多个能够为多线程的。系统代理2310包括协调并操作核心2302A-N的那些部件。系统代理单元2310可包括例如功率控制单元(PCU)和显示单元。PCU可以是或包括调整核心2302A-N和集成图形逻辑2308的功率状态所需要的逻辑和部件。显示单元用于驱动一个或多个外部连接的显示器。
从体系结构和/或指令集方面看,核心2302A-N可以是同类的或异构的。例如,核心2302A-N中的一些可以是有序的(例如,类似于图17A和图17B中所示的),而其它核心是无序的(例如,类似于图18中所示的)。作为另一示例,核心2302A-N中的两个或更多个可以能够执行相同的指令集,而其它核心可能够仅执行该指令集的子集或不同的指令集。至少一个核心能够执行本文所描述的矢量友好指令格式。
处理器可以是通用处理器,诸如可从Santa Clara,Calif的英特尔公司获得的CoreTMi3、i5、i7、2Duo和Quad、XeonTM、或ItaniumTM处理器。可选地,处理器可以来自其它公司。处理器可以是专用处理器,例如网络或通信处理器,压缩引擎、图形处理器、协同处理器、嵌入式处理器等等。处理器可在一个或多个芯片上实现。处理器2300可以利用例如BiCMOS、CMOS或NMOS的多种处理技术中的任一种成为一个或多个基板的一部分和/或可在一个或多个基板上实现。
示例性的计算机系统和处理器—图19-22
图19-21是适于包括处理器2300的示例性系统,而图22是可包括一个或多个核心2302的示例性的片上系统(SoC)。本领域公知的用于膝上型计算机、台式计算机、手持式PC、个人数字助理、工程工作站、服务器、网络设备、网络集线器、交换机、嵌入式处理器、数字信号处理器(DSP)、图形设备、视频游戏设备、机顶盒、微控制器、蜂窝电话、便携式媒体播放器、手持式设备和各种其它电子设备的其它系统设计和配置也是适用的。一般地,如本文所公开的能够合并处理器和/或其它执行逻辑的大量系统或电子设备一般是适用的。
现参考图19,示出了依照本发明的一个实施例的系统1900的框图。系统1900可包括与图形存储器控制器中心(GMCH)1920耦合的一个或多个处理器1910、1915。在图19中用虚线表示了附加处理器1915的可选特性。
每个处理器1910、1915可以是某种型号的处理器2300。然而,应当理解,集成图形逻辑和集成存储器控制单元不可能存在于处理器1910、1915中。
图19示出了GMCH1920可与存储器1940耦合,存储器1940可以例如是动态随机存取存储器(DRAM)。对于至少一个实施例,DRAM可以与非易失性高速缓冲存储器相关联。
GMCH1920可以是芯片组或芯片组的一部分。GMCH1920可以与处理器1910、1915通信并且控制处理器1910、1915和存储器1940之间的交互。GMCH1920还可充当处理器1910、1915和系统1900的其它元件之间的加速总线接口。对于至少一个实施例,GMCH1920经由诸如前端总线(FSB)1995的多点分支总线与处理器1910、1915通信。
此外,GMCH1920与显示器1945(诸如平板显示器)耦合。GMCH1920可以包括集成图形加速器。GMCH1920进一步与输入/输出(I/O)控制器中心(ICH)1950耦合,其可用于将各种外围设备与系统1900耦合。例如,在图19的实施例中显示了外部图形设备1960连同另外的外围设备1970,外部图形设备1960可以是与ICH1950耦合的分立图形设备。
可选地,附加的或不同的处理器也可以存在于系统1900中。例如,附加的处理器1915可以包括与处理器1910相同的附加处理器、与处理器1910异构或非对称的附加处理器、加速器(例如图形加速器或数字信号处理(DSP)单元)、现场可编程门阵列、或任何其它处理器。从包括体系结构、微体系结构、热力、功率消耗特性等指标的度量范围看,物理资源1910、1915之间可存在多种差别。这些差别可有效地将其自身展现为处理元件1910、1915中的非对称和异构的。对于至少一个实施例,各种处理元件1910、1915可驻存在同一片封装中。
现在参考图20,该图示出了依照本发明的实施例的第二系统2000的框图。如图20所示,微处理器系统2000是点对点互连系统,并且包括经由点对点互连2050耦合的第一处理器2070和第二处理器2080。如图14所示,处理器2070和2080中的每个可以是某种型号的处理器2300。
可选地,一个或多个处理器2070、2080可以是除了处理器之外的元件,诸如加速器或现场可编程门阵列。
尽管显示为仅具有两个处理器2070、2080,但应当理解,本发明的范围不受此限制。在其它实施例中,一个或多个附加的处理元件可存在于既定的处理器中。
处理器2070还可以包括集成存储器控制器中心(IMC)2072和点对点(P-P)接口2076和2078。类似地,第二处理器2080可以包括IMC2082和P-P接口2086和2088。处理器2070、2080可以利用PtP接口电路2078、2088经由点对点(PtP)接口2050交换数据。如图20所示,IMC的2072和2082将处理器与相应的存储器(即,存储器2042和存储器2044)耦合,该存储器可以是在本地附接至相应的处理器的主存储器的部分。
处理器2070、2080可以各自利用点对点接口电路2076、2094、2086、2098经由单独的P-P接口2052、2054与芯片组2090交换数据。芯片组2090还可以经由高性能图形接口2039与高性能图形电路2038交换数据。
共享高速缓冲存储器(未显示)可包括在两个处理器之外的任一处理器中,而经由P-P互连与处理器连接,以使得在处理器被置于低功率模式时任一个或两个处理器的本地高速缓冲存储器信息可被存储在共享高速缓冲存储器中。
芯片组2090可以经由接口2096与第一总线2016耦合。在一个实施例中,第一总线2016可以是外围部件互连(PCI)总线、或诸如PCI快速总线或另一第三代I/O互连总线的总线,但是本发明的范围不受此限制。
如图20中所示,各个I/O设备2014可以连同将第一总线2016与第二总线2020耦合的总线桥2018一起与第一总线2016耦合。在一个实施例中,第二总线2020可以是低引脚数(LPC)总线。各种设备可与第二总线2020耦合,包括例如键盘/鼠标2022、通信设备2026和数据存储单元2028,诸如在一个实施例中可包括代码2030的磁盘驱动或其它大容量存储设备。此外,音频I/O2024可与第二总线2020耦合。注意的是,其它体系结构是可能的。例如,除了图20的点对点体系结构之外,系统可以实现多点分支总线(multi-drop bus)或其它这样的体系结构。
现在参考图21,该图示出了依照本发明的实施例的第三系统2100的框图。图20和图21中相似的元件使用了相似附图标记,为了避免使图21的其它方面不清晰而从图21中省去了图20的一些方面。
图21图示出处理元件2070、2080可以分别包括集成存储器和I/O控制逻辑(“CL”)2072和2082。对于至少一个实施例,CL2072、2082可以包括诸如以上说明的存储器控制中心逻辑(IMC)。另外,CL2072、2082还可以包括I/O控制逻辑。图21中不仅示出了与CL2072、2082耦合的存储器2042、2044,而且示出了I/O设备2120也与控制逻辑2072、2082耦合。传统I/O设备2115与芯片组2090耦合。
现在参考图22,示出了依照本发明的实施例的SoC2200的框图。图中的相似元件使用了相似的附图标记。而且,虚线框是更高级的SoC上的可选特征。在图22中,互连单元2202与如下部件耦合:应用处理器2210,其包括一组一个或多个核心2302A-N和共享高速缓冲存储单元2306;系统代理单元2310;总线控制器单元2316;集成存储器控制器单元2314;一组或一个或多个媒体处理器2220,其可包括集成图形逻辑2308、用于提供静态和/或视频摄像机功能的图像处理器2224、用于提供硬件音频加速的音频处理器2226、以及用于提供视频编码/解码加速的视频处理器2228;静态随机存取存储器(SRAM)单元2230;直接存储器存取(DMA)单元2232;以及用于与一个或多个外部显示器耦合的显示单元2240。
本文所公开的机制的实施例可在硬件、软件、固件或这些实现方法的组合中实现。本发明的实施例可实现为在包括至少一个处理器、存储系统(包括易失性和非易失性存储器和/或存储元件)、至少一个输入设备以及至少一个输出设备的可编程系统上执行的计算机程序或程序代码。
程序代码可应用于输入数据以执行本文所述的功能并且生成输出信息。输出信息可以已知方式应用于一个或多个输出设备。为了本申请的目的,处理器系统包括具有例如数字信号处理器(DSP)、微控制器、专用集成电路(ASIC)或微处理器的处理器的任何系统。
程序代码可以用高级过程编程语言或面向对象的编程语言来实施,以与处理系统通信。根据需要,程序代码还可以用汇编或机器语言来实施。事实上,本文所描述的机制的范围不限于任何特定的编程语言。在任何情况下,语言可以是经编译的或经解释的语言。
至少一个实施例的一个或多个方面可通过存储在机器可读介质上的代表处理器内的各种逻辑的代表性指令来实施,当由机器读取时,指令使机器装配逻辑来执行本文所描述的技术。这种称为“IP核心”的代表可存储在有形的机器可读介质上,并且供给各个顾客或制造设施以加载到实际上制作逻辑或处理器的制造机器中。
这种机器可读存储介质可包括但不限于通过机器或设备制造或形成的非暂态性的有形物品布置,包括:存储介质,诸如硬盘、包括软盘、光盘(光盘只读存储器(CD-ROM)、可重写光盘(CD-RW))和磁光盘的任何其它类型的磁盘;半导体器件,诸如只读存储器(ROM)、随机存取存储器(RAM),诸如动态随机存取存储器(DRAM)、静态随机存取存储器(SRAM)、可擦除可编程只读存储器(EPROM)、闪存、电可擦除可编程只读存储器(EEPROM)、磁卡或光卡;或者适用于存储电子指令的任何其它类型的介质。
因此,本发明的实施例还包括非暂态性的有形机器可读介质,其包含矢量友好指令格式的指令或者包括设计数据,诸如硬件描述语言(HDL),这限定了本文中描述的结构、电路、装置、处理器和/或系统特征。这些实施例还可称为程序产品。
在一些情况下,指令转换器可用于将指令从源指令集转换成目标指令集。例如,指令转换器可以将指令变换(例如,利用静态二进制变换、包括动态编译的动态二进制变换)、变形、仿真或以其它方式转换成待由核心处理的一个或多个其它指令。指令转换器可以软件、硬件、固件或其组合来实施。指令转换器可以在处理器上、不在处理器上、或部分在处理器上和部分不在处理器上。
图24是根据本发明的实施例的对比将源指令集中的二进制指令转换成目标指令集中的二进制指令的软件指令转换器的使用的框图。在图示的实施例中,指令转换器是软件指令转换器,但是可选地指令转换器可以软件、固件、硬件或其各种组合来实现。图24示出了高级语言2402的程序可利用x86编译器2404进行编译以生成x86二进制代码2406,x86二进制代码2406可由具有至少一个x86指令集核心2416的处理器本机执行(假设经编译的一些指令呈矢量友好指令格式)。具有至少一个x86指令集核心2416的处理器代表能够通过兼容地执行或其它方式处理如下来执行与具有至少一个x86指令集核心的英特尔处理器基本相同的功能的任何处理器:(1)英特尔x86指令集核心的指令集的实质部分,或者(2)旨在于具有至少一个x86指令集核心的英特尔处理器上运行的应用程序或其它软件的对象代码版本,从而实现与具有至少一个x86指令集核心的英特尔处理器基本相同的结果。X86编译器2404代表了可操作以生成x86二进制代码2406(例如,对象代码)的编译器,x86二进制代码2406能够通过或不通过额外的链接处理而在具有至少一个x86指令集核心2416的处理器上执行。类似地,图中示出了高级语言2402的程序可以利用可选的指令集编译器2408进行编译以生成可选的指令集二进制代码2410,指令集二进制代码2410可由不具有至少一个x86指令集核心2414的处理器(例如,具有执行CA,Sunnyvale的MIPS Technologies的MIPS指令集和/或执行CA,Sunnyvale的ARM Holdings的ARM指令集的核心的处理器)本机执行。指令转换器2412用于将x86二进制代码2406转换成可由不具有x86指令集核心2414的处理器本机执行的代码。该经转换的代码不大可能与可选的指令集二进制代码2410相同,这是因为能够实现这点的指令转换器很难制造;然而,经转换的代码将实现通常的操作并且由来自可选的指令集的指令构成。因此,指令转换器2412代表了通过仿真、模拟或任何其它处理而允许不具有x86指令集处理器或核心的处理器或其它电子设备来执行x86二进制代码2406的软件、固件、硬件或其组合。
本文所公开的矢量友好指令格式的指令的一些操作可通过硬件部件来执行,并且可以用于使或至少使得电路或其它硬件部件被编程有执行操作的指令的机器可执行指令来具体实施。电路可以包括通用或专用处理器,或逻辑电路,仅列举了几个示例。操作还可任选地通过硬件和软件的组合来执行。执行逻辑和/或处理器可以包括响应机器指令或从机器指令得到的一个或多个控制信号以存储指令指定结果操作数的专门或特定的电路或其它逻辑。例如,本文公开的指令的实施例可以在图19-22的一个或多个系统中执行,并且矢量友好指令格式的指令的实施例可以存储在程序代码中以在系统中执行。另外,这些图的处理元件可以使用本文详述的详细管线和/或体系结构(例如,有序和无序体系结构)中的一个。例如,有序体系结构的解码单元可以对指令进行解码,将经解码的指令传递到矢量或标量单元,等等。
上面的描述旨在说明本发明的优选实施例。从上面的讨论还应当显知,尤其在该技术领域,增长快速且进一步的发展不易于预见,本领域技术人员能够对本发明的布置和细节进行修改而在随附权利要求书及其等同内容的范围内不偏离本发明的原理。例如,方法的一个或多个操作可组合或进一步分离。
替代的实施例
尽管已经描述了本机执行矢量友好指令格式的实施例,但是本发明的替代实施例可以通过在执行不同指令集的处理器(例如,执行CA,Sunnyvale的MIPS Technologies的MIPS指令集的处理器,执行CA,Sunnyvale的ARM Holdings的ARM指令集的处理器)上运行的仿真层来执行矢量友好指令格式。而且,尽管图中的流程图示出了本发明的一些实施例所执行的操作的特定次序,但应当理解这样的次序是示例性的(例如,替代的实施例可以按不同的次序执行操作,组合一些操作,重叠一些操作,等等)。
在上文的描述中,为了说明的目的,已经阐述了多方面具体细节从而提供本发明的实施例的全面理解。然而,本领域技术人员显而易见,可在不具有这些具体细节中的一些细节的情况下来实施一个或多个其它实施例。所描述的特定实施例被提供不是为了限制本发明而是说明本发明的实施例。本发明的范围不是由上文提供的具体示例确定的,而是仅由下面的权利要求书确定。
Claims (19)
1.一种在计算机处理器中执行聚集跨步指令的方法,包括:
取出所述聚集跨步指令,其中所述聚集跨步指令包括目的地寄存器操作数、写屏蔽、以及包括标度值、基值和跨步值的存储器源寻址信息;
对所取出的聚集跨步指令进行解码;
执行所取出的聚集跨步指令以根据所述写屏蔽的至少一些位值将跨步数据元素从存储器有条件地存储到目的地寄存器中,其中,所述执行进一步包括:
确定所述写屏蔽和所述聚集跨步指令的所述目的地寄存器是否是同一个寄存器,
当所述写屏蔽和所述目的地寄存器是同一个寄存器时,停止所述聚集跨步指令的执行,
当所述写屏蔽和所述目的地寄存器不是同一个寄存器时,
产生存储器中第一数据元素的地址,其中,该地址是由所述跨步值乘以所述标度值再乘以数据元素位置、并将所述基值和位移值与所乘出的值相加而确定的,以及
通过仅评估相应于存储器中所述第一数据元素的所述写屏蔽的第一屏蔽位值,确定存储器中所述第一数据元素将存储于所述目的地寄存器中相应位置处,其中,
当相应于存储器中所述第一数据元素的所述写屏蔽的所述第一屏蔽位值未指示存储器中所述第一数据元素将被存储时,不改变所述目的地寄存器中相应位置处的数据元素,以及
当相应于存储器中所述第一数据元素的所述写屏蔽的所述第一屏蔽位值指示存储器中所述第一数据元素将被存储时,将所述第一数据元素存储于所述目的地寄存器中相应位置处,
产生存储器中第二数据元素的地址,其中,该地址是由所述跨步值乘以所述标度值再乘以所述第二数据元素的数据元素位置、并将所述基值和位移值与所乘出的值相加而确定的,以及
通过仅评估相应于存储器中所述第二数据元素的所述写屏蔽的第二屏蔽位值,确定存储器中所述第二数据元素将存储于所述目的地寄存器中相应位置处,其中,
当相应于存储器中所述第二数据元素的所述写屏蔽的所述第二屏蔽位值未指示存储器中所述第二数据元素将被存储时,不改变所述目的地寄存器中相应位置处的第二数据元素,以及
当相应于存储器中所述第二数据元素的所述写屏蔽的所述第二屏蔽位值指示存储器中所述第二数据元素将被存储时,将存储器中所述第二数据元素存储于所述目的地寄存器中相应位置处。
2.如权利要求1所述的方法,其中,所述执行进一步包括:
清除所述写屏蔽的所述第一屏蔽位值以指示成功存储。
3.如权利要求1所述的方法,其中,所述第一屏蔽位值是所述写屏蔽的最低有效位,并且所述目的地寄存器的所述第一数据元素是所述目的地寄存器的最低有效数据元素。
4.如权利要求2所述的方法,其中,所述执行进一步包括:
清除所述写屏蔽的所述第二屏蔽位值以指示成功存储。
5.如权利要求1所述的方法,其中,所述目的地寄存器中数据元素的尺寸为32位,并且所述写屏蔽是专用16位寄存器。
6.如权利要求1所述的方法,其中,所述目的地寄存器中数据元素的尺寸为64位,并且所述写屏蔽是16位寄存器,其中,所述写屏蔽的八个最低有效位用于确定存储器的哪些数据元素将存储于所述目的地寄存器中。
7.如权利要求1所述的方法,其中,所述目的地寄存器中数据元素的尺寸为32位,并且所述写屏蔽是矢量寄存器,其中,用于所述写屏蔽的每一数据元素的符号位是所述屏蔽位。
8.如权利要求1所述的方法,其中,存储于所述目的地寄存器中的存储器中的任何数据元素在其存储到所述目的地寄存器之前被向上转换。
9.一种在计算机处理器中执行分散跨步指令的方法,包括:
取出所述分散跨步指令,其中所述分散跨步指令包括源寄存器操作数、写屏蔽、以及包括标度值、基值和跨步值的存储器目的地寻址信息;
对所述分散跨步指令进行解码;
执行所述分散跨步指令以根据所述写屏蔽的至少一些位值将数据元素从所述源寄存器有条件地存储到存储器的跨步位置中,其中,所述执行进一步包括:
产生存储器中第一位置的地址,其中,该地址是使用基值确定的,确定所产生的地址是否存在故障,
当所产生的地址存在故障时,停止所述分散跨步指令的执行,
当所产生的地址不存在故障时,通过仅评估所述写屏蔽的第一屏蔽位值,确定所述源寄存器的第一数据元素将被存储于存储器中在所产生的存储器中所述第一位置的地址上,其中,
当所述写屏蔽的所述第一屏蔽位值指示所述源寄存器的所述第一数据元素将不会存储于存储器中在所产生的存储器中所述第一位置的地址上时,不改变所产生的存储器中所述第一位置的地址上的数据元素,以及
当所述写屏蔽的所述第一屏蔽位值指示所述源寄存器的所述第一数据元素将存储于存储器中在所产生的存储器中所述第一位置的地址上时,将所述源寄存器的所述第一数据元素存储于所产生的存储器中所述第一位置的地址处。
10.如权利要求9所述的方法,其中,所述执行进一步包括:
清除所述写屏蔽的所述第一屏蔽位值以指示成功存储。
11.如权利要求10所述的方法,其中,所述写屏蔽的所述第一屏蔽位值是所述写屏蔽的最低有效位,并且所述源寄存器的所述第一数据元素是所述源寄存器的最低有效数据元素。
12.如权利要求10所述的方法,其中,所述执行进一步包括:
产生存储器中第二位置的地址,其中,所述地址是使用所述标度值、基值和跨步值确定的,其中所述第二位置距所述第一位置X个数据元素,且X是所述跨步值,以及
仅使用所述写屏蔽的第二屏蔽位值来确定所述源寄存器的第二数据元素将存储于存储器中在所产生的存储器中所述第二位置的地址上,其中,
当所述写屏蔽的第二屏蔽位值指示所述源寄存器的所述第二数据元素将不会存储于存储器中在所产生的存储器中所述第二位置的地址上时,不改变在所产生的存储器中所述第二位置的地址上的数据元素,以及
当所述写屏蔽的第二屏蔽位值指示所述源寄存器的所述第二数据元素将存储于存储器中在所产生的存储器中所述第二位置的地址上时,将所述源寄存器的所述第二数据元素存储于所产生的存储器中所述第二位置的地址上,并清除所述写屏蔽的所述第二屏蔽位值以指示成功存储。
13.如权利要求9所述的方法,其中,所述源寄存器中数据元素的尺寸为32位,并且所述写屏蔽是专用16位寄存器。
14.如权利要求9所述的方法,其中,所述源寄存器中数据元素的尺寸为64位,并且所述写屏蔽是16位寄存器,其中,所述写屏蔽的八个最低有效位用于确定所述源寄存器的哪些数据元素将存储于所述存储器中。
15.如权利要求9所述的方法,其中,所述源寄存器中数据元素的尺寸为32位,并且所述写屏蔽是向量寄存器,其中,用于所述写屏蔽的每一数据元素的符号位是所述屏蔽位。
16.一种用于执行聚集跨步指令和分散跨步指令的设备,包括:
硬件解码器,其用于解码:
聚集跨步指令,其中,所述聚集跨步指令包括目的地寄存器操作数、与所述聚集跨步指令相关联的写屏蔽、以及包括标度值、基值和跨步值的存储器源寻址信息,以及
分散跨步指令,其中,所述分散跨步指令包括源寄存器操作数、与所述分散跨步指令相关联的写屏蔽、以及包括标度值、基值和跨步值的存储器目的地寻址信息;
执行逻辑单元,其用于执行经解码的聚集跨步指令和分散跨步指令,其中,经解码的聚集跨步指令的执行使得来自存储器的跨步数据元素根据所述聚集跨步指令的所述写屏蔽的至少一些位值有条件地存储于所述目的地寄存器中,且经解码的分散跨步指令的执行使得数据元素根据所述分散跨步指令的所述写屏蔽的至少一些位值有条件地存储于所述存储器的跨步位置中,其中,为了执行已解码的聚集跨步指令,所述执行逻辑单元:
确定与所述聚集跨步指令相关联的所述写屏蔽和所述聚集跨步指令的所述目的地寄存器是否是同一个寄存器,
当与所述聚集跨步指令相关联的所述写屏蔽和所述目的地寄存器是同一个寄存器时,停止所述聚集跨步指令的执行,
当与所述聚集跨步指令相关联的所述写屏蔽和所述目的地寄存器不是同一个寄存器时,
产生存储器中第一数据元素的地址,其中,该地址是由所述跨步值乘以所述标度值再乘以数据元素位置、并将所述基值和位移值与所乘出的值相加而确定的,以及
仅使用相应于存储器中所述第一数据元素的与所述聚集跨步指令相关联的所述写屏蔽的第一屏蔽位值,来确定存储器中所述第一数据元素将存储于所述目的地寄存器中相应位置处,其中,
当相应于存储器中所述第一数据元素的与所述聚集跨步指令相关联的所述写屏蔽的所述第一屏蔽位值未指示存储器中所述第一数据元素将被存储时,不改变所述目的地寄存器中相应位置处的数据元素,以及
当相应于存储器中所述第一数据元素的与所述聚集跨步指令相关联的所述写屏蔽的所述第一屏蔽位值指示存储器中所述第一数据元素将被存储时,将所述第一数据元素存储于所述目的地寄存器中相应位置处。
17.如权利要求16所述的设备,其中,所述执行逻辑单元包括矢量执行逻辑单元。
18.如权利要求16所述的设备,其中,所述聚集跨步指令和/或所述分散跨步指令的写屏蔽是专用16位寄存器。
19.如权利要求16所述的设备,其中,所述聚集跨步指令的所述源寄存器是512位矢量寄存器。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US13/078,891 | 2011-04-01 | ||
US13/078,891 US20120254591A1 (en) | 2011-04-01 | 2011-04-01 | Systems, apparatuses, and methods for stride pattern gathering of data elements and stride pattern scattering of data elements |
PCT/US2011/063590 WO2012134555A1 (en) | 2011-04-01 | 2011-12-06 | Systems, apparatuses, and methods for stride pattern gathering of data elements and stride pattern scattering of data elements |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103562856A CN103562856A (zh) | 2014-02-05 |
CN103562856B true CN103562856B (zh) | 2016-11-16 |
Family
ID=46928901
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201180071342.7A Expired - Fee Related CN103562856B (zh) | 2011-04-01 | 2011-12-06 | 用于数据元素的跨步图案聚集及数据元素的跨步图案分散的系统、装置及方法 |
Country Status (8)
Country | Link |
---|---|
US (2) | US20120254591A1 (zh) |
JP (2) | JP5844882B2 (zh) |
KR (1) | KR101607161B1 (zh) |
CN (1) | CN103562856B (zh) |
DE (1) | DE112011105121T5 (zh) |
GB (1) | GB2503169B (zh) |
TW (2) | TWI514273B (zh) |
WO (1) | WO2012134555A1 (zh) |
Families Citing this family (74)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
GB2480296A (en) * | 2010-05-12 | 2011-11-16 | Nds Ltd | Processor with differential power analysis attack protection |
EP2695054B1 (en) | 2011-04-01 | 2018-08-15 | Intel Corporation | Vector friendly instruction format and execution thereof |
US20120254591A1 (en) * | 2011-04-01 | 2012-10-04 | Hughes Christopher J | Systems, apparatuses, and methods for stride pattern gathering of data elements and stride pattern scattering of data elements |
US20130185538A1 (en) * | 2011-07-14 | 2013-07-18 | Texas Instruments Incorporated | Processor with inter-processing path communication |
JP5933011B2 (ja) | 2011-09-26 | 2016-06-08 | インテル・コーポレーション | ストライド機能を有するベクトルロード演算/ストア演算を提供する命令及びロジック |
US9672036B2 (en) | 2011-09-26 | 2017-06-06 | Intel Corporation | Instruction and logic to provide vector loads with strides and masking functionality |
US9251374B2 (en) * | 2011-12-22 | 2016-02-02 | Intel Corporation | Instructions to perform JH cryptographic hashing |
WO2013112118A2 (en) * | 2011-12-22 | 2013-08-01 | Intel Corporation | Instructions to perform jh cryptographic hashing in a 256 bit data path |
US10157061B2 (en) | 2011-12-22 | 2018-12-18 | Intel Corporation | Instructions for storing in general purpose registers one of two scalar constants based on the contents of vector write masks |
US20140201499A1 (en) * | 2011-12-23 | 2014-07-17 | Elmoustapha Ould-Ahmed-Vall | Systems, apparatuses, and methods for performing conversion of a list of index values into a mask value |
CN104011648B (zh) * | 2011-12-23 | 2018-09-11 | 英特尔公司 | 用于执行向量打包压缩和重复的系统、装置以及方法 |
WO2013095669A1 (en) * | 2011-12-23 | 2013-06-27 | Intel Corporation | Multi-register scatter instruction |
CN104040489B (zh) * | 2011-12-23 | 2016-11-23 | 英特尔公司 | 多寄存器收集指令 |
JP6023213B2 (ja) | 2011-12-29 | 2016-11-09 | コニンクリーケ・ケイピーエヌ・ナムローゼ・フェンノートシャップ | セグメント化されたコンテンツについての制御されたストリーミング |
CN104246694B (zh) * | 2011-12-29 | 2019-01-01 | 英特尔公司 | 聚集页错误信令和处理 |
WO2013101210A1 (en) * | 2011-12-30 | 2013-07-04 | Intel Corporation | Transpose instruction |
US9632777B2 (en) * | 2012-08-03 | 2017-04-25 | International Business Machines Corporation | Gather/scatter of multiple data elements with packed loading/storing into/from a register file entry |
US9575755B2 (en) | 2012-08-03 | 2017-02-21 | International Business Machines Corporation | Vector processing in an active memory device |
US9569211B2 (en) | 2012-08-03 | 2017-02-14 | International Business Machines Corporation | Predication in a vector processor |
US9594724B2 (en) | 2012-08-09 | 2017-03-14 | International Business Machines Corporation | Vector register file |
US9471317B2 (en) * | 2012-09-27 | 2016-10-18 | Texas Instruments Deutschland Gmbh | Execution of additional instructions in conjunction atomically as specified in instruction field |
US10049061B2 (en) * | 2012-11-12 | 2018-08-14 | International Business Machines Corporation | Active memory device gather, scatter, and filter |
US9244684B2 (en) | 2013-03-15 | 2016-01-26 | Intel Corporation | Limited range vector memory access instructions, processors, methods, and systems |
US11074169B2 (en) * | 2013-07-03 | 2021-07-27 | Micron Technology, Inc. | Programmed memory controlled data movement and timing within a main memory device |
US10171528B2 (en) * | 2013-07-03 | 2019-01-01 | Koninklijke Kpn N.V. | Streaming of segmented content |
KR102213668B1 (ko) | 2013-09-06 | 2021-02-08 | 삼성전자주식회사 | 제너럴 퍼포즈 프로그래머블 컴퓨팅 디바이스에서의 멀티미디어 데이터 프로세싱 방법 및 그에 따른 데이터 프로세싱 시스템 |
KR102152735B1 (ko) | 2013-09-27 | 2020-09-21 | 삼성전자주식회사 | 그래픽 처리 장치 및 이의 동작 방법 |
KR102113048B1 (ko) | 2013-11-13 | 2020-05-20 | 현대모비스 주식회사 | 마그네틱 엔코더 구조 |
US10114435B2 (en) | 2013-12-23 | 2018-10-30 | Intel Corporation | Method and apparatus to control current transients in a processor |
EP3105903B1 (en) | 2014-02-13 | 2019-08-07 | Koninklijke KPN N.V. | Requesting multiple chunks from a network node on the basis of a single request message |
US9747104B2 (en) * | 2014-05-12 | 2017-08-29 | Qualcomm Incorporated | Utilizing pipeline registers as intermediate storage |
US10523723B2 (en) | 2014-06-06 | 2019-12-31 | Koninklijke Kpn N.V. | Method, system and various components of such a system for selecting a chunk identifier |
US9811464B2 (en) * | 2014-12-11 | 2017-11-07 | Intel Corporation | Apparatus and method for considering spatial locality in loading data elements for execution |
US9830151B2 (en) * | 2014-12-23 | 2017-11-28 | Intel Corporation | Method and apparatus for vector index load and store |
US9875214B2 (en) * | 2015-07-31 | 2018-01-23 | Arm Limited | Apparatus and method for transferring a plurality of data structures between memory and a plurality of vector registers |
GB2540942B (en) | 2015-07-31 | 2019-01-23 | Advanced Risc Mach Ltd | Contingent load suppression |
JP6493088B2 (ja) * | 2015-08-24 | 2019-04-03 | 富士通株式会社 | 演算処理装置及び演算処理装置の制御方法 |
US10503502B2 (en) | 2015-09-25 | 2019-12-10 | Intel Corporation | Data element rearrangement, processors, methods, systems, and instructions |
GB2543303B (en) * | 2015-10-14 | 2017-12-27 | Advanced Risc Mach Ltd | Vector data transfer instruction |
US10152321B2 (en) * | 2015-12-18 | 2018-12-11 | Intel Corporation | Instructions and logic for blend and permute operation sequences |
US10467006B2 (en) * | 2015-12-20 | 2019-11-05 | Intel Corporation | Permutating vector data scattered in a temporary destination into elements of a destination register based on a permutation factor |
US10509726B2 (en) * | 2015-12-20 | 2019-12-17 | Intel Corporation | Instructions and logic for load-indices-and-prefetch-scatters operations |
US20170177349A1 (en) * | 2015-12-21 | 2017-06-22 | Intel Corporation | Instructions and Logic for Load-Indices-and-Prefetch-Gathers Operations |
US20170177359A1 (en) * | 2015-12-21 | 2017-06-22 | Intel Corporation | Instructions and Logic for Lane-Based Strided Scatter Operations |
US20170177360A1 (en) * | 2015-12-21 | 2017-06-22 | Intel Corporation | Instructions and Logic for Load-Indices-and-Scatter Operations |
US20170177363A1 (en) * | 2015-12-22 | 2017-06-22 | Intel Corporation | Instructions and Logic for Load-Indices-and-Gather Operations |
US20170192783A1 (en) * | 2015-12-30 | 2017-07-06 | Elmoustapha Ould-Ahmed-Vall | Systems, Apparatuses, and Methods for Stride Load |
US20170192781A1 (en) * | 2015-12-30 | 2017-07-06 | Robert Valentine | Systems, Apparatuses, and Methods for Strided Loads |
US10289416B2 (en) * | 2015-12-30 | 2019-05-14 | Intel Corporation | Systems, apparatuses, and methods for lane-based strided gather |
US20170192782A1 (en) * | 2015-12-30 | 2017-07-06 | Robert Valentine | Systems, Apparatuses, and Methods for Aggregate Gather and Stride |
US10191744B2 (en) * | 2016-07-01 | 2019-01-29 | Intel Corporation | Apparatuses, methods, and systems for element sorting of vectors |
US10282204B2 (en) * | 2016-07-02 | 2019-05-07 | Intel Corporation | Systems, apparatuses, and methods for strided load |
WO2018158603A1 (en) * | 2017-02-28 | 2018-09-07 | Intel Corporation | Strideshift instruction for transposing bits inside vector register |
US10191740B2 (en) | 2017-02-28 | 2019-01-29 | Intel Corporation | Deinterleave strided data elements processors, methods, systems, and instructions |
US11086623B2 (en) * | 2017-03-20 | 2021-08-10 | Intel Corporation | Systems, methods, and apparatuses for tile matrix multiplication and accumulation |
EP3500945B1 (en) | 2017-05-17 | 2020-09-30 | Google LLC | Low latency matrix multiply unit |
US10014056B1 (en) * | 2017-05-18 | 2018-07-03 | Sandisk Technologies Llc | Changing storage parameters |
WO2019005169A1 (en) * | 2017-06-30 | 2019-01-03 | Intel Corporation | APPARATUS AND METHOD FOR MEMORY OPERATIONS READY FOR DATA |
WO2019009870A1 (en) | 2017-07-01 | 2019-01-10 | Intel Corporation | SAVE BACKGROUND TO VARIABLE BACKUP STATUS SIZE |
US10346163B2 (en) | 2017-11-01 | 2019-07-09 | Apple Inc. | Matrix computation engine |
US10922258B2 (en) * | 2017-12-22 | 2021-02-16 | Alibaba Group Holding Limited | Centralized-distributed mixed organization of shared memory for neural network processing |
US10970078B2 (en) * | 2018-04-05 | 2021-04-06 | Apple Inc. | Computation engine with upsize/interleave and downsize/deinterleave options |
US10642620B2 (en) | 2018-04-05 | 2020-05-05 | Apple Inc. | Computation engine with strided dot product |
US10649777B2 (en) * | 2018-05-14 | 2020-05-12 | International Business Machines Corporation | Hardware-based data prefetching based on loop-unrolled instructions |
US10846260B2 (en) * | 2018-07-05 | 2020-11-24 | Qualcomm Incorporated | Providing reconfigurable fusion of processing elements (PEs) in vector-processor-based devices |
US10754649B2 (en) | 2018-07-24 | 2020-08-25 | Apple Inc. | Computation engine that operates in matrix and vector modes |
WO2020036917A1 (en) * | 2018-08-14 | 2020-02-20 | Optimum Semiconductor Technologies Inc. | Vector instruction with precise interrupts and/or overwrites |
US10831488B1 (en) | 2018-08-20 | 2020-11-10 | Apple Inc. | Computation engine with extract instructions to minimize memory access |
GB2584268B (en) | 2018-12-31 | 2021-06-30 | Graphcore Ltd | Load-Store Instruction |
US11620153B2 (en) * | 2019-02-04 | 2023-04-04 | International Business Machines Corporation | Instruction interrupt suppression of overflow exception |
CN113626079A (zh) * | 2020-05-08 | 2021-11-09 | 安徽寒武纪信息科技有限公司 | 数据处理方法及装置以及相关产品 |
TW202215237A (zh) * | 2020-09-02 | 2022-04-16 | 美商賽發馥股份有限公司 | 向量運算記憶體保護 |
US20220413850A1 (en) * | 2021-06-28 | 2022-12-29 | Silicon Laboratories Inc. | Apparatus for Processor with Macro-Instruction and Associated Methods |
CN114546488B (zh) * | 2022-04-25 | 2022-07-29 | 超验信息科技(长沙)有限公司 | 一种向量跨步指令的实现方法、装置、设备及存储介质 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101978350A (zh) * | 2008-03-28 | 2011-02-16 | 英特尔公司 | 用于实现高效同步和并行归约操作的向量指令 |
Family Cites Families (18)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4745547A (en) * | 1985-06-17 | 1988-05-17 | International Business Machines Corp. | Vector processing |
US6016395A (en) * | 1996-10-18 | 2000-01-18 | Samsung Electronics Co., Ltd. | Programming a vector processor and parallel programming of an asymmetric dual multiprocessor comprised of a vector processor and a risc processor |
US5940876A (en) * | 1997-04-02 | 1999-08-17 | Advanced Micro Devices, Inc. | Stride instruction for fetching data separated by a stride amount |
JP3138659B2 (ja) * | 1997-05-07 | 2001-02-26 | 甲府日本電気株式会社 | ベクトル処理装置 |
US6539470B1 (en) * | 1999-11-16 | 2003-03-25 | Advanced Micro Devices, Inc. | Instruction decode unit producing instruction operand information in the order in which the operands are identified, and systems including same |
US6532533B1 (en) * | 1999-11-29 | 2003-03-11 | Texas Instruments Incorporated | Input/output system with mask register bit control of memory mapped access to individual input/output pins |
JP3733842B2 (ja) * | 2000-07-12 | 2006-01-11 | 日本電気株式会社 | ベクトルスキャタ命令制御回路及びベクトル型情報処理装置 |
US6807622B1 (en) * | 2000-08-09 | 2004-10-19 | Advanced Micro Devices, Inc. | Processor which overrides default operand size for implicit stack pointer references and near branches |
JP3961461B2 (ja) * | 2003-07-15 | 2007-08-22 | エヌイーシーコンピュータテクノ株式会社 | ベクトル処理装置、および、ベクトル処理方法 |
US7610466B2 (en) * | 2003-09-05 | 2009-10-27 | Freescale Semiconductor, Inc. | Data processing system using independent memory and register operand size specifiers and method thereof |
US7275148B2 (en) * | 2003-09-08 | 2007-09-25 | Freescale Semiconductor, Inc. | Data processing system using multiple addressing modes for SIMD operations and method thereof |
WO2005093562A1 (ja) * | 2004-03-29 | 2005-10-06 | Kyoto University | データ処理装置、データ処理プログラム、およびデータ処理プログラムを記録した記録媒体 |
US8211826B2 (en) * | 2007-07-12 | 2012-07-03 | Ncr Corporation | Two-sided thermal media |
US8667250B2 (en) * | 2007-12-26 | 2014-03-04 | Intel Corporation | Methods, apparatus, and instructions for converting vector data |
US9529592B2 (en) * | 2007-12-27 | 2016-12-27 | Intel Corporation | Vector mask memory access instructions to perform individual and sequential memory access operations if an exception occurs during a full width memory access operation |
US7984273B2 (en) * | 2007-12-31 | 2011-07-19 | Intel Corporation | System and method for using a mask register to track progress of gathering elements from memory |
US8447962B2 (en) * | 2009-12-22 | 2013-05-21 | Intel Corporation | Gathering and scattering multiple data elements |
US20120254591A1 (en) * | 2011-04-01 | 2012-10-04 | Hughes Christopher J | Systems, apparatuses, and methods for stride pattern gathering of data elements and stride pattern scattering of data elements |
-
2011
- 2011-04-01 US US13/078,891 patent/US20120254591A1/en not_active Abandoned
- 2011-12-06 WO PCT/US2011/063590 patent/WO2012134555A1/en active Application Filing
- 2011-12-06 JP JP2014502544A patent/JP5844882B2/ja not_active Expired - Fee Related
- 2011-12-06 DE DE112011105121.2T patent/DE112011105121T5/de not_active Withdrawn
- 2011-12-06 CN CN201180071342.7A patent/CN103562856B/zh not_active Expired - Fee Related
- 2011-12-06 KR KR1020137029087A patent/KR101607161B1/ko active IP Right Grant
- 2011-12-06 GB GB1316951.1A patent/GB2503169B/en active Active
- 2011-12-08 TW TW103144497A patent/TWI514273B/zh not_active IP Right Cessation
- 2011-12-08 TW TW100145352A patent/TWI476684B/zh not_active IP Right Cessation
-
2014
- 2014-07-25 US US14/341,643 patent/US20150052333A1/en not_active Abandoned
-
2015
- 2015-11-19 JP JP2015226505A patent/JP6274672B2/ja active Active
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101978350A (zh) * | 2008-03-28 | 2011-02-16 | 英特尔公司 | 用于实现高效同步和并行归约操作的向量指令 |
Also Published As
Publication number | Publication date |
---|---|
JP5844882B2 (ja) | 2016-01-20 |
US20120254591A1 (en) | 2012-10-04 |
JP2014513340A (ja) | 2014-05-29 |
WO2012134555A1 (en) | 2012-10-04 |
DE112011105121T5 (de) | 2014-01-09 |
CN103562856A (zh) | 2014-02-05 |
GB2503169A (en) | 2013-12-18 |
KR101607161B1 (ko) | 2016-03-29 |
GB2503169B (en) | 2020-09-30 |
US20150052333A1 (en) | 2015-02-19 |
TW201525856A (zh) | 2015-07-01 |
TWI514273B (zh) | 2015-12-21 |
JP2016040737A (ja) | 2016-03-24 |
GB201316951D0 (en) | 2013-11-06 |
JP6274672B2 (ja) | 2018-02-07 |
TWI476684B (zh) | 2015-03-11 |
KR20130137702A (ko) | 2013-12-17 |
TW201246065A (en) | 2012-11-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103562856B (zh) | 用于数据元素的跨步图案聚集及数据元素的跨步图案分散的系统、装置及方法 | |
CN104011647B (zh) | 浮点舍入处理器、方法、系统和指令 | |
CN104040484B (zh) | 浮点缩放处理器、方法、系统和指令 | |
CN103562855B (zh) | 用于将存储器源扩展到目的地寄存器并将源寄存器压缩到目的地存储器单元中的系统、装置和方法 | |
CN104011664B (zh) | 使用三个标量项的超级乘加(超级madd)指令 | |
CN104094218B (zh) | 用于执行写掩码寄存器到向量寄存器中的一系列索引值的转换的系统、装置和方法 | |
CN103562854B (zh) | 用于对齐寄存器的系统、装置和方法 | |
CN104081336B (zh) | 用于检测向量寄存器内的相同元素的装置和方法 | |
CN104011652B (zh) | 打包选择处理器、方法、系统和指令 | |
CN104011649B (zh) | 用于在simd/向量执行中传播有条件估算值的装置和方法 | |
CN104040482B (zh) | 用于在打包数据元素上执行增量解码的系统、装置和方法 | |
CN104350492B (zh) | 在大寄存器空间中利用累加的向量乘法 | |
CN104145245B (zh) | 浮点舍入量确定处理器、方法、系统和指令 | |
CN104335166B (zh) | 用于执行混洗和操作的装置和方法 | |
CN104011645B (zh) | 用于产生其中在连续位置中的整数相差恒定整数跨度且最小整数从零偏移整数偏移量的整数序列的处理器、方法、系统和含有指令的介质 | |
CN107003843A (zh) | 用于对向量元素集合执行约减操作的方法和设备 | |
CN107077321A (zh) | 用于执行融合的单个周期递增‑比较‑跳转的指令和逻辑 | |
CN104011665B (zh) | 超级乘加(超级madd)指令 | |
CN104137053B (zh) | 用于响应于单个指令来执行蝴蝶横向和交叉加法或减法的系统、装置和方法 | |
CN104781803A (zh) | 用于架构不同核的线程迁移支持 | |
CN104011671B (zh) | 用于执行置换操作的设备和方法 | |
CN107077329A (zh) | 用于通过无序硬件软件协同设计处理器中的栈同步指令来实现和维持判定值的栈的方法和设备 | |
CN104350461B (zh) | 具有不同的读和写掩码的多元素指令 | |
CN103718157B (zh) | 使用掩码寄存器跳转的系统、装置和方法 | |
CN104321740B (zh) | 利用操作数基础系统转换和再转换的向量乘法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20161116 Termination date: 20191206 |