CN104813279A - 用于减少具有步幅式访问模式的向量寄存器中的元素的指令 - Google Patents

用于减少具有步幅式访问模式的向量寄存器中的元素的指令 Download PDF

Info

Publication number
CN104813279A
CN104813279A CN201280077375.7A CN201280077375A CN104813279A CN 104813279 A CN104813279 A CN 104813279A CN 201280077375 A CN201280077375 A CN 201280077375A CN 104813279 A CN104813279 A CN 104813279A
Authority
CN
China
Prior art keywords
vector register
vector
data element
register
instruction
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN201280077375.7A
Other languages
English (en)
Other versions
CN104813279B (zh
Inventor
A·哈尔多诺
J·巴拉德瓦杰
N·瓦苏德万
S·S·巴格索尔金
V·W·李
D·金
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Intel Corp
Original Assignee
Intel Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Intel Corp filed Critical Intel Corp
Publication of CN104813279A publication Critical patent/CN104813279A/zh
Application granted granted Critical
Publication of CN104813279B publication Critical patent/CN104813279B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/3001Arithmetic instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30018Bit or string instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/3005Arrangements for executing specific machine instructions to perform operations for flow control
    • G06F9/30065Loop control instructions; iterative instructions, e.g. LOOP, REPEAT
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/34Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes
    • G06F9/345Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes of multiple operands or results
    • G06F9/3455Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes of multiple operands or results using stride

Abstract

一种具有非单元步幅访问模式的矢量归约指令由处理器的执行电路接收和执行。响应于所述指令,执行电路在第一向量寄存器的数据元素上执行相关联的归约操作。基于掩码寄存器的值和被处理的当前元素位置,执行电路顺序地将第一矢量寄存器的一个或多个数据元素设置为结果,所述结果由被应用到第一矢量寄存器的之前的数据元素和第三矢量寄存器的数据元素二者的相关联的归约操作生成。之前的数据元素所处的位置与当前元素位置相距超过一个元素位置。

Description

用于减少具有步幅式访问模式的向量寄存器中的元素的指令
技术领域
本公开涉及处理逻辑、微处理器、以及相关联的指令集架构的领域,所述处理逻辑、微处理器、以及相关联的指令集架构当由处理器或其它处理逻辑执行时,实施逻辑、数学、或其它功能操作。
背景技术
指令集、或指令集架构(ISA)是与编程相关的计算机体系结构的部分,并且其可以包括本地数据类型、指令、寄存器体系结构、寻址方式、存储器体系结构、中断和异常处理、以及外部输入和输出(I/O)。术语指令在本文中通常指宏指令,即被提供给处理器(或将指令变换(例如,使用静态二进制变换、包括动态编译的动态二进制变换)、变形、仿真、或另外转换为由处理器处理的一个或多个其它指令的指令转换器)用于执行的指令,其与微指令或微操作(micro-ops)不同,微指令或微操作是处理器的解码器对宏指令进行解码的结果。
ISA与微体系结构不同,其是实现指令集的处理器的内部设计。具有不同微体系结构的处理器能够共享公共指令集。例如,CoreTM处理器和来自Sunnyvale CA的Advanced Micro Devices,Inc.的处理器几乎实现相同版本的x86指令集(一些扩展已经被添加到新版本),但是具有不同的内部设计。例如,ISA的相同的寄存器体系结构可以在不同的微体系结构中使用公知的技术以不同的方式实现,包括专用物理寄存器、使用寄存器重命名机制的一个或多个动态分配的物理寄存器等。
许多现代ISA支持单指令、多数据(SIMD)操作。不是仅操作只有一个数据元素或一对数据元素的标量指令,矢量指令(还被称为紧缩数据指令或SIMD指令)可以同时或并行地操作多个数据元素或多对数据元素。处理器可以具有并行执行硬件,以响应于矢量指令来同时或并行地执行多个操作。
SIMD操作在一个操作中对封装在一个寄存器或存储器位置中的多个数据元素进行操作。这些数据元素被称为紧缩数据或矢量数据。矢量数据元素中的每一个都可以呈现可以单独地或独立于其它而被操作的数据的单独独立的片(例如,像素的颜色等)。SIMD体系结构依赖于编译器来使循环矢量化以用于执行。执行各种形式的相关联的归约操作(例如,加、乘、逻辑操作等)的循环通常在通用应用、系统软件以及在浮点数密集的和多媒体应用中被找到。归约操作可以在标量上或具有单元步幅或非单元步幅的访问模式的阵列上有条件地或无条件地执行。具有小于矢量长度的访问步幅距离的阵列归约操作可能不能由当前的编译器进行矢量化,这是因为词汇后向循环承载的流相关性的存在。
现有的指令不能够封装具有非单元步幅的相关联的阵列归约操作,并且不能封装有条件地执行的具有单元步幅的相关联的阵列归约操作。现有指令的局限性妨碍了特定类型的归约循环的矢量化,并且因此可能导致性能损失。
附图说明
实施例作为示例示出,并且不被限制在附图的图中:
图1示出了根据一个实施例的矢量归约指令的示例。
图2A到图2C示出了根据一个实施例的矢量归约指令的进一步示例。
图3示出了根据一个实施例的将矢量归约操作应用在矢量的两个不同的移位版本上的示例。
图4是根据一个实施例的示出了用于执行矢量归约操作的硬件单元的框图。
图5是根据一个实施例的示出了响应于矢量归约指令而被执行的操作的流程图。
图6是根据一个实施例的示出了使用软件转换器将源指令集中的二进制指令转换为目标指令集中的二进制指令的框图。
图7A是根据一个实施例的有序和乱序流水线的框图。
图7B是根据一个实施例的有序和乱序核心的框图。
图8A到图8B是根据一个实施例的更具体的示例有序核心体系结构的框图。
图9是根据一个实施例的处理器的框图。
图10是根据一个实施例的系统的框图。
图11是根据一个实施例的第二系统的框图。
图12是根据一个实施例的第三系统的框图。
图13是根据一个实施例的芯片上系统(SoC)的框图。
具体实施方式
在下面的描述中,阐述了各种具体的细节。然而,应当理解,本发明的实施例可以在没有这些具体细节的情况下实施。在其它实例中,公知的电路、结构、以及技术没有被详细示出,以避免使对本描述的理解不清楚。
本文描述的实施例提供了一类新指令(也被称为“矢量归约指令”),其执行矢量寄存器内的数据相关性存在的相关联的归约操作。数据相关性距离(还被称为“步幅距离”)是可以比一更大的正整数。比一更大的步幅距离在本文中被称为“非单元”步幅距离。非单元步幅距离被指定为矢量归约指令的输入,并且被用于计算潜在的互相关性的归约结果。此外,矢量归约指令允许有条件地以及正确地执行相关联的归约操作,所述相关联的归约操作是对使用值传播方法的现有硬件归约技术的改进。所述值传播方法通常阻止对预期的阵列归约进行矢量化。因此,本文描述的实施例在更宽范围的相关联的归约循环中具有可能的增强性能。
矢量归约指令能够表达可以有条件地在数据元素的阵列上执行的广泛使用的相关联的归约操作。所述矢量归约指令还适用于具有非单元步幅的存储器参考模式的归约操作。所述矢量归约指令向编译器提供了对各种类型的相关联的归约循环进行矢量化的能力。
下面是被执行的循环的示例,其中步幅距离为一:
表1示出了循环执行的输入和输出数据值。在表1的示例中,通过首先读取前面的元素值并且然后将其添加到第二加法操作数值(即,X),来在每一个启用的元素上执行归约操作。在表1中,每一列指示循环的一个迭代,以及最后一行的B[i]指示输出结果:
i 0 1 2 3 4 5 6 7
B[i] b c d e f g h i
X 2 2 2 2 2 2 2 2
A[i] 0 1 0 0 1 1 0 1
B[i]结果 b b+2 d e e+2 e+4 h h+2
表1
对于单元步幅场景,本文描述的实施例不仅正确地以及有效地生成表1所示出的结果,同样对于非单元步幅场景,本文描述的实施例也能够正确地和有效地生成结果。具有非单元步幅的循环的示例如下所示,其中步幅距离(i1)可以比一更大。
归约操作由条件(A[i]!=0)防卫,以计算具有常量步幅长度s的阵列B的累积的和。例如,假定阵列A的所有元素是非零的(即,if语句变为无条件的),以及阵列B={a,b,c,d,e,f,g,h}。具有步幅距离二的阵列B的累积和是{a,b,a+c,b+d,a+c+e,b+d+f,a+c+e+g,b+d+f+h}。编译器不能够使所述循环矢量化,这是因为从向B[i]写到从B[i-il]读的词汇后向交叉迭代流相关性。具有允许这样类型的相关联的归约操作的映射的矢量归约指令对于性能是有用的。
根据本发明的实施例,用于加法归约的新的矢量归约指令是vRunningAddWithStride[BWDQ]v1,k1,v2,v3,i1(其中[BWDQ]将矢量元素的类型指示为字节/字/双字/四字/浮点/双精度浮点;或更具体地为,字节、字、双字、四字、浮点数、或双精度浮点数)。矢量归约指令可以指定其它相关联的归约操作(其中的一些还可以是可交换的),其包括乘、按位AND、按位OR、MIN、MAX、以及其它算术或逻辑运算符。
矢量归约指令采用判定掩码输入(k1)作为输入。在一个实施例中,判定掩码被存储在包括一个掩码位的掩码寄存器中,以保证执行一对源数据元素的相关联的归约操作。在一个实施例中,掩码位值1限定“真”条件,其允许相关联的归约操作进行或允许其结果被存储。掩码位值0限定“假”条件,其不允许相关联的归约操作进行或不允许其结果被存储。由此,由掩码位1控制的源数据元素被“启用”以参与相关联的归约操作,而由掩码位0控制的源数据元素被“禁用”。在可替换的实施例中,真和假的限定可以相对于1和0的掩码位值被对换。在另一实施例中,掩码寄存器中的每一个判定掩码可以比一个位更多。
除了确保相关联的归约操作的执行的判定掩码输入(k1)之外,矢量归约指令还将是正整数的步幅距离值(i1)作为输入。通过使用步幅距离i1利用v3中的加操作数对v1中的数据元素执行“步幅”矢量加归约。由判定掩码kl禁用的数据元素不能参与在归约中。由掩码k1禁用的源矢量v2的最后一个il元素被复制到v1。
图1示出了根据一个实施例的新矢量归约指令vRunningAddWithStride的示例。所述指令具有包括第一矢量寄存器v1、第二矢量寄存器v2、第三矢量寄存器v3、掩码寄存器k1、以及步幅距离为2的源操作数。第一矢量寄存器v1是源操作数和目的操作数二者。虽然在矢量寄存器的每一个中示出了总共8个数据元素,但是应当理解,每一个矢量寄存器可以包括任意数量的数据元素。此外,每一个数据元素可以是字节、字、双字、四字、浮点数、或双精度浮点数。
在图1的示例中,元素位置1、3、5、以及7由相对应的掩码寄存器值(其中掩码值为假,正如在本示例中由0所指示的)禁用。位于禁用元素位置中的输出数据元素在正方形轮廓中示出。因为步幅距离为2,所以只有源矢量v2的最后两个数据元素是被复制到v1的相对应元素位置的候选元素。因为k1[6]为真而k1[7]为假,所以只有v2[7]被复制为v1[7]。v1[1]、v1[3]、以及v1[5]的值没有改变。
另一方面,元素位置0、2、4以及6由相对应的掩码寄存器值(其中掩码值为真,正如在本示例中由1所指示的)启用。对于这些位置中的v1的每一个数据元素,对v1的之前的数据元素和v3的当前元素位置中的数据元素执行加操作。在本示例中,v3的每一个数据元素是常量值2。之前的数据元素的位置为当前元素位置减去步幅距离对矢量长度VL(在本示例中,其为8)取模。对于v1[0],其之前的数据元素为v1[6],其可以由(当前的元素位置-步幅距离)AND(VL-1)进行计算,其中AND表示按位AND运算符。示出的垂直虚线用于隔开数据元素的环绕部分。
正如示例中示出的,加操作可选择地被应用到v1的数据元素,因为只有由相对应的掩码值启用的这些数据元素接收加操作。此外,加操作被顺序地应用到v1的每一个数据元素。由此,在v1[0]由之前的加操作处理并且其值被更新为(a+2)之后,所得到的v1[2]为v1[0]加v3[2]的和。类似地对于v1[4]和v1[6],在之前的数据元素已经由之前的加操作处理并且更新之后,这些数据元素中的每一个等于v1的之前的数据元素加上v3的相对应的元素的和。
矢量指令vRunningAddWithStride的伪码的示例如下描述。在本示例中,VL是矢量长度,其中8用于Q(四字)、16用于D(双字)、32用于W(字),以及64用于B(字节)。
注意的是,当步幅距离比矢量长度(VL)大或等于矢量长度时,新归约加指令以与常规矢量加相同的方式表现,其中不存在由其随后的部分和使用的预计算的部分和。即,在这个场景中,在矢量寄存器中不存在相关性。
图2A到图2C示出了具有步幅距离为3的新归约加指令的三个示例。类似于图1的示例,所述指令具有包括第一矢量寄存器v1、第二矢量寄存器v2、第三矢量寄存器v3、掩码寄存器k1、以及步幅距离为3的源操作数。第一矢量寄存器v1是源操作数和目的操作数二者。在图2A的示例中,掩码寄存器k1中的所有数据元素都是1(真)。因此,所得到的v1中的每一个数据元素都是v1的之前的数据元素(其与当前元素位置对向量长度取模远离三个步幅)加上v3的当前元素位置中的数据元素。例如,v1[0]=v1[5]+v3[0],v1[3]=v1[0]+v3[3],等。如上所描述的,被用在v1[3]的和中的v1[0]是更新的v1[0]=a+2(不是原始的v1[0]=d)。在图2B的示例中,掩码寄存器k1中的所有数据元素都是0(假)。因此,所得到的v1的前5个数据元素与它们相应的原始值(因为VL-步幅距离=8–3=5)没有改变。v1的最后3个数据元素(其中3=步幅距离)从相对应的元素位置中v2的数据元素复制。在图2C的示例中,位置1、3、5、以及7的数据元素由掩码值0禁用;由此,v1[1]和v[3]保持其相应的原始值(因为它们在v1的前5个数据元素当中),以及v1[5]和v1[7]具有从v2[5]和v2[7]复制的值(因为它们在v1的最后3个数据当中)。位置0、2、4、以及6的数据元素由掩码值1启用:由此,这些位置中的所得到的v1中的每一个都是这些位置中的之前数据元素和相对应的v3的和。在本示例中,之前的数据元素位于当前被处理的元素位置之前的3个元素位置(利用环绕(wrap-around))。
使用新指令的示例在下面的加归约循环中示出:
利用新矢量归约指令的给定的语义,上面的循环的第一矢量迭代中的输入和输出数据在图3中示出,假定VL=8。在本示例中,步幅距离为3。B的前8个数据元素,在被左移3个位置之后(利用环绕),被加载到v1。即,v1=B[3:7,0:2]。在被左移3个位置之后的B(不利用环绕),其为B[3:10],被加载到v2。掩码寄存器k1根据A[i]进行设置,并且v3包含整数加数为2的阵列。在本示例中,归约循环可以使用下面的矢量指令序列来进行矢量化:
图4是执行矢量归约指令vRunningAddWithStride的硬件单元的实施例的框图。源操作数可以被加载到输入矢量寄存器v1、v2、和v3,以及掩码寄存器k1。步幅距离(“stride”)是选择器450的输入,并且循环索引由序列器460生成。序列器460的输出是循环索引并且被指示为seg。选择器450实现(seq-stride)&(VL-1)的逻辑来确定v1的之前的数据元素。比较器440确定序列器输出(seg)是否大于(VL-步幅),并且使用比较的结果来控制多路复用器410。如果序列器输出大于或等于(VL-步幅),则选择用于当前循环索引的v2的数据元素。如果序列器输出不大于(VL-stride),则选择用于当前循环索引的v1的数据元素。硬件单元还包括加法器430,其将v1的之前的数据元素(由选择器450确定的)与用于当前的循环索引的v3的数据元素相加。用于当前的循环索引的掩码数据元素(例如,掩码位)用于控制多路复用器420。如果掩码位为真,则加法器430的输出被写到v1。如果掩码位假,则多路复用器410的输出被写到v1。
虽然只在上面的示例中描述了附加的操作,但是应当意识到的是新矢量归约指令可以指定其它相关联的归约操作(其中的一些还是可互换的),其包括乘、按位AND、按位OR、MIN、MAX以及其它算术或逻辑运算符。加法器430可以由不同的算法或逻辑单元替代,以用于执行不同的算术或逻辑操作。硬件单元可以位于处理器、处理器内的核心、核心内的执行单元中,或可以由专用硬件电路实现。
图5是根据一个实施例的用于执行矢量归约指令的方法500的流程图。矢量归约指令指定了源操作数,所述源操作数包括第一矢量寄存器、第二矢量寄存器、第三矢量寄存器、掩码寄存器、以及步幅距离。在一个实施例中,目的操作数是第一矢量寄存器。在可替换的实施例中,目的操作数可以是不同的矢量寄存器。当处理器(更具体地,执行电路,例如,图7B的执行引擎单元750)接收矢量归约指令来在第一矢量寄存器的数据元素上执行相关联的归约操作(块510)时,方法500开始。基于掩码寄存器的值和被处理的当前元素位置(“位置P,”,其例如可以是循环索引),处理器顺序地将第一矢量寄存器的一个或多个数据元素设置为结果,所述结果由被应用到第一矢量寄存器的之前的数据元素和第三矢量寄存器的数据元素二者的相关联的归约操作生成,其中之前的数据元素所处的位置与位置P相距超过一个或多个元素位置(块520)。
在一个实施例中,当位置P处的掩码值(例如,掩码位)为假时,处理器可以取决于位置P处的值,将位置P处的第一矢量寄存器的数据元素设置为位置P处的第二矢量寄存器的数据元素的值,或保持位置P处的第一矢量寄存器的数据元素不改变。
在一个实施例中,当位置P处的掩码值为真,处理器可以将位置P处的第一矢量寄存器的数据元素设置为结果,所述结果由被应用到第一矢量寄存器的之前的数据元素和第三矢量寄存器的数据元素二者的相关联的归约操作生成。之前的数据元素位于位置P减去步幅距离对第一矢量寄存器的矢量长度取模。
在各种实施例中,图5的方法可以由通用处理器、专用处理器(例如,图形处理器或数字信号处理器)、或另一类型的数字逻辑设备或指令处理装置执行。在一些实施例中,图5的方法可以由处理器、装置、或系统执行,例如,图7A-图7B、图8A到图8B、以及图9-图13中所示出的实施例。此外,图7A-图7B、图8A到图8B、以及图9-图13中示出的处理器、装置、或系统可以执行与图5的方法中的内容相同、或类似、或不同的操作和方法的实施例。
在一些实施例中,图7A-图7B、图8A到图8B、以及图9-图13中示出的处理器、装置、或系统可以结合指令转换器操作,所述指令转换器将指令从源指令集转换到目标指令集。例如,所述指令转换器可以将指令变换(例如,使用静态二进制变换、包括动态编译的动态二进制变换)、变形、仿真、或否则转换为由核心处理的一个或多个其它指令。所述指令转换器可以被实现在软件、硬件、固件或其组合中。所述指令转换器可以在处理器上、在处理器外、或部分在处理器上以及部分在处理器外。
图6是根据本发明的实施例的对照使用软件指令转换器的框图。在示出的实施例中,指令转换器是软件指令转换器,但是可替换地指令转换器可以被实现在软件、固件、硬件或其各种组合中。图6示出了以高级语言602的程序可以使用x86编译器被编译,以生成可以由具有至少一个x86指令集核心616的处理器天然执行的x86二进制代码606。具有至少一个x86指令集核心616的处理器代表能够执行与具有至少一个x86指令集核心的Intel处理器实质上相同的功能的任何处理器,执行与具有至少一个x86指令集核心的Intel处理器实质上相同的功能可以通过兼容地执行或否则处理(1)Intel x86指令集核心的指令集的相当大的部分或(2)应用的对象代码版本或目标为在具有至少一个x86指令集核心的Intel处理器上运行的其它软件,以便实现与具有至少一个x86指令集核心的Intel处理器实质上相同的结果。x86编译器604代表可操作用于生成x86二进制代码606(例如,对象代码)的编译器,x86二进制代码606可以在有或没有额外的链接处理的情况下在具有至少一个x86指令集核心616的处理器上执行。类似地,图6示出了以高级语言602的形式的程序可以使用可选的指令集编译器608进行编译,以生成可以由不具有至少一个x86指令集核心614的处理器(例如,具有执行Sunnyvale,CA的MIPS Technologies的MIPS指令集和/或执行Sunnyvale,CA的ARM Holdings的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,指令高速缓存单元734耦合到指令转换后备缓冲器(TLB)736,指令转换后备缓冲器(TLB)736耦合到指令取出单元738,指令取出单元738耦合到解码单元740。解码单元或解码器可以对指令进行解码,并作为输出生成一个或多个微操作、微代码入口点、微指令、其它指令、或从原始指令解码或否则反映原始指令或从原始指令得到的其它控制信号。可以使用各种不同的机制来实现解码单元740。适当的机制的示例包括但不限于查找表、硬件实现、可编程逻辑阵列(PLA)、微代码只读存储器(ROM)等。在一个实施例中,核心790包括微代码ROM或存储微代码以用于某些宏指令(例如,在解码单元740中或否则在前端单元730中)的其它介质。解码单元740耦合到执行引擎单元750中的重命名/分配器单元752。
执行引擎单元750包括耦合到引退单元754和一个或多个调度器单元756的集合的重命名/分配器单元752。调度器单元756表示任何数量的不同的调度器,包括预留站、中央指令窗口等。调度器单元756耦合到物理寄存器文件单元758。物理寄存器文件单元758的每一个代表一个或多个物理寄存器文件、不同的物理寄存器文件存储一个或多个不同的数据类型,例如,标量整数、标量浮点、紧缩整数、紧缩浮点、矢量整数、矢量浮点等、状态(例如,作为待执行的下一指令的地址的指令指针)等。在一个实施例中,物理寄存器文件单元758包括矢量寄存器单元、写掩码寄存器单元、以及标量寄存器单元。这些寄存器单元可以提供体系结构矢量寄存器、矢量掩码寄存器、以及通用寄存器。物理寄存器文件单元758由引退单元754重叠以示出寄存器重命名和乱序执行可以被实现的各种方式(例如,使用记录器缓冲器和引退寄存器文件;使用未来文件、历史缓冲器和引退寄存器文件;使用寄存器映射和寄存器池;等等)。引退单元754和物理寄存器文件单元758耦合到执行群集760。执行群集760包括一个或多个执行单元762的集合和一个或多个存储器存取单元764的集合。执行单元762可以执行各种操作(例如,移位、加法、减法、乘法)并且针对各种类型的数据(例如,标量浮点、紧缩整数、紧缩浮点、矢量整数、矢量浮点)。虽然一些实施例可以包括专用于特定的功能或功能集合的多个执行单元,但是其它实施例可以只包括一个执行单元或全部执行所有功能的多个执行单元。调度器单元756、物理寄存器文件单元758和执行群集760被示为可能是多个,这是因为某些实施例针对某些类型的数据/操作创建单独的流水线(例如,标量整数流水线、标量浮点/紧缩整数/紧缩浮点/矢量整数/矢量浮点流水线、和/或存储器存取流水线,每一个存储器存取流水线具有其自己的调度器单元、物理寄存器文件单元和/或执行群集,——并且在单独的存储器存取流水线的情况下,某些实施例被实现,其中这个流水线的执行群集具有存储器存取单元764)。也应理解,在单独的流水线被使用的场合,这些流水线中的一个或多个可以是乱序发出/执行,并且其余流水线是有序的。
所述存储器存取单元764的集合耦合到存储器单元770,存储器单元770包括耦合到数据高速缓存单元774的数据TLB单元772,数据高速缓存单元774耦合到二级(L2)高速缓存单元776。在一个示例性实施例中,存储器存取单元764可以包括加载单元、存储地址单元和存储数据单元,其中的每一个单元都耦合到存储器单元770中的数据TLB单元772。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指令集(具有添加有较新版本的一些扩展);Sunnyvale,CA的MIPS Technologies的MIPS指令集;Sunnyvale,CA的ARM Holdings的ARM指令集(具有可选的额外的扩展例如,NEON)),所述一个或多个指令集包括本文描述的指令集。在一个实施例中,核心790包括用于支持紧缩数据指令集扩展(例如,SSE、AVX1、AVX2等)的逻辑,由此允许由许多多媒体应用使用的操作使用紧缩数据被执行。
应理解,核心可以支持多线程(执行两组或更多组并行的操作或线程),并可以用各种方式这么做,包括时间分片多线程、同时多线程(其中单个物理核心为每一个线程提供逻辑核心,物理核心是同时多线程的)或其组合(例如,时间分片取出和解码和在下文例如在混合线程技术中的同时多线程)。
虽然在乱序执行的上下文中描述了寄存器重命名,但是应理解,可以在顺序体系结构中使用寄存器重命名。虽然处理器的所示实施例还包括单独的指令和数据高速缓存单元734/774以及共享L2高速缓存单元776,但是可替换的实施例可以具有用于指令和数据二者的单个内部高速缓存,例如一级(L1)内部高速缓存或多个级别的内部高速缓存。在一些实施例中,系统可以包括内部高速缓存和在核心和/或处理器外部的外部高速缓存的组合。可替换地,所有高速缓存都可以在核心和/或处理器外部。
特定的示例性有序核心体系结构
图8A-图8B示出了更特定的示例性有序核心体系结构的框图,其中,核心是芯片中的多个逻辑块中的一个(包括相同类型和/或不同类型的其它核心)。逻辑块取决于应用,通过高带宽互连网络(例如,环网),利用一些固定的功能逻辑、存储器I/O接口、以及其它必要的I/O逻辑来进行通信。
图8A是根据本发明的实施例的连同具有其到管芯上互连网络802的连接、以及其二级(L2)高速缓存804的本地子集的单个处理器核心的框图。在一个实施例中,指令解码器800支持具有紧缩数据指令集扩展的x86指令集。L1高速缓存806允许对高速缓存存储器的低延迟存取到标量和矢量单元。虽然在一个实施例中(用于使设计简单),标量单元808和矢量单元810使用单独的寄存器集合(相应地,标量寄存器812和矢量寄存器814),以及在它们之间传送的数据被写到存储器中,并且然后从一级(L1)高速缓存806读回,但是本发明的可替换的实施例可以使用不同的方法(例如,使用单个寄存器集合或包括允许数据在两个寄存器文件之间传送而不写以及读回的通信路径)。
L2高速缓存804的本地子集是被划分为单独的本地子集、每处理器核心一个的全局L2高速缓存的部分。每一个处理器核心具有到L2高速缓存804的其自身本地子集的直接存取路径。由处理器核心读取的数据被存储在其L2高速缓存子集804并且能够被快速地存取,这与存取其自身的本地L2高速缓存子集的其它处理器核心并行。由处理器核心写的数据被存储在其自身的L2高速缓存子集804,并且如果必要,则由其它子集刷新。环网确保共享数据的一致性。环网是双向的,以允许代理(例如,处理器核心、L2高速缓存、以及其它逻辑块)在芯片内相互通信。
图8B是根据本发明的实施例的图8A中处理器核心的部分的扩展视图。图8B包括L1高速缓存804的L1数据高速缓存806A部分,以及关于矢量单元810和矢量寄存器814的更详细的内容。特别地,矢量单元810是16位宽矢量处理单元(VPU)(参见16位宽ALU 828),其执行一个或多个整数、单精度浮点、以及双精度浮点指令。VPU支持利用重排单元820对寄存器输入进行重排、利用数字转换单元822A-B进行数字转换、以及利用复制单元824对存储器输入进行复制。写掩码寄存器826允许判定结果矢量写。
具有集成的存储器控制器和图形的处理器
图9是根据本发明的实施例的处理器900的框图,处理器900可以具有多于一个的核心,可以具有集成的存储器控制器,并且可以具有集成的图形。图9中的实线框示出了具有单个核心902A、系统代理910、一个或多个总线控制器单元916的集合的处理器900,而可选的添加的虚线框示出了具有多个核心902A-N、在系统代理单元910中的一个或多个集成存储器控制器单元914的集合、和专用逻辑908的可替换的处理器900。
由此,处理器900的不同的实现可以包括:1)CPU,其具有专用逻辑908,所述专用逻辑908是集成图形和/或专门(吞吐量)逻辑(其可以包括一个或多个核心),以及核心902A-N是一个或多个通用核心(例如,通用有序核心、通用无序核心、两者的组合);2)具有核心902A-N的协处理器,其中核心902A-N是主要用于图形和/或专门(吞吐量)的大量的专用核心。3)具有核心902A-N的协处理器,其中核心902A-N是大量的通用有序核心。由此,处理器900可以是通用处理器、协处理器或专用处理器,例如,网络或通信处理器、压缩引擎、图形处理器、GPGPU(通用图形处理器单元)、高吞吐量多集成核心(MIC)协处理器(包括30或更多个核心)、嵌入式处理器等。处理器可以被实现在一个或多个芯片中。处理器900可以使用一些处理技术(例如,BiCMOS、CMOS、或NMOS)中的任何一个被实现在一个或多个衬底中,或者可以成为一个或多个衬底的部分。
存储器层次结构包括核心内的一级或多级高速缓存、共享高速缓存单元906的集合或一个或多个共享高速缓存单元906,以及耦合到集成存储器控制器单元914的集合的外部存储器(未示出)。共享高速缓存单元906的集合可以包括一个或多个中级高速缓存,例如,二级(L2)、三级(L3)、四级(L4)、或其它级别的高速缓存、最后一级的高速缓存(LLC)、和/或其组合。虽然在一个实施例中,基于环的互连单元912与集成图形逻辑908、共享高速缓存单元906的集合、以及系统代理单元910/集成存储器控制器单元914进行交互,但是可替换的实施例可以使用任何数量的公知的技术用于与这样的单元交互。在一个实施例中,在一个或多个高速缓存单元906和核心902A-N之间维持一致性。
在一些实施例中,核心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耦合到GMCH 1090。可替换地,存储器和图形控制器中的一个或两者被集成在处理器(如本文所描述的)中,存储器1040和协处理器1045直接耦合到处理器1010、以及具有IOH1050的单个芯片中的控制器集线器1020。
附加的处理器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是点对点互连系统,并且包括第一处理器1170和经由点对点互连1150耦合的第二处理器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包括P-P接口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交换信息。芯片组190可以可选地经由高性能接口1139与协处理器1138交换信息。在一个实施例中,协处理器1138是专用处理器,例如,高吞吐量MIC处理器、网络或通信处理器、压缩引擎、图形处理器、GPGPU、嵌入式处理器等。
共享高速缓存(未示出)可以被包括在两个处理器的任一个中或在两个处理器的外部,然而经由P-P互连与处理器进行连接,使得如果处理器被放在低功率模式中,则两个处理器的本地高速缓存信息或处理器中的一个的本地高速缓存信息可以被存储在共享高速缓存中。
芯片组1190可以经由接口1196耦合到第一总线1196。在一个实施例中,第一总线1116可以是外围部件互连(PCI)总线、或诸如快速PCI总线或另一第三代I/O互连总线之类的总线,但是本发明的范围不进行这样的限制。
正如在图11中示出的,各种I/O设备1114可以耦合到第一总线1116,沿着将第一总线1116耦合到第二总线1120的总线桥1118。在一个实施例中,一个或多个附加的处理器1115,(例如,协处理器、高吞吐量MIC处理器、GPGPU、加速计(例如,图形加速器或数据信号处理(DSP)单元)、现场可编程门阵列、或任何其它处理器)耦合到第一总线1116。在一个实施例中,第二总线1120可以是低引脚数(LPC)总线。在一个实施例中,各种设备可以耦合到第二总线1120,所述各种设备例如包括键盘和/或鼠标1122、通信设备1127和存储单元1128,例如,盘驱动器或可以包括指令/代码和数据1130的其它大容量存储设备。此外,音频I/O 1124可以耦合到第二总线1120。注意,其它体系结构是可能的。例如,代替图11的点对点体系结构,系统可以实现多点总线或其它这样的体系结构。
现在参考图12,示出了根据本发明的实施例的第二更具体的示例系统1200的框图。图11和图12中的类似的元件承载类似的附图标记,并且图11的某些方面从图12中被省略,以便避免使图12的其它方面难以理解。
图12示出了处理器1170、1180可以分别包括集成存储器和I/O控制逻辑(“CL”)1172和1182。由此,CL 1172和1182包括集成存储器控制器单元和包括I/O控制逻辑。图12示出的不仅是耦合到CL 1172、1182的存储器1132、1134,但是还示出了I/O设备1214还耦合到控制逻辑1172、1182。旧版I/O设备1215耦合到芯片组1190。
现在参考图13,示出了根据本发明的实施例的SoC 1300的框图。图9中的类似的元件承载类似的附图标记。同样,虚线框是更高级的SoC上可选的特征。在图13中,互连单元1302耦合到:应用处理器1310,其包括一个或多个核心902A-N的集合和共享高速缓存单元906;系统代理单元910;总线控制器单元916;集成存储器控制器单元914;一个或多个协处理器1320或协处理器1320的集合可以包括集成图形逻辑、图像处理器、音频处理器、以及视频处理器;静态随机存取存储器(SRAM)单元1330;直接存储器存取(DMA)单元1332;以及用于耦合到一个或多个外部显示器的显示单元1340。在一个实施例中,协处理器1320包括专用处理器,例如,网络或通信处理器、压缩引擎、GPGPU、高吞吐量MIC处理器、嵌入式处理器等。
本文公开的机制的实施例可以被实现在硬件、软件、固件、或这样实现的方法的组合中。本发明的实施例可以被实现为在可编程系统上执行的计算机程序或程序代码,所述可编程系统包括至少一个处理器、存储系统(包括易失性和非易失性存储器和/或存储单元)、至少一个输入设备、以及至少一个输出设备。
程序代码,例如在图11中示出的代码1130,可以被应用到输入指令,来执行本文所描述的功能以及生成输出信息。所述输出信息可以以公知的方式被应用到一个或多个输出设备。出于所述应用的目的,处理系统包括例如具有处理器的任何系统,例如,数字信号处理器(DSP)、微控制器、应用专用集成电路(ASIC)、或微处理器。
程序代码可以以高级程序或面向对象编程语言实现,以与处理系统进行通信。如果期望,程序代码还可以以汇编或机器语言实现。实际上,本文描述的机制不限于任何特定的编程语言的范围中。在任何情况中,语言可以是编译的或解释的语言。
至少一个实施例的一个或多个方面可以通过存储在机器可读介质上的表示处理器内的各种逻辑的代表性的指令实现,所述代表性的指令当由机器读取时,使所述机器制造逻辑来执行本文所描述的技术。被称作“IP核心”的这样的表示可以被存储在有形的、机器可读介质上,并且被应用到各种客户或制造设施,来加载到实际上制造逻辑或处理器的制作机器。
这样的机器可读存储介质可以包括但不限于由机器或设备制造或形成的制品的非暂时性、有形布置,包括存储介质,例如,硬盘,任何其它类型的盘,包括软盘、光盘、光盘只读存储器(CD-ROM)、可重写光盘(CD-RW),以及磁光盘、诸如只读存储器(ROM)之类的半导体设备、随机存取存储器(RAM),例如,动态随机存取存储器(DRAM)、静态随机存取存储器(SRAM)、可擦除可编程只读存储器(EPROM)、闪速存储器、电可擦除可编程只读存储器(EEPROM)、相变存储器(PCM)、磁或光卡、或用于存储电指令的任何其它类型的介质。
因此,本发明的实施例还包括包含指令或包含设计数据的非暂时性、有形机器可读介质,所述设计数据例如硬件描述语言(HDL),其定义了本文描述的结构、电路、装置、处理器、和/或系统特征。这样的实施例还可以被称为程序产品。
虽然某些示例实施例被描述并且在附图中示出,但是应当理解的是这样的实施例仅仅是举例示出性的,并且不在广泛的发明上被限制,并且所述发明并不被限制为所示出和描述的特定结构和布置,因为各种其它修改对于本领域的普通技术人员而言在学习本公开时可以发生。在诸如这样的技术领域中,发展是快速的并且进一步的进步不易于预见,所以所公开的实施例由于技术进步而利于在布置和细节上轻易地做出改进,而不偏离本公开的主旨或随附权利要求书的范围。

Claims (20)

1.一种装置,包括:
多个矢量寄存器,其包括第一矢量寄存器、第二矢量寄存器、以及第三矢量寄存器;
掩码寄存器,以及
耦合到所述多个矢量寄存器和所述掩码寄存器的执行电路,所述执行电路能够操作用于:
接收矢量归约指令来在所述第一矢量寄存器的数据元素上执行相关联的归约操作;以及
基于所述掩码寄存器的值和正被处理的当前元素位置,顺序地将所述第一矢量寄存器的一个或多个数据元素设置为由被应用于所述第一矢量寄存器的之前的数据元素和所述第三矢量寄存器的数据元素二者的所述相关联的归约操作生成的结果,其中,所述之前的数据元素所处的位置与所述当前元素位置相距超过一个元素位置。
2.如权利要求1所述的装置,其中,当所述当前元素位置中的掩码值为假时,则取决于所述当前元素位置所述执行电路进一步能够操作用于将所述第一矢量寄存器的所述当前元素位置中的数据元素设置为所述第二矢量寄存器的所述当前元素位置中的数据元素,或保持所述第一矢量寄存器的所述当前元素位置中的数据元素不改变。
3.如权利要求1所述的装置,其中,当所述当前元素位置中的掩码值为真时,则所述执行电路进一步能够操作用于将所述第一矢量寄存器的所述当前元素位置中的数据元素设置为所述结果。
4.如权利要求1所述的装置,其中,所述矢量归约指令指定源操作数,所述源操作数进一步指定所述之前的数据元素和所述当前数据元素位置之间的步幅距离。
5.如权利要求4所述的装置,其中,所述第一矢量寄存器的之前的数据元素位于以下位置处:所述当前元素位置减去所述步幅距离再对所述第一矢量寄存器的矢量长度取模。
6.如权利要求1所述的装置,其中,响应于指定了比所述第一矢量寄存器的矢量长度更大的步幅距离的所述矢量归约指令,所述执行电路能够操作用于并行地在所述第一矢量寄存器的数据元素上执行所述相关联的归约操作。
7.如权利要求1所述的装置,其中,所述相关联的归约操作包括以下中的一个:加、乘、按位AND、按位OR、MIN或MAX。
8.一种方法,包括:
由执行电路接收矢量归约指令来在第一矢量寄存器的数据元素上执行相关联的归约操作;以及
基于掩码寄存器的值和正被处理的当前元素位置,顺序地将所述第一矢量寄存器的一个或多个数据元素设置为由被应用于所述第一矢量寄存器的之前的数据元素和第三矢量寄存器的数据元素二者的所述相关联的归约操作生成的结果,其中,所述之前的数据元素所处的位置与所述当前元素位置相距超过一个元素位置。
9.如权利要求8所述的方法,其中,当所述当前元素位置中的掩码值为假时,则所述方法进一步包括:取决于所述当前元素位置,将所述第一矢量寄存器的所述当前元素位置中的数据元素设置为第二矢量寄存器的所述当前元素位置中的数据元素,或保持所述第一矢量寄存器的所述当前元素位置中的数据元素不改变。
10.如权利要求8所述的方法,其中,当所述当前元素位置中的掩码值为真时,则所述方法进一步包括:将所述第一矢量寄存器的所述当前元素位置中的数据元素设置为所述结果。
11.如权利要求8所述的方法,其中,所述矢量归约指令指定源操作数,所述源操作数进一步指定所述之前的数据元素和所述当前数据元素位置之间的步幅距离。
12.如权利要求11所述的方法,其中,所述第一矢量寄存器的之前的数据元素位于以下位置处:所述当前元素位置减去所述步幅距离再对所述第一矢量寄存器的矢量长度取模。
13.如权利要求11所述的方法,进一步包括:响应于指定了比所述第一矢量寄存器的矢量长度更大的步幅距离的所述矢量归约指令,并行地在所述第一矢量寄存器的数据元素上执行所述相关联的归约操作。
14.如权利要求11所述的方法,其中,所述第一矢量寄存器存储被以环绕方式左移了所述步幅距离的矢量,以及第二寄存器存储被以无环绕方式左移了所述步幅距离的矢量。
15.如权利要求8所述的方法,其中,所述相关联的归约操作包括以下中的一个:加、乘、按位AND、按位OR、MIN或MAX。
16.一种系统,包括:
存储器;以及
耦合到所述存储器的处理器,所述处理器包括:
多个矢量寄存器,其包括第一矢量寄存器、第二矢量寄存器、以及第三矢量寄存器;
掩码寄存器,以及
耦合到所述多个矢量寄存器和所述掩码寄存器的执行电路,所述执行电路能够操作用于:
接收矢量归约指令来在所述第一矢量寄存器的数据元素上执行相关联的归约操作;以及
基于所述掩码寄存器的值和正被处理的当前元素位置,顺序地将所述第一矢量寄存器的一个或多个数据元素设置为由被应用于所述第一矢量寄存器的之前的数据元素和所述第三矢量寄存器的数据元素二者的所述相关联的归约操作生成的结果,其中,所述之前的数据元素所处的位置与所述当前元素位置相距超过一个元素位置。
17.如权利要求16所述的系统,其中,当所述当前元素位置中的掩码值为假时,则取决于所述当前元素位置所述执行电路进一步能够操作用于将所述第一矢量寄存器的所述当前元素位置中的数据元素设置为所述第二矢量寄存器的所述当前元素位置中的数据元素,或保持所述第一矢量寄存器的所述当前元素位置中的数据元素不改变。
18.如权利要求16所述的系统,其中,当所述当前元素位置中的掩码值为真时,所述执行电路进一步能够操作用于将所述第一矢量寄存器的所述当前元素位置中的数据元素设置为所述结果。
19.如权利要求16所述的系统,其中,所述矢量归约指令指定源操作数,所述源操作数进一步指定所述之前的数据元素和所述当前数据元素位置之间的步幅距离。
20.如权利要求16所述的系统,其中,所述相关联的归约操作包括以下中的一个:加、乘、按位AND、按位OR、MIN或MAX。
CN201280077375.7A 2012-12-28 2012-12-28 用于减少具有步幅式访问模式的向量寄存器中的元素的指令 Active CN104813279B (zh)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/US2012/072119 WO2014105057A1 (en) 2012-12-28 2012-12-28 Instruction to reduce elements in a vector register with strided access pattern

Publications (2)

Publication Number Publication Date
CN104813279A true CN104813279A (zh) 2015-07-29
CN104813279B CN104813279B (zh) 2018-12-18

Family

ID=51018671

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201280077375.7A Active CN104813279B (zh) 2012-12-28 2012-12-28 用于减少具有步幅式访问模式的向量寄存器中的元素的指令

Country Status (5)

Country Link
US (1) US9921832B2 (zh)
KR (1) KR101772299B1 (zh)
CN (1) CN104813279B (zh)
DE (1) DE112012007088B4 (zh)
WO (1) WO2014105057A1 (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
TWI673648B (zh) * 2017-04-03 2019-10-01 美商谷歌有限責任公司 向量縮減處理器

Families Citing this family (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9851970B2 (en) * 2014-12-23 2017-12-26 Intel Corporation Method and apparatus for performing reduction operations on a set of vector elements
US10360163B2 (en) 2016-10-27 2019-07-23 Google Llc Exploiting input data sparsity in neural network compute units
US9959498B1 (en) 2016-10-27 2018-05-01 Google Llc Neural network instruction set architecture
US10175980B2 (en) 2016-10-27 2019-01-08 Google Llc Neural network compute tile
US10884750B2 (en) * 2017-02-28 2021-01-05 Intel Corporation Strideshift instruction for transposing bits inside vector register
US11436010B2 (en) 2017-06-30 2022-09-06 Intel Corporation Method and apparatus for vectorizing indirect update loops
US11294670B2 (en) * 2019-03-27 2022-04-05 Intel Corporation Method and apparatus for performing reduction operations on a plurality of associated data element values
CN112083954A (zh) * 2019-06-13 2020-12-15 华夏芯(北京)通用处理器技术有限公司 一种gpu中显式独立掩码寄存器的掩码操作方法
US20240004647A1 (en) * 2022-07-01 2024-01-04 Andes Technology Corporation Vector processor with vector and element reduction method
US20240004662A1 (en) * 2022-07-02 2024-01-04 Intel Corporation Instructions and support for horizontal reductions

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5727229A (en) * 1996-02-05 1998-03-10 Motorola, Inc. Method and apparatus for moving data in a parallel processor
US20040044882A1 (en) * 2002-08-29 2004-03-04 International Business Machines Corporation selective bypassing of a multi-port register file
CN101398753A (zh) * 2007-09-27 2009-04-01 辉达公司 用于执行扫描运算的系统、方法及计算机程序产品
CN101436121A (zh) * 2007-11-15 2009-05-20 辉达公司 用于使用并行处理器架构执行扫描操作的方法及设备
US20100049950A1 (en) * 2008-08-15 2010-02-25 Apple Inc. Running-sum instructions for processing vectors

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
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
GB2410348B (en) * 2002-11-18 2005-12-07 Advanced Risc Mach Ltd Exception types within a secure processing system
US8271832B2 (en) 2008-08-15 2012-09-18 Apple Inc. Non-faulting and first-faulting instructions for processing vectors
US8458539B2 (en) 2010-06-24 2013-06-04 Intel Corporation G-ODLAT on-die logic analyzer trigger with parallel vector finite state machine

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5727229A (en) * 1996-02-05 1998-03-10 Motorola, Inc. Method and apparatus for moving data in a parallel processor
US20040044882A1 (en) * 2002-08-29 2004-03-04 International Business Machines Corporation selective bypassing of a multi-port register file
CN101398753A (zh) * 2007-09-27 2009-04-01 辉达公司 用于执行扫描运算的系统、方法及计算机程序产品
CN101436121A (zh) * 2007-11-15 2009-05-20 辉达公司 用于使用并行处理器架构执行扫描操作的方法及设备
US20100049950A1 (en) * 2008-08-15 2010-02-25 Apple Inc. Running-sum instructions for processing vectors

Cited By (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
TWI673648B (zh) * 2017-04-03 2019-10-01 美商谷歌有限責任公司 向量縮減處理器
US10706007B2 (en) 2017-04-03 2020-07-07 Google Llc Vector reduction processor
US11061854B2 (en) 2017-04-03 2021-07-13 Google Llc Vector reduction processor
TWI738042B (zh) * 2017-04-03 2021-09-01 美商谷歌有限責任公司 由向量縮減電路執行之方法
TWI791262B (zh) * 2017-04-03 2023-02-01 美商谷歌有限責任公司 矩陣向量處理系統及用於執行向量縮減之方法
TWI828502B (zh) * 2017-04-03 2024-01-01 美商谷歌有限責任公司 矩陣向量處理系統及用於執行向量縮減之方法
US11940946B2 (en) 2017-04-03 2024-03-26 Google Llc Vector reduction processor

Also Published As

Publication number Publication date
KR20150074079A (ko) 2015-07-01
DE112012007088T5 (de) 2015-07-16
CN104813279B (zh) 2018-12-18
US9921832B2 (en) 2018-03-20
US20140189288A1 (en) 2014-07-03
WO2014105057A1 (en) 2014-07-03
KR101772299B1 (ko) 2017-08-28
DE112012007088B4 (de) 2024-04-25

Similar Documents

Publication Publication Date Title
JP6373425B2 (ja) 複数のビットを左にシフトし、複数の1を複数の下位ビットにプルインするための命令
JP5987233B2 (ja) 装置、方法、およびシステム
CN108292215B (zh) 用于加载-索引和预取-聚集操作的指令和逻辑
CN108369509B (zh) 用于基于通道的跨步分散操作的指令和逻辑
KR101703743B1 (ko) 가속된 레인 간 벡터 감축 명령어들
CN104813279A (zh) 用于减少具有步幅式访问模式的向量寄存器中的元素的指令
JP6340097B2 (ja) リードマスク及びライトマスクにより制御されるベクトル移動命令
CN108369516B (zh) 用于加载-索引和预取-分散操作的指令和逻辑
US11138008B2 (en) Apparatus and method for loop flattening and reduction in a single instruction multiple data (SIMD) pipeline
KR101966713B1 (ko) 마스크 레지스터에서의 비트들을 반전 및 치환하기 위한 장치 및 방법
KR20190114745A (ko) 체인화된 타일 연산들을 구현하기 위한 시스템들 및 방법들
JP2014199663A (ja) マスクされたフルレジスタアクセスを用いて部分レジスタアクセスを実施するプロセッサ、方法、及びシステム
JP5806748B2 (ja) 書き込みマスク・レジスタの末尾の最下位マスキング・ビットを判定するためのシステム、装置、および方法
JP2018502364A (ja) 実行のためのデータ要素の読み込みにおいて空間的局所性を考慮する装置および方法
JP2018500659A (ja) 高速ベクトルによる動的なメモリ競合検出
CN109416635B (zh) 针对使用多个架构寄存器的指令的架构寄存器替换
KR101635856B1 (ko) 데이터 요소에 있는 비트들의 제로화를 위한 시스템, 장치, 및 방법
CN112579160A (zh) 用于具有减少的硬件要求的存储配对的装置和方法

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
EXSB Decision made by sipo to initiate substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant