CN104603746B - 由读和写掩码控制的向量移动指令 - Google Patents
由读和写掩码控制的向量移动指令 Download PDFInfo
- Publication number
- CN104603746B CN104603746B CN201380045550.9A CN201380045550A CN104603746B CN 104603746 B CN104603746 B CN 104603746B CN 201380045550 A CN201380045550 A CN 201380045550A CN 104603746 B CN104603746 B CN 104603746B
- Authority
- CN
- China
- Prior art keywords
- register
- data element
- mask
- place value
- vector
- 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.)
- Active
Links
- 239000013598 vector Substances 0.000 claims abstract description 156
- 230000004044 response Effects 0.000 claims abstract description 13
- 230000015654 memory Effects 0.000 claims description 62
- 238000012545 processing Methods 0.000 claims description 29
- 238000000034 method Methods 0.000 claims description 28
- 238000003860 storage Methods 0.000 claims description 20
- 238000004364 calculation method Methods 0.000 claims description 19
- 238000003672 processing method Methods 0.000 claims 1
- 238000010586 diagram Methods 0.000 description 23
- 210000004027 cell Anatomy 0.000 description 14
- 238000005516 engineering process Methods 0.000 description 10
- 238000004891 communication Methods 0.000 description 9
- 230000007246 mechanism Effects 0.000 description 8
- 238000006243 chemical reaction Methods 0.000 description 7
- 230000006870 function Effects 0.000 description 7
- 210000004940 nucleus Anatomy 0.000 description 6
- 239000003795 chemical substances by application Substances 0.000 description 5
- 238000013461 design Methods 0.000 description 5
- 238000004519 manufacturing process Methods 0.000 description 5
- 230000008569 process Effects 0.000 description 5
- 230000004087 circulation Effects 0.000 description 4
- 230000006835 compression Effects 0.000 description 4
- 238000007906 compression Methods 0.000 description 4
- 238000013500 data storage Methods 0.000 description 4
- 238000007667 floating Methods 0.000 description 4
- 230000003068 static effect Effects 0.000 description 4
- 230000005856 abnormality Effects 0.000 description 3
- 230000008859 change Effects 0.000 description 3
- 230000001360 synchronised effect Effects 0.000 description 3
- 238000013519 translation Methods 0.000 description 3
- 241001269238 Data Species 0.000 description 2
- 230000006399 behavior Effects 0.000 description 2
- 230000001186 cumulative effect Effects 0.000 description 2
- 238000009826 distribution Methods 0.000 description 2
- 235000013399 edible fruits Nutrition 0.000 description 2
- 239000007787 solid Substances 0.000 description 2
- 239000000758 substrate Substances 0.000 description 2
- 230000007704 transition Effects 0.000 description 2
- 101100285899 Saccharomyces cerevisiae (strain ATCC 204508 / S288c) SSE2 gene Proteins 0.000 description 1
- 238000009825 accumulation Methods 0.000 description 1
- 230000009471 action Effects 0.000 description 1
- 230000015572 biosynthetic process Effects 0.000 description 1
- 238000004590 computer program Methods 0.000 description 1
- 230000008878 coupling Effects 0.000 description 1
- 238000010168 coupling process Methods 0.000 description 1
- 238000005859 coupling reaction Methods 0.000 description 1
- 238000006073 displacement reaction Methods 0.000 description 1
- 230000014509 gene expression Effects 0.000 description 1
- 230000014759 maintenance of location Effects 0.000 description 1
- 238000013507 mapping Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 229910052754 neon Inorganic materials 0.000 description 1
- GKAOGPIIYCISHV-UHFFFAOYSA-N neon atom Chemical compound [Ne] GKAOGPIIYCISHV-UHFFFAOYSA-N 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 238000013442 quality metrics Methods 0.000 description 1
- 230000008707 rearrangement Effects 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 241000894007 species Species 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
- 230000008719 thickening Effects 0.000 description 1
- 230000001052 transient effect Effects 0.000 description 1
- 239000002699 waste material Substances 0.000 description 1
- XLYOFNOQVPJJNP-UHFFFAOYSA-N water Substances O XLYOFNOQVPJJNP-UHFFFAOYSA-N 0.000 description 1
Classifications
-
- 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
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/76—Architectures of general purpose stored program computers
- G06F15/80—Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors
- G06F15/8053—Vector processors
- G06F15/8076—Details on data register access
- G06F15/8084—Special arrangements thereof, e.g. mask or switch
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3885—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Hardware Design (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Computing Systems (AREA)
- Complex Calculations (AREA)
- Advance Control (AREA)
- Executing Machine-Instructions (AREA)
Abstract
处理器执行向量移动指令以在第一掩码寄存器和第二掩码寄存器的控制下将数据元素从第二向量寄存器移动到第一向量寄存器。处理器内的寄存器组包括第一向量寄存器、第二向量寄存器、第一掩码寄存器和第二掩码寄存器。响应于向量移动指令,处理器中的执行电路用第二向量寄存器中给定数量的源数据元素替换第一向量寄存器中给定数量的目标数据元素。每个源数据元素对应于第二掩码寄存器中具有第二位值的掩码位,并且其中每个目标数据元素对应于第一掩码寄存器中具有第一位值的掩码位。
Description
技术领域
本公开涉及处理逻辑、微处理器以及相关联的指令集架构的领域,该指令集架构在被处理器或其他处理逻辑所执行时运行逻辑、数学或其他功能性操作。
背景技术
指令集或指令集架构(ISA)是计算机架构中与编程有关的部分,并且可包括原生数据类型、指令、寄存器架构、寻址模式、存储器架构、中断和异常处理、以及外部输入和输出(I/O)。术语指令在本申请中一般表示宏指令——宏指令是被提供给处理器(或指令转换器,该指令转换器(例如利用静态二进制转换、包括动态编译的动态二进制转换)转换、变形、仿真或以其他方式将指令转换成将由处理器处理的一个或多个其他指令)以供执行的指令——作为对比,微指令或微操作(微ops)是处理器的解码器解码宏指令的结果。
ISA与微架构不同,微架构是实现该指令集的处理器的内部设计。具有不同微架构的处理器可共享共同的指令集。例如,酷睿(CoreTM)处理器、以及来自加利福尼亚州桑尼威尔(Sunnyvale)的超微半导体有限公司(Advanced Micro Devices,Inc.)的诸多处理器执行几乎相同版本的x86指令集(在更新的版本中加入了一些扩展),但具有不同的内部设计。例如,可利用公知技术(包括专用物理寄存器、利用寄存器重命名机制的一个或多个动态分配的物理寄存器)在不同微架构中以不同方式实现该ISA的同一寄存器架构。
许多现代ISA支持单指令多数据(SIMD)操作。取代仅对一个或两个数据元素进行操作的标量指令,向量指令(也称为紧缩数据指令或SIMD指令)可同时或并行地对多个数据元素或多对数据元素进行操作。处理器可具有并行的执行硬件,以响应于该向量指令同时或并行地执行多个操作。SIMD操作在一个操作中对紧缩在一个向量寄存器或存储器位置之内的多个数据元素进行操作。这些数据元素被称为紧缩数据或向量数据。向量元素中的每一个可表示独立的单条数据(例如像素的颜色,等等),可单独或与其它数据无关地操作该单条数据。
在一些情况下,SIMD操作可以以递归方式对独立向量数据元素进行操作,其中对于不同数据元素,迭代的数量不同。因此,一些数据元素的计算可能完成,而一些其它数据元素仍需要更多迭代。递归计算的一个示例是WHILE循环操作。在本示例中,在条件(X[i])为真(满足)时,对N元素的数组X[i](i=0,...,N-l)进行递归计算。当条件(X[i])变为假时,X[i]的计算停止。该条件的示例可以是X[i]>0。
for(i=0;i<N;i++){
while(条件(X[i])){
X[i]=计算(X[i]);}}
如果对于X[i]的不同数据元素,WHILE循环迭代的数量不同,则以上计算无法被轻易向量化。一种可能的方法是用处理器在不满足条件的那些元素上执行计算,然后丢弃从这些元素导出的结果。然而,该方法具有低效率,因为处理器不仅在这些元素上执行不必要的计算,而且还无法利用由这些元素占据的向量寄存器槽口。
附图说明
在附图中的诸个图中通过示例而非限制地示出各个实施例:
图1是根据一个实施例的包括向量寄存器和掩码寄存器的指令处理装置的框图。
图2是根据一个实施例的寄存器架构的框图。
图3示出根据一个实施例的向量操作序列的示例。
图4A示出根据一个实施例的使处理器在向量寄存器和掩码寄存器上执行操作的指令的伪代码示例。
图4B示出根据一个实施例的使用图4A的指令的代码段示例。
图5A是根据一个实施例的示出响应于使用掩码更新指令和向量移动指令的代码段而执行的操作的流程图。
图5B是示出根据一个实施例的响应于掩码更新指令而执行的操作的流程图。
图5C是示出根据一个实施例的响应于向量移动指令而执行的操作的流程图。
图6是示出根据一个实施例的使用软件指令转换器将源指令集中的二进制指令转换成目标指令集中的二进制指令的框图。
图7A是根据一个实施例的有序和无序流水线的框图。
图7B是根据一个实施例的有序和无序核的框图。
图8A-B是根据一个实施例的更具体的示例性有序核架构的框图。
图9是根据一个实施例的处理器的框图。
图10是根据一个实施例的系统的框图。
图11是根据一个实施例的第二系统的框图。
图12是根据本发明的实施例的第三系统的框图。
图13是根据一个实施例的芯片上系统(SoC)的框图。
具体实施方式
在以下描述中,陈述了多个具体细节。然而,应当理解的是,可不通过这些具体细节来实施本发明的实施例。在其它实例中,未详细示出公知的电路、结构以及技术,以免模糊对本描述的理解。
本文所述的实施例提供用于提高独立数据元素上的递归向量计算的效率的指令。这些指令利用一对向量寄存器和一对掩码寄存器来执行递归向量计算,其中第一向量寄存器充当用于累加向量计算结果的累加器,并且第二向量寄存器提供新的数据元素以填充第一向量寄存器的未利用槽口(未使用或已完成的数据元素位置)。掩码寄存器用于指示相应向量寄存器中的哪些数据元素需要进一步的计算。
在一个实施例中,第一向量寄存器(即累加器)累加输入数据元素,直到寄存器被完整向量填满。然后,处理器使用非掩码(即,密集)向量操作在这些数据元素上执行计算。在计算之后,累加器中的一些元素(对于这些元素,完成了计算)可以被发送回储存器或其它存储位置,而其它元素(对于这些元素,未完成计算)可以被保持在累加器中用于附加数量的迭代。累加器中已完成计算的数据元素位置可以由还需要相同递归计算的新数据元素所利用。
本文描述两个指令RWMASKUPDATE和SPARSEMOV。这些指令在许多情况下提高向量化的效率。例如,在一种情况下,输入数据元素可能来自一个或多个稀疏向量数据集,每个稀疏向量数据集不具有足以填满整个累加器(即,第一向量寄存器)的元素。此外,来自不同数据集的输入数据元素在计算中可能需要不同数量的迭代。因此,由于无需更多计算的那些数据元素,在累加器中剩余未利用的槽口。本文所述的指令允许这些未利用的槽口被有用的元素填充,从而实现在完整向量上的递归计算。如在以下进一步细节中所述的,SPARSEMOV指令是将有用的数据元素(即需要计算的数据元素)从第二向量寄存器移动到累加器中的向量移动指令。RWMASKUPDATE指令更新读掩码寄存器(与第二向量寄存器相关联)和写掩码寄存器(与累加器相关联)以标识在这两个向量寄存器中的有用数据元素的位置。
与SPARSEMOV相结合地使用RWMASKUPDATE可以降低递归计算中所需指令的总数,并且简化上溢和下溢情形,在上溢和下溢情形中第二向量寄存器中有用数据元素(即,源数据元素)的数量不与第一向量寄存器中未利用槽口(即,目标位置)的数量相匹配。经更新的读和写掩码用于控制两个向量寄存器之间的数据移动;具体而言,写掩码位0用于标识累加器中的目标位置;并且读掩码位1用于标识第二向量寄存器中的源数据元素。使用反转的写掩码位来标识目标位置简化稀疏和递归计算的向量化中的数据累加。
图1是指令处理装置115的实施例的框图,该指令处理装置具有执行单元140,该执行单元包括可操作用于执行指令(包括RWMASKUPDATE和SPARSEMOV指令)的电路。在一些实施例中,指令处理装置115可以是处理器、多核处理器的处理器核、或者电子系统中的处理元件。
解码器130接收高级机器指令或宏指令形式的传入指令,并且解码所述指令以生成低级微操作、微代码进入点、微指令或其他低级指令或控制信号,它们反映了原始的高级指令和/或从原始的高级指令导出。低级指令或控制信号可通过低级(例如,电路级或硬件级)操作来实现高级指令的操作。可使用各种不同的机制来实现解码器130。合适机制的示例包括但不限于,微代码、查找表、硬件实现、可编程逻辑阵列(PLA)、用于实现本领域已知的解码器的其他机制等。
解码器130可接收针对高速缓存110、存储器120或其他源的传入指令。经解码的指令被发送到执行单元140。执行单元140可从解码器130接收一个或多个微操作、微代码进入点、微指令、其它指令或其它控制信号,它们反映了所接收的指令或者是从所接收的指令导出的。执行单元140从寄存器组170、高速缓存110和/或存储器120接收数据输入并向它们生成数据输出。
在一个实施例中,寄存器组170包括架构寄存器,架构寄存器也被称为寄存器。短语架构寄存器、寄存器组、以及寄存器在本文中用于表示对软件和/或编程器可见(例如,软件可见的)和/或由宏指令指定来标识操作数的寄存器,除非另外予以规定或清楚明显可知。这些寄存器不同于给定微架构中的其他非架构式寄存器(例如,临时寄存器、重排序缓冲器、引退寄存器等)。
为了避免混淆描述,已示出和描述了相对简单的指令处理装置115。应当理解,其他实施例可具有超过一个执行单元。例如,装置115可包括多个不同类型的执行单元,诸如例如算术单元、算术逻辑单元(ALU)、整数单元、浮点单元等。指令处理装置或处理器的再其他实施例可具有多个核、逻辑处理器或执行引擎。稍后将参考图7-13提供指令处理装置115的多个实施例。
根据一个实施例,寄存器组170包括一组向量寄存器175和一组掩码寄存器185,两者存储RWMASKUPDATE和SPARSEMOV指令的操作数。每个向量寄存器175可以是512位、256位、或128位宽,或者可以使用不同的向量宽度。每个掩码寄存器185包含多个掩码位,每个掩码位对应于向量寄存器175之一的一个数据元素。由于每个掩码位用于掩码向量寄存器的数据元素,64位掩码寄存器可以用于掩码512位寄存器的六十四个8位数据元素。对于具有不同宽度(例如256位或128位)的向量寄存器和不同尺寸(例如16位、32位或64位)数据元素,可以结合向量操作,使用不同数量的掩码位。
图2示出了支持本文描述的指令的底层寄存器架构200的实施例。寄存器架构200基于酷睿(CoreTM)处理器,该处理器实现包括x86、MMXTM、流SIMD扩展(SSE)、SSE2、SSE3、SSE4.1和SSE4.2指令的指令集,以及SIMD扩展的附加集,该附加集被称为高级向量扩展(AVX)(AVX1、和AVX2)。然而,应理解,也可使用支持不同寄存器长度、不同寄存器类型和/或不同数量的寄存器的不同的寄存器架构。
在所示的实施例中,存在512位宽的32个向量寄存器210;这些寄存器被称为zmm0至zmm31。低位16个zmm寄存器的低阶256位覆盖在寄存器ymm0-16上。低位16个zmm寄存器的低阶128位(ymm寄存器的低阶128位)覆盖在寄存器xmm0-15上。在所示实施例中,存在8个掩码寄存器220(k0到k7),每个掩码寄存器的长度为64位。在一替代实施例中,掩码寄存器220的宽度是16位。
在所示实施例中,寄存器架构200进一步包括16个64位通用(GP)寄存器230。在一实施例中,上述通用寄存器沿循现有x86寻址模式被使用以对存储器操作数寻址。该实施例还示出RFLAGS寄存器260、RIP寄存器270和MXCSR寄存器280。
该实施例还示出了标量浮点(FP)堆栈寄存器组(x87堆栈)240,在其上面重叠了MMX紧缩整数平坦寄存器组250。在所示出的实施例中,x87堆栈是用于使用x87指令集扩展来对32/64/80位浮点数据执行标量浮点运算的八元素堆栈;而MMX寄存器用于对64位紧缩整数数据执行操作,以及为在MMX和xmm寄存器之间执行的一些操作保存操作数。
本发明的替代实施例可以使用较宽的或较窄的寄存器。另外,本发明的替代实施例可以使用更多、更少或不同的寄存器组和寄存器。
图3是示出由处理器(例如,指令处理装置115)执行以有效地向量化独立数据元素上的计算的操作示例的示图。为了简化说明,该示例中的每个向量寄存器被示为仅具有八个数据元素。替代实施例可以在向量寄存器中具有不同数量的数据元素。向量寄存器可以是128位、256位、或512位宽(例如,图2的xmm、ymm或zmm寄存器),或者可以使用不同宽度。由于每个向量寄存器中有八个数据元素,结合每个向量寄存器,仅使用八个掩码位。
在该示例中,向量寄存器V1用作累加器,并且向量寄存器V2用于向V1提供新的数据元素。掩码寄存器K1(写掩码)和K2(读掩码)分别用于掩码V1和V2中的数据元素。在该示例中,掩码位0指示从计算中掩码相应的数据元素(即,进一步的计算是不必要的),并且掩码位1指示相应数据元素需要进一步的计算。在替代实施例中,掩码位值的意义可以颠倒;例如,掩码位1可以用于指示相应数据元素不需要进一步的计算,并且掩码位0可以用于指示相应数据元素需要进一步的计算。
最初,假定累加器V1存储两组数据作为输入向量:A和B,每一个向量可以是稀疏数组的一部分。Aj和Bj的下标j指示数据元素所经过的迭代数量;例如,A0是任何迭代之前的元素A,且A1是第一次迭代310之后的元素A。为了简化说明,来自相同迭代中相同数据集的不同数据元素被示为具有相同的标识符;例如,输入向量的位置0处的A0和位置2处的A0是两个不同元素并可以具有相同或不同的值,并且输入向量的位置1处的B0和位置3处的B0是两个不同元素并可以具有相同或不同的值。掩码寄存器K1中掩码位的初始值为全1,指示V1中的初始输入向量是完整向量并且V1的每个元素都可以参与向量计算的第一次迭代310。
在该示例中,每个迭代表示执行递归向量计算的WHILE循环的迭代。在第一次迭代310之后,累加器V1包括一组A1和B1,其中下标指示这些元素已经完成第一次迭代。假定A元素仅需要一次WHILE循环的迭代,并且B元素需要两次迭代。因此,在一次WHILE循环的迭代之后,A元素的计算完成,而B元素需要再一次迭代。此时,对于每个A元素的条件为假(因为它们不满足进一步计算的条件),并且对于每个B元素的条件为真(因为它们满足进一步计算的条件)。因此,对于与A1对应的那些掩码位,K1中的掩码位值被设置为0,而对于与B1对应的那些掩码位,K1中的掩码位值被设置为1。
在一个实施例中,掩码位0指示相应元素位置中的结果会在整个向量寄存器(在本情形中,V1)上的向量操作之后被丢弃。在替代实施例中,掩码位0指示不会进行相应元素位置的计算,并因此,该元素位置未被利用。在任一情况下,将A1保持在累加器V1中是向量资源的浪费,并且会降低向量计算的效率。因此,根据本发明的一个实施例,第二向量寄存器V2用于向V1提供新的数据元素以填充因为A1剩余的未利用槽口(即,数据元素位置)。数据元素A1可被保存到储存器、高速缓存或其它数据储存器中。
在图3的示例中,向量寄存器V2存储数据集C的元素,数据集C可以是另一稀疏向量数组的一部分。V2中由“*”标记的位置表示“不关心”,这意味着它们并未包含针对递归向量计算目的的有用数据元素。假定C的每个数据元素需要通过三次WHILE循环的迭代。作为C的元素的替代或者除其之外,V2可以提供需要通过一次或多次WHILE循环迭代(以及因此的进一步计算)的新数据元素A和/或B(例如A0、B0和/或B1)。V2中需要进一步计算的这些数据元素被称为“源数据元素”。V2中的这些源数据元素可以填充V1中因为A1剩余的未利用槽口(被称为“目标数据元素”)。为了描述简便,V1和/或V2中需要进一步计算的数据元素可被称为“有用数据元素”。因此,执行合并操作320以合并V1和V2中的有用数据元素,使得V2中的源数据元素被移动到V1中由目标数据元素占据的位置,并且递归计算可以前进到使用V1中附加的有用数据元素的第二次迭代330。
在这种合并操作中可能发生三种情况:上溢、下溢和精确匹配。
精确匹配指示在V2中存在与V1中剩余的未利用槽口数量相同的有用数据元素。因此,在精确匹配中,将V2中所有源数据元素移动到(即,替换)V1中剩余的未利用槽口中。结果,V1具有完整向量以开始下一次迭代,并且K1被更新为包含全1。在V2中没有剩余其它源数据元素,并且K2被更新为包含全0。
合并操作320示出上溢情况,其中新数据元素(C0)的数量大于K1中零值掩码位的数量(即A1的数量)。因此,并非V2中所有新数据元素都可以移动到V1中。在该示例中,V2的位置7处所圈出的C0被剩余在V2中,而位置2、4和6处的其它C0被移动到V1中。在该实施例中,V2的低阶元素被移动到V1中;在替代实施例中,V2的高阶元素被移动到V1中。合并操作320还更新K1和K2中的相应掩码位。
在合并操作320之后,V1包含完整的八元素向量以开始第二次迭代330,并且V2仅具有在位置7处剩余的一个C0。此时(在合并操作320之后),相应掩码寄存器K1包含全1,并且K2仅包含在位置7处具有值1的一个掩码位。
在第二次迭代330之后,累加器V1包含B2和C1的组合。由于B元素的计算在该迭代之后完成,这些B2可以被存储到存储器、高速缓存或其它数据储存器中。因此,对于每个B元素的条件为假(因为它们不满足进一步计算的条件),并且对于每个C元素的条件为真(因为它们满足进一步计算的条件)。因此,对于与B2对应的那些掩码位,K1中的掩码位值被设置为0,而对于与C1对应的那些掩码位,K1中的掩码位值被设置为1。
由B2剩余的未利用槽口可以由V2中遗留的源数据元素填充;在该情形下,是V2的位置7处的C0。然而,由于存在比B2数量少的C0,在随后的合并操作340中发生下溢。在如图3所示的下溢情况下,V1中的低阶B2被C0替换;在替代实施例中,V1中的高阶B2可以被C0替换。合并操作340还更新K1和K2中的相应掩码位。
在合并操作340之后,累加器V1未被完全填充,并且V2没有可以移动到V1中的任何其它有用的数据元素。此时(在合并操作340之后),掩码寄存器K1在与C元素对应的位置处包含1,并且K2包含全0。V2可以加载要移动到V1中的附加的有用数据元素,并且合并操作320和/或340可以重复,直到所有的有用数据元素被处理并且V2中没有剩余其它源数据元素。此时,V1可以通过多个附加迭代,直到V1中的所有元素达到所要求数量的迭代。
应该理解,掩码位值0和1的意义可以与图3示例所示的意义相反;例如,掩码位值0可以用于表示条件被满足,而掩码位值1可以用于表示条件未被满足。在一些实施例中,K1掩码位值的意义可以与K2掩码位值的意义相反;例如,K1掩码位值1可以用于表示条件未被满足,而K2掩码位值1可以用于表示条件被满足。
因此,对于相同的情况,在图3的示例中可以使用不同的掩码位值,只要每个掩码寄存器中每个掩码位的意义被一致地定义以允许一致的解释。
根据本发明的一个实施例,响应于包括RWMASKUPDATE和SPARSEMOV指令的向量指令,结合图3所描述的操作由处理器(例如指令处理装置115)执行。SPARSEMOV指令可以用于将源数据元素从向量寄存器V2移动到向量寄存器V1中,替换V1中不满足条件的目标元素(例如,不需要更多计算的元素)。RWMASKUPDATE指令可以用于更新掩码寄存器K1和K2以由此分别标识V1和V2中满足条件的数据元素(例如,需要更多计算的元素)的位置。在一个实施例中,RWMASKUPDATE具有两个操作数K1和K2,并且SPARSEMOV具有四个操作数K1、V1、K2和V2。在替代实施例中,RWMASKUPDATE和/或SPARSEMOV的操作数中的一些可以是隐含的。
图4A示出根据一个实施例的RWMASKUPDATE和SPARSEMOV指令的伪代码401和402的示例。在伪代码401和402中,KL表示向量长度,向量长度是每个向量寄存器(例如,V1和V2中的每一个)中总的数据元素数量。如果zmm寄存器用作具有8位数据元素的累加器,则KL=512/8=64。伪代码401描述RWMASKUPDATE指令,而伪代码402描述SPARSEMOV指令。应该注意,处理器可以使用与伪代码401和402所示出的不同的操作或逻辑来实现RWMASKUPDATE和SPARSEMOV指令。
RWMASKUPDATE和SPARSEMOV指令分别更新掩码寄存器和在向量寄存器之间移动数据元素。可以执行附加指令以利用这些指令的结果来更高效地执行递归向量计算。图4B示出根据一个实施例的使用RWMASKUPDATE和SPARSEMOV指令的代码段400的示例。当由处理器执行时,代码段400使处理器在数组X的独立数据元素上执行递归向量计算。数组X可以存储在存储器、高速缓存或其它数据存储位置中。代码段400包括初始化部分410、初始合并部分420、后续合并部分430、计算部分440和余数部分450。以下参照图5A的流程图描述在部分410-450的每一个中的操作,图5A示出由处理器(例如图1的指令处理装置115)执行的方法500的实施例。
在初始化部分410,掩码寄存器K1和K2都被初始化为0,指示在其相应的向量寄存器V1和V2中没有有用数据元素。术语“有用数据元素”表示需要计算的数据元素。在初始合并部分420开始迭代,其中首先检查K2以确定V2中是否剩余任何有用数据元素(框531)。如果V2中不存在有用数据,从数组X将输入数据元素加载到V2中(框532),并且相应地设置K2中的其相应掩码位。
后续合并部分430应对其中V2包含有用数据元素的情况。有用数据元素可能由于先前上溢而剩余在V2中,或者可以在框532被加载到V2中。响应于SPARSEMOV指令431,根据K1和K2中的掩码位,V2中的这些有用数据元素可被移动到V1中(框533)。
响应于RWMASKUPDATE指令433,在框533中的移动之后,更新掩码寄存器K1和K2以分别标识V1和V2中有用数据元素的当前位置(框534)。
在后续合并部分430,执行第二SPARSEMOV指令432以存储数组X中从V2移动到V1的数据元素的索引(位置),使得计算结果被存储回数组X中其原始位置。
计算部分440应对完整向量的向量计算(如相应掩码为全1所指示的;即,当IsFullMask(Kl)为真时)。如果V1不具有完整的有用数据元素向量(框535)并且存在未被加载到V1中的输入数据元素(框538),这指示附加的输入数据元素可以通过V2被加载到V1中(框532-534)。如果,V1不具有完整向量并且没有其它输入数据元素要加载到V1中(框538),这指示操作前进到余数部分450,其中计算V1中的剩余数据元素直到计算完成并将结果存储回数组X(框539)。
如果V1具有完整的有用数据元素向量(框535),可以对V1执行向量计算(框536)。如果V1中的任何数据元素不需要更多计算,则更新掩码寄存器K1。继续向量计算直到V1中的一个或多个数据元素不需要更多计算(如K1中相应的零值掩码位所指示的);此时,将这些数据元素存储回数组X(框537)。在所示实施例中,可以使用SCATTER指令存储数据元素,并且可以使用函数knot(Kl)来标识K1中的零值掩码位。除了RWMASKUPDATE和SPARSEMOV指令之外,可以由替代指令序列仿真在代码段400中使用的具体指令和函数,诸如SCATTER、knot、IsFullMask等等。
重复框531-537的操作直到没有更多的输入数据元素要通过V2被加载到V1中(框538);即,当数组X中的所有输入数据元素被加载到V2中并且V2中的所有有用数据元素被移动到V1中时。余数部分450在此时开始。此时,V1可能不具有完整的有用数据元素向量,但是V1中的那些数据元素需要进一步计算。继续向量计算直到V1中的所有剩余数据元素达到所需数量的迭代(框539)。此时,可以将V1中的计算结果存储回数组X中(例如,使用SCATTER指令)(框539)。
图5B是根据一个实施例的用于执行RWMASKUPDATE指令的方法510的流程框图。方法510以处理器(例如,图1的指令处理装置115)接收指定第一掩码寄存器和第二掩码寄存器的掩码更新指令开始(框511)。处理器解码掩码更新指令(框512)。响应于经解码的掩码更新指令,处理器执行操作,包括:反转第一掩码寄存器中给定数量的掩码位;例如,通过将这些掩码位从第一位值(例如0)设置为第二位值(例如1)(框513);以及反转第二掩码寄存器中给定数量的掩码位;例如,通过将这些掩码位从第二位值(例如1)设置成第一位值(例如0)(框514)。给定数量是第一掩码寄存器中具有第一位值的掩码位数量和第二掩码寄存器中具有第二位值的掩码位数量中较小的一个。在替代实施例中,第一位值可以是1并且第二位值可以是0。
图5C是根据一个实施例的用于执行SPARSEMOV指令的方法520的流程框图。方法520以处理器(例如,图1的指令处理装置115)接收指定第一掩码寄存器、第二掩码寄存器、第一向量寄存器和第二向量寄存器的向量移动指令开始(框521)。处理器解码向量移动操作(框522)。响应于经解码的向量移动指令并且基于第一和第二掩码寄存器中的掩码位值,处理器用第二向量寄存器中给定数量的源数据元素替换第一向量寄存器中给定数量的目标数据元素(框523)。在一个实施例中,每个源数据元素对应于第二掩码寄存器中具有第二位值(例如1)的掩码位,并且其中每个目标数据元素对应于第一掩码寄存器中具有第一位值(例如0)的掩码位。在替代实施例中,第一位值可以是1并且第二位值可以是0。给定数量是第一掩码寄存器中具有第一位值的掩码位数量和第二掩码寄存器中具有第二位值的掩码位数量中较小的一个。
在各实施例中,图5A-C的方法可由通用处理器、专用处理器(例如,图形处理器或数字信号处理器)、或另一种类型的数字逻辑设备或指令处理装置执行。在一些实施例中,图5A-C的方法可由图1的指令处理装置115、或类似的处理器、装置或系统(诸如图7-13中所示的实施例)执行。而且,图1的指令处理装置115以及图7-13中所示的处理器、装置或系统可执行与图5A-C的方法的实施例相同、类似或不同的操作和方法的实施例。
在一些实施例中,图1的指令处理装置115可结合指令转换器操作,该指令转换器将来自源指令集的指令转换到目标指令集。例如,指令转换器可以变换(例如使用静态二进制变换、包括动态编译的动态二进制变换)、变形、仿真或以其它方式将指令转换成将由核来处理的一个或多个其它指令。指令转换器可以用软件、硬件、固件、或其组合实现。指令转换器可以在处理器上、在处理器外、或者部分在处理器上且部分在处理器外。
图6是对比根据本发明的实施例的软件指令转换器的使用的框图。在所示的实施例中,指令转换器是软件指令转换器,但作为替代,该指令转换器可以用软件、固件、硬件或其各种组合来实现。图6示出可以使用x86编译器604来编译利用高级语言602的程序,以生成可以由具有至少一个x86指令集核的处理器616原生执行的x86二进制代码606。具有至少一个x86指令集核的处理器616表示任何处理器,这些处理器能通过兼容地执行或以其它方式处理以下内容来执行与具有至少一个x86指令集核的英特尔处理器基本相同的功能:1)英特尔x86指令集核的指令集的本质部分,或2)目标为在具有至少一个x86指令集核的英特尔处理器上运行的应用或其它程序的目标代码版本,以便取得与具有至少一个x86指令集核的英特尔处理器基本相同的结果。x86编译器604表示用于生成x86二进制代码606(例如,目标代码)的编译器,该二进制代码可通过或不通过附加的链接处理在具有至少一个x86指令集核的处理器616上执行。类似地,图6示出可以使用替代的指令集编译器608来编译利用高级语言602的程序,以生成可以由不具有至少一个x86指令集核的处理器614(例如具有执行加利福尼亚州桑尼维尔市的MIPS技术公司的MIPS指令集、和/或执行加利福尼亚州桑尼维尔市的ARM控股公司的ARM指令集的核的处理器)原生执行的替代指令集二进制代码610。指令转换器612被用来将x86二进制代码606转换成可以由不具有x86指令集核的处理器614原生执行的代码。该转换后的代码不大可能与替代性指令集二进制代码610相同,因为能够这样做的指令转换器难以制造;然而,转换后的代码将完成一般操作并由来自替代指令集的指令构成。因此,指令转换器612通过仿真、模拟或任何其它过程来表示允许不具有x86指令集处理器或核的处理器或其它电子设备执行x86二进制代码606的软件、固件、硬件或其组合。
示例性核架构
有序和无序核框图
图7A是示出根据本发明的各实施例的示例性有序流水线和示例性的寄存器重命名的无序发布/执行流水线的框图。图7B是示出根据本发明的各实施例的要包括在处理器中的有序架构核的示例性实施例和示例性的寄存器重命名的无序发布/执行架构核的框图。图7A和7B中的实线框示出了有序流水线和有序核,而可选增加的虚线框示出了寄存器重命名的、无序发布/执行流水线和核。给定有序方面是无序方面的子集的情况下,将描述无序方面。
在图7A中,处理器流水线700包括取出级702、长度解码级704、解码级706、分配级708、重命名级710、调度(也称为分派或发布)级712、寄存器读取/存储器读取级714、执行级716、写回/存储器写入级718、异常处理级722和提交级724。
图7B示出了包括耦合到执行引擎单元750的前端单元730的处理器核790,且执行引擎单元和前端单元两者都耦合到存储器单元770。核790可以是精简指令集计算(RISC)核、复杂指令集计算(CISC)核、超长指令字(VLIW)核或混合或替代核类型。作为又一选项,核790可以是专用核,诸如例如网络或通信核、压缩引擎、协处理器核、通用计算图形处理器单元(GPGPU)核、或图形核等等。
前端单元730包括耦合到指令高速缓存单元734的分支预测单元732,该指令高速缓存单元耦合到指令转换后备缓冲器(TLB)736,该指令转换后备缓冲器耦合到指令取出单元738,指令取出单元耦合到解码单元740。解码单元740(或解码器)可解码指令,并生成从原始指令解码出的、或以其它方式反映原始指令的、或从原始指令导出的一个或多个微操作、微代码进入点、微指令、其它指令、或其它控制信号作为输出。解码单元740可使用各种不同的机制来实现。合适的机制的示例包括但不限于查找表、硬件实现、可编程逻辑阵列(PLA)、微代码只读存储器(ROM)等。在一个实施例中,核790包括(例如,在解码单元740中或否则在前端单元730内的)用于存储某些宏指令的微代码的微代码ROM或其它介质。解码单元740耦合至执行引擎单元750中的重命名/分配器单元752。
执行引擎单元750包括重命名/分配器单元752,该重命名/分配器单元耦合至引退单元754和一个或多个调度器单元756的集合。调度器单元756表示任何数目的不同调度器,包括预留站、中央指令窗等。调度器单元756耦合到物理寄存器组单元758。每个物理寄存器组单元758表示一个或多个物理寄存器组,其中不同的物理寄存器组存储一种或多种不同的数据类型,诸如标量整数、标量浮点、紧缩整数、紧缩浮点、向量整数、向量浮点、状态(例如,作为要执行的下一指令的地址的指令指针)等。在一个实施例中,物理寄存器组单元758包括向量寄存器单元、写掩码寄存器单元和标量寄存器单元。这些寄存器单元可以提供架构向量寄存器、向量掩码寄存器、和通用寄存器。物理寄存器组单元758与引退单元754重叠以示出可以用来实现寄存器重命名和无序执行的各种方式(例如,使用重新排序缓冲器和引退寄存器组;使用将来的文件、历史缓冲器和引退寄存器组;使用寄存器映射和寄存器池等等)。引退单元754和物理寄存器组单元758耦合到执行群集760。执行群集760包括一个或多个执行单元762的集合和一个或多个存储器访问单元764的集合。执行单元762可以对各种类型的数据(例如,标量浮点、紧缩整数、紧缩浮点、向量整型、向量浮点)执行各种操作(例如,移位、加法、减法、乘法)。尽管一些实施例可以包括专用于特定功能或功能集合的多个执行单元,但其它实施例可包括全部执行所有功能的仅一个执行单元或多个执行单元。调度器单元756、物理寄存器组单元758、执行群集760被示出为可能是复数个,因为某些实施例为某些数据/操作类型创建了诸个单独流水线(例如,均具有各自调度器单元、物理寄存器组单元和/或执行群集的标量整数流水线、标量浮点/紧缩整数/紧缩浮点/向量整数/向量浮点流水线、和/或存储器访问流水线,以及在单独的存储器访问流水线的情况下特定实施例被实现为仅仅该流水线的执行群集具有存储器访问单元764)。还应当理解,在使用分开的流水线的情况下,这些流水线中的一个或多个可以为无序发布/执行,并且其余流水线可以为有序发布/执行。
存储器访问单元764的集合耦合到存储器单元770,该存储器单元包括耦合到数据高速缓存单元774的数据TLB单元772,其中数据高速缓存单元耦合到二级(L2)高速缓存单元776。在一个示例性实施例中,存储器访问单元764可包括加载单元、存储地址单元和存储数据单元,其中的每一个均耦合至存储器单元770中的数据TLB单元772。指令高速缓存单元734还耦合到存储器单元770中的第二级(L2)高速缓存单元776。L2高速缓存单元776耦合到一个或多个其它级的高速缓存,并最终耦合到主存储器。
作为示例,示例性寄存器重命名的、无序发布/执行核架构可以如下实现流水线700:1)指令取出738执行取出和长度解码级702和704;2)解码单元740执行解码级706;3)重命名/分配器单元752执行分配级708和重命名级710;4)调度器单元756执行调度级712;5)物理寄存器组单元758和存储器单元770执行寄存器读取/存储器读取级714;执行群集760执行执行级716;6)存储器单元770和物理寄存器组单元758执行写回/存储器写入级718;7)各单元可牵涉到异常处理级722;以及8)引退单元754和物理寄存器组单元758执行提交级724。
核790可支持一个或多个指令集(例如,x86指令集(具有与较新版本一起添加的一些扩展);加利福尼亚州桑尼维尔市的MIPS技术公司的MIPS指令集;加利福尼州桑尼维尔市的ARM控股的ARM指令集(具有诸如NEON等可选附加扩展)),其中包括本文中描述的各指令。在一个实施例中,核790包括用于支持紧缩数据指令集扩展(例如SSE、AVX1、AVX2等等)的逻辑,由此允许许多多媒体应用所使用的操作利用紧缩数据来执行。
应当理解,核可支持多线程化(执行两个或更多个并行的操作或线程的集合),并且可以按各种方式来完成该多线程化,此各种方式包括时分多线程化、同步多线程化(其中单个物理核为物理核正在同步多线程化的各线程中的每一个线程提供逻辑核)、或其组合(例如,时分取出和解码以及此后诸如用超线程化技术来同步多线程化)。
尽管在无序执行的上下文中描述了寄存器重命名,但应当理解,可以在有序架构中使用寄存器重命名。尽管所示出的处理器的实施例还包括分开的指令和数据高速缓存单元734/774以及共享L2高速缓存单元776,但替代实施例可以具有用于指令和数据两者的单个内部高速缓存,诸如例如一级(L1)内部高速缓存或多个级别的内部高速缓存。在一些实施例中,该系统可包括内部高速缓存和在核和/或处理器外部的外部高速缓存的组合。或者,所有高速缓存都可以在核和/或处理器的外部。
具体的示例性有序核架构
图8A-B示出了更具体的示例性有序核架构的框图,该核将是芯片中的若干逻辑块之一(包括相同类型和/或不同类型的其它核)。根据应用,这些逻辑块通过高带宽的互连网络(例如,环形网络)与一些固定的功能逻辑、存储器I/O接口和其它必要的I/O逻辑通信。
图8A是根据本发明的各实施例的单个处理器核以及它与管芯上互连网络802的连接及其二级(L2)高速缓存的本地子集804的框图。在一个实施例中,指令解码器800支持具有紧缩数据指令集扩展的x86指令集。L1高速缓存806允许对进入标量和向量单元中的高速缓存存储器的低等待时间访问。尽管在一个实施例中(为了简化设计),标量单元808和向量单元810使用分开的寄存器集合(分别为标量寄存器812和向量寄存器814),并且在这些寄存器之间转移的数据被写入到存储器并随后从一级(L1)高速缓存806读回,但是本发明的替代实施例可以使用不同的方法(例如使用单个寄存器集合或包括允许数据在这两个寄存器组之间传输而无需被写入和读回的通信路径)。
L2高速缓存的本地子集804是全局L2高速缓存的一部分,该全局L2高速缓存被划分成多个分开的本地子集,即每个处理器核一个本地子集。每个处理器核具有到其自己的L2高速缓存804的本地子集的直接访问路径。被处理器核读出的数据被存储在其L2高速缓存子集804中,并且可以与其它处理器核访问其自己的本地L2高速缓存子集并行地被快速访问。被处理器核写入的数据被存储在其自己的L2高速缓存子集804中,并在必要的情况下从其它子集清除。环形网络确保共享数据的一致性。环形网络是双向的,以允许诸如处理器核、L2高速缓存和其它逻辑块之类的代理在芯片内彼此通信。每个环形数据路径为每个方向1012位宽。
图8B是根据本发明的各实施例的图8A中的处理器核的一部分的展开图。图8B包括L1高速缓存804的L1数据高速缓存806A部分,以及关于向量单元810和向量寄存器814的更多细节。具体地说,向量单元810是16宽向量处理单元(VPU)(见16宽ALU 828),该单元执行整型、单精度浮点以及双精度浮点指令中的一个或多个。该VPU通过混合单元820支持对寄存器输入的混合、通过数值转换单元822A-B支持数值转换、并通过复制单元824支持对存储器输入的复制。写掩码寄存器826允许断言所得的向量写入。
具有集成存储器控制器和图形器件的处理器
图9是根据本发明的各实施例可能具有多于一个核、可能具有集成存储器控制器、以及可能具有集成图形器件的处理器900的框图。图9中的实线框示出具有单个核902A、系统代理910、一个或多个总线控制器单元916的集合的处理器900,而虚线框的可选附加示出具有多个核902A-N、系统代理单元910中的一个或多个集成存储器控制器单元914的集合以及专用逻辑908的替代处理器900。
因此,处理器900的不同实现可包括:1)CPU,其中专用逻辑908是集成图形和/或科学(吞吐量)逻辑(其可包括一个或多个核),并且核902A-N是一个或多个通用核(例如,通用的有序核、通用的无序核、这两者的组合);2)协处理器,其中核902A-N是旨在主要用于图形和/或科学(吞吐量)的多个专用核;以及3)协处理器,其中核902A-N是多个通用有序核。因此,处理器900可以是通用处理器、协处理器或专用处理器,诸如例如网络或通信处理器、压缩引擎、图形处理器、GPGPU(通用图形处理单元)、高吞吐量的集成众核(MIC)协处理器(包括30个或更多核)、或嵌入式处理器等。该处理器可以被实现在一个或多个芯片上。处理器900可以是一个或多个衬底的一部分,和/或可以使用诸如例如BiCMOS、CMOS或NMOS等的多个加工技术中的任何一个技术将该处理器实现在一个或多个衬底上。
存储器层次结构包括在各核内的一个或多个级别的高速缓存、一个或多个共享高速缓存单元906的集合、以及耦合至集成存储器控制器单元914的集合的外部存储器(未示出)。该共享高速缓存单元906的集合可以包括一个或多个中间级高速缓存,诸如二级(L2)、三级(L3)、四级(L4)或其它级别的高速缓存、末级高速缓存(LLC)、和/或其组合。尽管在一个实施例中,基于环的互连单元912将集成图形逻辑908、共享高速缓存单元906的集合以及系统代理单元910/集成存储器控制器单元914互连,但替代实施例可使用任何数量的公知技术来将这些单元互连。在一个实施例中,可以维护一个或多个高速缓存单元906和核902-A-N之间的一致性(coherency)。
在一些实施例中,核902A-N中的一个或多个核能够多线程化。系统代理910包括协调和操作核902A-N的那些组件。系统代理单元910可包括例如功率控制单元(PCU)和显示单元。PCU可以是或包括用于调整核902A-N和集成图形逻辑908的功率状态所需的逻辑和组件。显示单元用于驱动一个或多个外部连接的显示器。
核902A-N在架构指令集方面可以是同构的或异构的;即,这些核902A-N中的两个或更多个核可能能够执行相同的指令集,而其它核可能能够执行该指令集的仅仅子集或不同的指令集。
示例性计算机架构
图10-13是示例性计算机架构的框图。本领域已知的对膝上型设备、台式机、手持PC、个人数字助理、工程工作站、服务器、网络设备、网络集线器、交换机、嵌入式处理器、数字信号处理器(DSP)、图形设备、视频游戏设备、机顶盒、微控制器、蜂窝电话、便携式媒体播放器、手持设备以及各种其它电子设备的其它系统设计和配置也是合适的。一般地,能够包含本文中所公开的处理器和/或其它执行逻辑的多个系统和电子设备一般都是合适的。
现在参考图10,所示出的是根据本发明一个实施例的系统1000的框图。系统1000可以包括一个或多个处理器1010、1015,这些处理器耦合到控制器中枢1020。在一个实施例中,控制器中枢1020包括图形存储器控制器中枢(GMCH)1090和输入/输出中枢(IOH)1050(其可以在分开的芯片上);GMCH 1090包括存储器和图形控制器,存储器1040和协处理器1045耦合到该存储器和图形控制器;IOH 1050将输入/输出(I/O)设备1060耦合到GMCH1090。或者,存储器和图形控制器中的一个或两者被集成在处理器内(如本文中所描述的),存储器1040和协处理器1045直接耦合到处理器1010以及控制器中枢1020,该控制器中枢与IOH 1050处于单个芯片中。
附加处理器1015的任选性质用虚线表示在图10中。每一处理器1010、1015可包括本文中描述的处理核中的一个或多个,并且可以是处理器900的某一版本。
存储器1040可以是例如动态随机存取存储器(DRAM)、相变存储器(PCM)或这两者的组合。对于至少一个实施例,控制器中枢1020经由诸如前端总线(FSB)之类的多分支总线、诸如快速通道互连(QPI)之类的点对点接口、或者类似的连接1095与处理器1010、1015进行通信。
在一个实施例中,协处理器1045是专用处理器,诸如例如高吞吐量MIC处理器、网络或通信处理器、压缩引擎、图形处理器、GPGPU、或嵌入式处理器等等。在一个实施例中,控制器中枢1020可以包括集成图形加速器。
在物理资源1010、1015之间会存在包括架构、微架构、热、和功耗特征等的一系列品质度量方面的各种差异。
在一个实施例中,处理器1010执行控制一般类型的数据处理操作的指令。协处理器指令可嵌入在这些指令中。处理器1010将这些协处理器指令识别为应当由附连的协处理器1045执行的类型。因此,处理器1010在协处理器总线或者其它互连上将这些协处理器指令(或者表示协处理器指令的控制信号)发布到协处理器1045。协处理器1045接受并执行所接收的协处理器指令。
现在参考图11,所示为根据本发明的一实施例的更具体的第一示例性系统1100的框图。如图11所示,多处理器系统1100是点对点互连系统,并包括经由点对点互连1150耦合的第一处理器1170和第二处理器1180。处理器1170和1180中的每一个都可以是处理器900的某一版本。在本发明的一个实施例中,处理器1170和1180分别是处理器1010和1015,而协处理器1138是协处理器1045。在另一实施例中,处理器1170和1180分别是处理器1010和协处理器1045。
处理器1170和1180被示为分别包括集成存储器控制器(IMC)单元1172和1182。处理器1170还包括作为其总线控制器单元的一部分的点对点(P-P)接口1176和1178;类似地,第二处理器1180包括点对点接口1186和1188。处理器1170、1180可以使用点对点(P-P)接口电路1178、1188经由P-P接口1150来交换信息。如图11所示,IMC 1172和1182将各处理器耦合至相应的存储器,即存储器1132和存储器1134,这些存储器可以是本地附连至相应的处理器的主存储器的部分。
处理器1170、1180可各自经由使用点对点接口电路1176、1194、1186、1198的各个P-P接口1152、1154与芯片组1190交换信息。芯片组1190可以可选地经由高性能接口1139与协处理器1138交换信息。在一个实施例中,协处理器1138是专用处理器,诸如例如高吞吐量MIC处理器、网络或通信处理器、压缩引擎、图形处理器、GPGPU、或嵌入式处理器等等。
共享高速缓存(未示出)可以被包括在任一处理器之内,或被包括在两个处理器外部但仍经由P-P互连与这些处理器连接,从而如果将某处理器置于低功率模式时,可将任一处理器或两个处理器的本地高速缓存信息存储在该共享高速缓存中。
芯片组1190可经由接口1196耦合至第一总线1116。在一个实施例中,第一总线1116可以是外围组件互连(PCI)总线,或诸如PCI Express总线或其它第三代I/O互连总线之类的总线,但本发明的范围并不受此限制。
如图11所示,各种I/O设备1114可以连同总线桥1118耦合到第一总线1116,该总线桥将第一总线1116耦合至第二总线1120。在一个实施例中,诸如协处理器、高吞吐量MIC处理器、GPGPU的处理器、加速器(诸如例如图形加速器或数字信号处理(DSP)单元)、现场可编程门阵列或任何其它处理器的一个或多个附加处理器1115耦合到第一总线1116。在一个实施例中,第二总线1120可以是低引脚计数(LPC)总线。各种设备可以被耦合至第二总线1120,在一个实施例中这些设备包括例如键盘/鼠标1122、通信设备1127以及诸如可包括指令/代码和数据1130的盘驱动器或其它大容量存储设备的存储单元1128。此外,音频I/O1124可以被耦合至第二总线1120。注意,其它架构是可能的。例如,代替图11的点对点架构,系统可以实现多分支总线或其它这类架构。
现在参考图12,所示为根据本发明的实施例的更具体的第二示例性系统1200的框图。图11和图12中的相同部件用相同附图标记表示,并从图12中省去了图11中的某些方面,以避免使图12的其它方面变得模糊。
图12示出处理器1170、1180可分别包括集成存储器和I/O控制逻辑(”CL”)1172和1182。因此,CL 1172、1182包括集成存储器控制器单元并包括I/O控制逻辑。图12不仅示出存储器1132、1134耦合至CL 1172、1182,而且还示出I/O设备1214也耦合至控制逻辑1172、1182。传统I/O设备1215被耦合至芯片组1190。
现在参照图13,所示出的是根据本发明一个实施例的SoC 1300的框图。在图9中,相似的部件具有同样的附图标记。另外,虚线框是更先进的SoC的可选特征。在图13中,互连单元1302被耦合至:应用处理器1310,该应用处理器包括一个或多个核202A-N的集合以及共享高速缓存单元906;系统代理单元910;总线控制器单元916;集成存储器控制器单元914;一组或一个或多个协处理器1320,其可包括集成图形逻辑、图像处理器、音频处理器和视频处理器;静态随机存取存储器(SRAM)单元1330;直接存储器存取(DMA)单元1332;以及用于耦合至一个或多个外部显示器的显示单元1340。在一个实施例中,协处理器1320包括专用处理器,诸如例如网络或通信处理器、压缩引擎、GPGPU、高吞吐量MIC处理器、或嵌入式处理器等等。
本文公开的机制的各实施例可以被实现在硬件、软件、固件或这些实现方法的组合中。本发明的实施例可实现为在可编程系统上执行的计算机程序或程序代码,该可编程系统包括至少一个处理器、存储系统(包括易失性和非易失性存储器和/或存储元件)、至少一个输入设备以及至少一个输出设备。
可将程序代码(诸如图11中示出的代码1130)应用于输入指令,以执行本文描述的各功能并生成输出信息。可以按已知方式将输出信息应用于一个或多个输出设备。为了本申请的目的,处理系统包括具有诸如例如数字信号处理器(DSP)、微控制器、专用集成电路(ASIC)或微处理器之类的处理器的任何系统。
程序代码可以用高级程序化语言或面向对象的编程语言来实现,以便与处理系统通信。在需要时,也可用汇编语言或机器语言来实现程序代码。事实上,本文中描述的机制不限于任何特定编程语言的范围。在任一情形下,该语言可以是编译语言或解释语言。
至少一个实施例的一个或多个方面可以由存储在机器可读介质上的表示性指令来实现,指令表示处理器中的各种逻辑,指令在被机器读取时使得该机器制作用于执行本文所述的技术的逻辑。被称为“IP核”的这些表示可以被存储在有形的机器可读介质上,并被提供给多个客户或生产设施以加载到实际制造该逻辑或处理器的制造机器中。
这样的机器可读存储介质可以包括但不限于通过机器或设备制造或形成的物品的非瞬态的有形安排,其包括存储介质,诸如:硬盘;任何其它类型的盘,包括软盘、光盘、紧致盘只读存储器(CD-ROM)、紧致盘可重写(CD-RW)以及磁光盘;半导体器件,例如只读存储器(ROM)、诸如动态随机存取存储器(DRAM)和静态随机存取存储器(SRAM)之类的随机存取存储器(RAM)、可擦除可编程只读存储器(EPROM)、闪存、电可擦除可编程只读存储器(EEPROM);相变存储器(PCM);磁卡或光卡;或适于存储电子指令的任何其它类型的介质。
因此,本发明的各实施例还包括非瞬态的有形机器可读介质,该介质包含指令或包含设计数据,诸如硬件描述语言(HDL),它定义本文中描述的结构、电路、装置、处理器和/或系统特征。这些实施例也被称为程序产品。
虽然已经描述并在附图中示出了特定示例实施例,但可以理解,这些实施例仅仅是对本宽泛发明的说明而非限制,并且本发明不限于所示出和所描述的特定结构和配置,因为本领域技术人员在研究了本公开文本之后可以料知到多种其它修改方式。在诸如本申请这样的技术领域中,因为发展很快且未来的进步难以预见,所以本公开的诸个实施例可通过受益于技术进步而容易地获得配置和细节上的改动,而不背离本公开的原理和所附权利要求书的范围。
Claims (26)
1.一种指令处理装置,包括:
寄存器组,包括第一掩码寄存器、单独的第二掩码寄存器、第一向量寄存器和单独的第二向量寄存器;以及
执行电路,耦合到所述寄存器组,所述执行电路用于执行指令以用所述第二向量寄存器中给定数量的源数据元素替换所述第一向量寄存器中所述给定数量的目标数据元素,其中每个源数据元素对应于所述第二掩码寄存器中具有第二位值的掩码位,并且每个目标数据元素对应于所述第一掩码寄存器中具有第一位值的掩码位。
2.如权利要求1所述的装置,其中对于所述第一掩码寄存器中具有所述第一位值的每个掩码位,所述执行电路用于搜索所述第二向量寄存器以寻找在所述第二掩码寄存器中具有相应的所述第二位值的掩码位的数据元素作为源数据元素之一。
3.如权利要求1所述的装置,其中所述执行电路用于在所述第一向量寄存器中的元素上执行递归计算并且用于累加所述第一向量寄存器中所述递归计算的结果。
4.如权利要求1所述的装置,其中所述执行电路用于在所述第一向量寄存器中的数据元素上执行递归计算直到所述第一向量寄存器中的一个或多个数据元素不需要进一步计算,并且用于使用所述第一掩码寄存器将所述一个或多个数据元素标记为目标数据元素。
5.如权利要求1所述的装置,其中所述第一向量寄存器中所述给定数量的目标数据元素是所述第一向量寄存器中的低阶元素或高阶元素,并且所述第二向量寄存器中所述给定数量的源数据元素是所述第二向量寄存器中的低阶元素或高阶元素。
6.如权利要求1所述的装置,其中所述第一位值是所述第二位值的反转。
7.如权利要求1所述的装置,其中所述第一位值与所述第二位值相同。
8.如权利要求1所述的装置,其中所述给定数量是所述第一掩码寄存器中具有所述第一位值的掩码位的数量和所述第二掩码寄存器中具有所述第二位值的掩码位的数量中较小的一个。
9.一种指令处理方法,包括:
由处理器接收指定第一掩码寄存器、单独的第二掩码寄存器、第一向量寄存器和单独的第二向量寄存器的向量移动指令;以及
响应于所述向量移动指令,用所述第二向量寄存器中给定数量的源数据元素替换所述第一向量寄存器中所述给定数量的目标数据元素,其中每个源数据元素对应于所述第二掩码寄存器中具有第二位值的掩码位,并且每个目标数据元素对应于所述第一掩码寄存器中具有第一位值的掩码位。
10.如权利要求9所述的方法,进一步包括:
对于所述第一掩码寄存器中具有所述第一位值的每个掩码位,搜索所述第二向量寄存器以寻找在所述第二掩码寄存器中具有相应的所述第二位值的掩码位的数据元素作为源数据元素之一。
11.如权利要求9所述的方法,进一步包括:
在所述第一向量寄存器中的数据元素上执行递归计算;以及
累加所述第一向量寄存器中所述递归计算的结果。
12.如权利要求9所述的方法,进一步包括:
在所述第一向量寄存器中的数据元素上执行递归计算直到所述第一向量寄存器中的一个或多个数据元素不需要进一步计算;以及
使用所述第一掩码寄存器将所述一个或多个数据元素标记为目标数据元素。
13.如权利要求9所述的方法,其中所述第二向量寄存器中所述给定数量的源数据元素是所述第二向量寄存器中的低阶数据元素或高阶数据元素,并且所述第一向量寄存器中所述给定数量的目标数据元素是所述第一向量寄存器中的低阶数据元素或高阶数据元素。
14.如权利要求9所述的方法,其中所述第一位值是所述第二位值的反转。
15.如权利要求9所述的方法,其中所述第一位值与所述第二位值相同。
16.如权利要求9所述的方法,其中所述给定数量是所述第一掩码寄存器中具有所述第一位值的掩码位的数量和所述第二掩码寄存器中具有所述第二位值的掩码位的数量中较小的一个。
17.一种计算系统,包括:
存储器,用于存储包括多个输入数据元素的输入数据数组;
寄存器组,包括第一掩码寄存器、第二掩码寄存器、第一向量寄存器和第二向量寄存器;以及
执行电路,与所述存储器和所述寄存器组耦合,所述执行电路用于在所述第一向量寄存器上将递归计算执行多个迭代,所述迭代中的多于一个迭代包括以下操作:
用于将所述输入数据元素的至少部分从所述输入数据数组加载到所述第二向量寄存器中的向量加载操作,
用于将所述第二向量寄存器中的所述输入数据元素移动到所述第一向量寄存器中的向量移动操作,
用于更新所述第一和第二掩码寄存器以分别标识所述第一和第二向量寄存器中需要进一步计算的数据元素的掩码更新操作,
用于在所述第一向量寄存器中的数据元素上操作的向量计算操作,以及
用于将所述向量计算操作的结果存储在所述存储器中的向量存储操作。
18.如权利要求17所述的系统,其中所述执行电路用所述第二向量寄存器中给定数量的源数据元素替换所述第一向量寄存器中所述给定数量的目标数据元素,其中每个源数据元素对应于所述第二掩码寄存器中具有第二位值的掩码位,并且每个目标数据元素对应于所述第一掩码寄存器中具有第一位值的掩码位。
19.如权利要求17所述的系统,其中所述第一位值是所述第二位值的反转。
20.如权利要求17所述的系统,其中所述第一位值与所述第二位值相同。
21.如权利要求17所述的系统,其中所述给定数量是所述第一掩码寄存器中具有所述第一位值的掩码位的数量和所述第二掩码寄存器中具有所述第二位值的掩码位的数量中较小的一个。
22.如权利要求17所述的系统,其中所述执行电路执行所述掩码更新操作以更新所述第一掩码寄存器和所述第二掩码寄存器,使得所述第一掩码寄存器和第二掩码寄存器的掩码位分别标识所述第一向量寄存器和所述第二向量寄存器中需要进一步计算的相应数据元素。
23.如权利要求17所述的系统,其中所述执行电路响应于向量移动指令执行所述向量移动操作,所述向量移动指令指定所述第一向量寄存器、所述第二向量寄存器、所述第一向量寄存器和所述第二向量寄存器作为操作数。
24.如权利要求17所述的系统,其中所述执行电路响应于掩码更新指令执行所述掩码更新操作,所述掩码更新指令指定所述第一掩码寄存器和所述第二掩码寄存器作为操作数。
25.一种机器可读存储介质,所述机器可读存储介质包括代码,所述代码在被执行时使机器执行如权利要求9-16中的任一项所述的方法。
26.一种指令处理设备,包括用于执行如权利要求9-16中的任一项所述的方法的装置。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US13/630,118 US9378182B2 (en) | 2012-09-28 | 2012-09-28 | Vector move instruction controlled by read and write masks |
US13/630,118 | 2012-09-28 | ||
PCT/US2013/045429 WO2014051733A2 (en) | 2012-09-28 | 2013-06-12 | Vector move instruction controlled by read and write masks |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104603746A CN104603746A (zh) | 2015-05-06 |
CN104603746B true CN104603746B (zh) | 2018-03-02 |
Family
ID=50386381
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201380045550.9A Active CN104603746B (zh) | 2012-09-28 | 2013-06-12 | 由读和写掩码控制的向量移动指令 |
Country Status (7)
Country | Link |
---|---|
US (1) | US9378182B2 (zh) |
JP (2) | JP6082116B2 (zh) |
KR (1) | KR101723121B1 (zh) |
CN (1) | CN104603746B (zh) |
DE (1) | DE112013004783T5 (zh) |
GB (1) | GB2518116B (zh) |
WO (1) | WO2014051733A2 (zh) |
Families Citing this family (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9122475B2 (en) * | 2012-09-28 | 2015-09-01 | Intel Corporation | Instruction for shifting bits left with pulling ones into less significant bits |
US9400650B2 (en) * | 2012-09-28 | 2016-07-26 | Intel Corporation | Read and write masks update instruction for vectorization of recursive computations over interdependent data |
US9378182B2 (en) | 2012-09-28 | 2016-06-28 | Intel Corporation | Vector move instruction controlled by read and write masks |
JP2015219823A (ja) * | 2014-05-20 | 2015-12-07 | 富士通株式会社 | プロセッサ |
US9851970B2 (en) * | 2014-12-23 | 2017-12-26 | Intel Corporation | Method and apparatus for performing reduction operations on a set of vector elements |
US10409613B2 (en) * | 2015-12-23 | 2019-09-10 | Intel Corporation | Processing devices to perform a key value lookup instruction |
US11204764B2 (en) * | 2016-03-31 | 2021-12-21 | Intel Corporation | Processors, methods, systems, and instructions to Partition a source packed data into lanes |
US10255072B2 (en) * | 2016-07-01 | 2019-04-09 | Intel Corporation | Architectural register replacement for instructions that use multiple architectural registers |
WO2019005165A1 (en) | 2017-06-30 | 2019-01-03 | Intel Corporation | METHOD AND APPARATUS FOR VECTORIZING INDIRECT UPDATING BUCKLES |
US10877766B2 (en) * | 2018-05-24 | 2020-12-29 | Xilinx, Inc. | Embedded scheduling of hardware resources for hardware acceleration |
CN109032666B (zh) * | 2018-07-03 | 2021-03-23 | 中国人民解放军国防科技大学 | 一种用于向量处理的确定断言活跃元素个数的方法和装置 |
GB2580068B (en) * | 2018-12-20 | 2021-02-24 | Advanced Risc Mach Ltd | Generating a vector predicate summary |
CN112286579B (zh) * | 2019-07-24 | 2024-05-24 | 腾讯科技(深圳)有限公司 | 数据处理方法、装置、计算机可读存储介质和计算机设备 |
CN112634147B (zh) * | 2020-12-09 | 2024-03-29 | 上海健康医学院 | 自监督学习的pet图像降噪方法、系统、装置及介质 |
WO2022191859A1 (en) * | 2021-03-12 | 2022-09-15 | Zeku, Inc. | Vector processing using vector-specific data type |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5511210A (en) * | 1992-06-18 | 1996-04-23 | Nec Corporation | Vector processing device using address data and mask information to generate signal that indicates which addresses are to be accessed from the main memory |
CN101488084A (zh) * | 2007-12-27 | 2009-07-22 | 英特尔公司 | 执行屏蔽加载和存储操作的指令和逻辑 |
Family Cites Families (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPS6059469A (ja) * | 1983-09-09 | 1985-04-05 | Nec Corp | ベクトル処理装置 |
JP3245488B2 (ja) * | 1993-11-12 | 2002-01-15 | 甲府日本電気株式会社 | リストベクトル処理装置 |
US5996066A (en) * | 1996-10-10 | 1999-11-30 | Sun Microsystems, Inc. | Partitioned multiply and add/subtract instruction for CPU with integrated graphics functions |
JPH11126200A (ja) * | 1997-10-23 | 1999-05-11 | Nec Kofu Ltd | ベクトル処理装置 |
WO2001089098A2 (en) * | 2000-05-05 | 2001-11-22 | Lee Ruby B | A method and system for performing permutations with bit permutation instructions |
US6954841B2 (en) * | 2002-06-26 | 2005-10-11 | International Business Machines Corporation | Viterbi decoding for SIMD vector processors with indirect vector element access |
US20070150697A1 (en) * | 2005-05-10 | 2007-06-28 | Telairity Semiconductor, Inc. | Vector processor with multi-pipe vector block matching |
US7480787B1 (en) * | 2006-01-27 | 2009-01-20 | Sun Microsystems, Inc. | Method and structure for pipelining of SIMD conditional moves |
US7493475B2 (en) * | 2006-11-15 | 2009-02-17 | Stmicroelectronics, Inc. | Instruction vector-mode processing in multi-lane processor by multiplex switch replicating instruction in one lane to select others along with updated operand address |
US9400650B2 (en) * | 2012-09-28 | 2016-07-26 | Intel Corporation | Read and write masks update instruction for vectorization of recursive computations over interdependent data |
US9378182B2 (en) | 2012-09-28 | 2016-06-28 | Intel Corporation | Vector move instruction controlled by read and write masks |
-
2012
- 2012-09-28 US US13/630,118 patent/US9378182B2/en active Active
-
2013
- 2013-06-12 JP JP2015531915A patent/JP6082116B2/ja not_active Expired - Fee Related
- 2013-06-12 WO PCT/US2013/045429 patent/WO2014051733A2/en active Application Filing
- 2013-06-12 DE DE112013004783.7T patent/DE112013004783T5/de active Pending
- 2013-06-12 KR KR1020157003735A patent/KR101723121B1/ko active IP Right Grant
- 2013-06-12 GB GB1500819.6A patent/GB2518116B/en active Active
- 2013-06-12 CN CN201380045550.9A patent/CN104603746B/zh active Active
-
2017
- 2017-01-19 JP JP2017007593A patent/JP6340097B2/ja active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5511210A (en) * | 1992-06-18 | 1996-04-23 | Nec Corporation | Vector processing device using address data and mask information to generate signal that indicates which addresses are to be accessed from the main memory |
CN101488084A (zh) * | 2007-12-27 | 2009-07-22 | 英特尔公司 | 执行屏蔽加载和存储操作的指令和逻辑 |
Also Published As
Publication number | Publication date |
---|---|
GB2518116B (en) | 2020-10-28 |
JP6340097B2 (ja) | 2018-06-06 |
KR101723121B1 (ko) | 2017-04-05 |
JP6082116B2 (ja) | 2017-02-15 |
DE112013004783T5 (de) | 2015-06-11 |
GB2518116A (en) | 2015-03-11 |
WO2014051733A2 (en) | 2014-04-03 |
GB201500819D0 (en) | 2015-03-04 |
WO2014051733A3 (en) | 2014-08-21 |
CN104603746A (zh) | 2015-05-06 |
US20140095828A1 (en) | 2014-04-03 |
JP2015528610A (ja) | 2015-09-28 |
KR20150038058A (ko) | 2015-04-08 |
JP2017107579A (ja) | 2017-06-15 |
US9378182B2 (en) | 2016-06-28 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104603746B (zh) | 由读和写掩码控制的向量移动指令 | |
CN104603745B (zh) | 用于独立数据上递归计算的向量化的读和写掩码更新指令 | |
CN104603766B (zh) | 经加速的通道间的向量归约指令 | |
CN104603795B (zh) | 实现用户级线程的即时上下文切换的指令和微架构 | |
CN104919432B (zh) | 用于将多个位向左移并将多个1拉入较低有效位的指令 | |
CN104049953B (zh) | 用于合并操作掩码的未经掩码元素的装置、方法、系统和制品 | |
CN103970509B (zh) | 对条件循环进行矢量化的装置、方法、处理器、处理系统以及机器可读介质 | |
CN104204990B (zh) | 在使用共享虚拟存储器的处理器中加速操作的装置和方法 | |
CN103827814B (zh) | 用于提供利用跨越功能的向量加载操作/存储操作的指令和逻辑 | |
CN104137060B (zh) | 高速缓存协处理单元 | |
CN104903867B (zh) | 用于将寄存器的内容广播到另一个寄存器的数据元素位置的系统、装置和方法 | |
CN104011663B (zh) | 掩码寄存器上的广播操作 | |
CN108292215A (zh) | 用于加载-索引和预取-聚集操作的指令和逻辑 | |
CN104025022B (zh) | 用于具有推测支持的向量化的装置和方法 | |
CN104081337B (zh) | 用于响应于单个指令来执行横向部分求和的系统、装置和方法 | |
CN108369509A (zh) | 用于基于通道的跨步分散操作的指令和逻辑 | |
CN104813279B (zh) | 用于减少具有步幅式访问模式的向量寄存器中的元素的指令 | |
CN104126172B (zh) | 用于掩码寄存器扩充操作的装置和方法 | |
CN105247474B (zh) | 在屏蔽寄存器中反转和置换位的装置和方法 | |
CN109992240A (zh) | 用于多加载和多存储向量指令的方法和装置 | |
CN108292293A (zh) | 用于得到多个向量元素操作的指令和逻辑 | |
CN107690618A (zh) | 用于提供向量紧缩直方图功能的方法、装置、指令和逻辑 | |
CN108369573A (zh) | 用于设置多个向量元素的操作的指令和逻辑 | |
CN109791493A (zh) | 用于乱序集群化解码中的负载平衡的系统和方法 | |
CN108292294A (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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |