由读和写掩码控制的向量移动指令的制作方法

文档序号:8287846阅读:487来源:国知局
由读和写掩码控制的向量移动指令的制作方法
【技术领域】
[0001] 本公开涉及处理逻辑、微处理器以及相关联的指令集架构的领域,该指令集架构 在被处理器或其他处理逻辑所执行时运行逻辑、数学或其他功能性操作。
【背景技术】
[0002] 指令集或指令集架构(ISA)是计算机架构中与编程有关的部分,并且可包括原生 数据类型、指令、寄存器架构、寻址模式、存储器架构、中断和异常处理、以及外部输入和输 出(I/O)。术语指令在本申请中一般表示宏指令--宏指令是被提供给处理器(或指令转 换器,该指令转换器(例如利用静态二进制转换、包括动态编译的动态二进制转换)转换、 变形、仿真或以其他方式将指令转换成将由处理器处理的一个或多个其他指令)以供执行 的指令--作为对比,微指令或微操作(微ops)是处理器的解码器解码宏指令的结果。
[0003] ISA与微架构不同,微架构是实现该指令集的处理器的内部设计。具有不同微架构 的处理器可共享共同的指令集。例如,丨ntel?酷睿(Core?)处理器、以及来自加利福尼亚 州桑尼威尔(Sunnyvale)的超微半导体有限公司(Advanced Micro Devices, Inc.)的诸多 处理器执行几乎相同版本的x86指令集(在更新的版本中加入了一些扩展),但具有不同的 内部设计。例如,可利用公知技术(包括专用物理寄存器、利用寄存器重命名机制的一个或 多个动态分配的物理寄存器)在不同微架构中以不同方式实现该ISA的同一寄存器架构。
[0004] 许多现代ISA支持单指令多数据(SIMD)操作。取代仅对一个或两个数据元素进 行操作的标量指令,向量指令(也称为紧缩数据指令或SIMD指令)可同时或并行地对多个 数据元素或多对数据元素进行操作。处理器可具有并行的执行硬件,以响应于该向量指令 同时或并行地执行多个操作。SIMD操作在一个操作中对紧缩在一个向量寄存器或存储器位 置之内的多个数据元素进行操作。这些数据元素被称为紧缩数据或向量数据。向量元素中 的每一个可表示独立的单条数据(例如像素的颜色,等等),可单独或与其它数据无关地操 作该单条数据。
[0005] 在一些情况下,SMD操作可以以递归方式对独立向量数据元素进行操作,其中对 于不同数据元素,迭代的数量不同。因此,一些数据元素的计算可能完成,而一些其它数据 元素仍需要更多迭代。递归计算的一个示例是WHILE循环操作。在本示例中,在条件(X[i]) 为真(满足)时,对N元素的数组X[i](i = 0,...,N-1)进行递归计算。当条件(X[i])变 为假时,X[i]的计算停止。该条件的示例可以是X[i]>〇。
[0006] for(i = 0 ;i<N ;i++) {
[0007] while (条件(X[i])) {
[0008] X[i]=计算(X[i]) ;}}
[0009] 如果对于X[i]的不同数据元素,WHILE循环迭代的数量不同,则以上计算无法被 轻易向量化。一种可能的方法是用处理器在不满足条件的那些元素上执行计算,然后丢弃 从这些元素导出的结果。然而,该方法具有低效率,因为处理器不仅在这些元素上执行不必 要的计算,而且还无法利用由这些元素占据的向量寄存器槽口。
【附图说明】
[0010] 在附图中的诸个图中通过示例而非限制地示出各个实施例:
[0011] 图1是根据一个实施例的包括向量寄存器和掩码寄存器的指令处理装置的框图。
[0012] 图2是根据一个实施例的寄存器架构的框图。
[0013] 图3示出根据一个实施例的向量操作序列的示例。
[0014] 图4A示出根据一个实施例的使处理器在向量寄存器和掩码寄存器上执行操作的 指令的伪代码示例。
[0015] 图4B示出根据一个实施例的使用图4A的指令的代码段示例。
[0016] 图5A是根据一个实施例的示出响应于使用掩码更新指令和向量移动指令的代码 段而执行的操作的流程图。
[0017] 图5B是示出根据一个实施例的响应于掩码更新指令而执行的操作的流程图。
[0018] 图5C是示出根据一个实施例的响应于向量移动指令而执行的操作的流程图。
[0019] 图6是示出根据一个实施例的使用软件指令转换器将源指令集中的二进制指令 转换成目标指令集中的二进制指令的框图。
[0020] 图7A是根据一个实施例的有序和无序流水线的框图。
[0021] 图7B是根据一个实施例的有序和无序核的框图。
[0022] 图8A-B是根据一个实施例的更具体的示例性有序核架构的框图。
[0023] 图9是根据一个实施例的处理器的框图。
[0024] 图10是根据一个实施例的系统的框图。
[0025] 图11是根据一个实施例的第二系统的框图。
[0026] 图12是根据本发明的实施例的第三系统的框图。
[0027] 图13是根据一个实施例的芯片上系统(SoC)的框图。
【具体实施方式】
[0028] 在以下描述中,陈述了多个具体细节。然而,应当理解的是,可不通过这些具体细 节来实施本发明的实施例。在其它实例中,未详细示出公知的电路、结构以及技术,以免模 糊对本描述的理解。
[0029] 本文所述的实施例提供用于提高独立数据元素上的递归向量计算的效率的指令。 这些指令利用一对向量寄存器和一对掩码寄存器来执行递归向量计算,其中第一向量寄存 器充当用于累加向量计算结果的累加器,并且第二向量寄存器提供新的数据元素以填充第 一向量寄存器的未利用槽口(未使用或已完成的数据元素位置)。掩码寄存器用于指示相 应向量寄存器中的哪些数据元素需要进一步的计算。
[0030] 在一个实施例中,第一向量寄存器(即累加器)累加输入数据元素,直到寄存器被 完整向量填满。然后,处理器使用非掩码(即,密集)向量操作在这些数据元素上执行计算。 在计算之后,累加器中的一些元素(对于这些元素,完成了计算)可以被发送回储存器或其 它存储位置,而其它元素(对于这些元素,未完成计算)可以被保持在累加器中用于附加数 量的迭代。累加器中已完成计算的数据元素位置可以由还需要相同递归计算的新数据元素 所利用。
[0031] 本文描述两个指令RWMASKUPDATE和SPARSEM0V。这些指令在许多情况下提高向 量化的效率。例如,在一种情况下,输入数据元素可能来自一个或多个稀疏向量数据集,每 个稀疏向量数据集不具有足以填满整个累加器(即,第一向量寄存器)的元素。此外,来自 不同数据集的输入数据元素在计算中可能需要不同数量的迭代。因此,由于无需更多计算 的那些数据元素,在累加器中剩余未利用的槽口。本文所述的指令允许这些未利用的槽口 被有用的元素填充,从而实现在完整向量上的递归计算。如在以下进一步细节中所述的, SPARSEM0V指令是将有用的数据元素(即需要计算的数据元素)从第二向量寄存器移动到 累加器中的向量移动指令。RWMASKUPDATE指令更新读掩码寄存器(与第二向量寄存器相关 联)和写掩码寄存器(与累加器相关联)以标识在这两个向量寄存器中的有用数据元素的 位置。
[0032] 与SPARSEM0V相结合地使用RWMASKUPDATE可以降低递归计算中所需指令的总数, 并且简化上溢和下溢情形,在上溢和下溢情形中第二向量寄存器中有用数据元素(即,源 数据元素)的数量不与第一向量寄存器中未利用槽口(即,目标位置)的数量相匹配。经 更新的读和写掩码用于控制两个向量寄存器之间的数据移动;具体而言,写掩码位〇用于 标识累加器中的目标位置;并且读掩码位1用于标识第二向量寄存器中的源数据元素。使 用反转的写掩码位来标识目标位置简化稀疏和递归计算的向量化中的数据累加。
[0033] 图1是指令处理装置115的实施例的框图,该指令处理装置具有执行单元140,该 执行单元包括可操作用于执行指令(包括RWMASKUPDATE和SPARSEM0V指令)的电路。在 一些实施例中,指令处理装置115可以是处理器、多核处理器的处理器核、或者电子系统中 的处理元件。
[0034] 解码器130接收高级机器指令或宏指令形式的传入指令,并且解码所述指令以生 成低级微操作、微代码进入点、微指令或其他低级指令或控制信号,它们反映了原始的高级 指令和/或从原始的高级指令导出。低级指令或控制信号可通过低级(例如,电路级或硬 件级)操作来实现高级指令的操作。可使用各种不同的机制来实现解码器130。合适机制 的示例包括但不限于,微代码、查找表、硬件实现、可编程逻辑阵列(PLA)、用于实现本领域 已知的解码器的其他机制等。
[0035] 解码器130可接收针对高速缓存110、存储器120或其他源的传入指令。经解码的 指令被发送到执行单元140。执行单元140可从解码器130接收一个或多个微操作、微代码 进入点、微指令、其它指令或其它控制信号,它们反映了所接收的指令或者是从所接收的指 令导出的。执行单元140从寄存器组170、高速缓存110和/或存储器120接收数据输入并 向它们生成数据输出。
[0036] 在一个实施例中,寄存器组170包括架构寄存器,架构寄存器也被称为寄存器。短 语架构寄存器、寄存器组、以及寄存器在本文中用于表示对软件和/或编程器可见(例如, 软件可见的)和/或由宏指令指定来标识操作数的寄存器,除非另外予以规定或清楚明显 可知。这些寄存器不同于给定微架构中的其他非架构式寄存器(例如,临时寄存器、重排序 缓冲器、引退寄存器等)。
[0037] 为了避免混淆描述,已示出和描述了相对简单的指令处理装置115。应当理解,其 他实施例可具有超过一个执行单元。例如,装置115可包括多个不同类型的执行单元,诸如 例如算术单元、算术逻辑单元(ALU)、整数单元、浮点单元等。指令处理装置或处理器的再 其他实施例可具有多个核、逻辑处理器或执行引擎。稍后将参考图7-13提供指令处理装置 115的多个实施例。
[0038] 根据一个实施例,寄存器组170包括一组向量寄存器175和一组掩码寄存器185, 两者存储RWMASKUPDATE和SPARSEM0V指令的操作数。每个向量寄存器175可以是512位、 256位、或128位宽,或者可以使用不同的向量宽度。每个掩码寄存器185包含多个掩码位, 每个掩码位对应于向量寄存器175之一的一个数据兀素。由于每个掩码位用于掩码向量寄 存器的数据元素,64位掩码寄存器可以用于掩码512位寄存器的六十四个8位数据元素。 对于具有不同宽度(例如256位或128位)的向量寄存器和不同尺寸(例如16位、32位或 64位)数据元素,可以结合向量操作,使用不同数量的掩码位。
[0039] 图2示出了支持本文描述的指令的底层寄存器架构200的实施例。寄存器架构200 基于丨ntel?酷睿(Core?)处理器,该处理器实现包括x86、MMX?、流SMD扩展(SSE)、SSE2、 SSE3、SSE4. 1和SSE4. 2指令的指令集,以及SIMD扩展的附加集,该附加集被称为高级向量 扩展(AVX) (AVX1、和AVX2)。然而,应理解,也可使用支持不同寄存器长度、不同寄存器类型 和/或不同数量的寄存器的不同的寄存器架构。
[0040] 在所示的实施例中,存在512位宽的32个向量寄存器210 ;这些寄存器被称为 zmmO至zmm31。低位16个zmm寄存器的低阶256位覆盖在寄存器ymm〇-16上。低位16个 zmm寄存器的低阶128位(ymm寄存器的低阶128位)覆盖在寄存器xmmO-15上。在所示实 施例中,存在8个掩码寄存器220 (k0到k7),每个掩码寄存器的长度为64位。在一替代实 施例中,掩码寄存器220的宽度是16位。
[0041] 在所示实施例中,寄存器架构200进一步包括16个64位通用(GP)寄存器230。 在一实施例中,上述通用寄存器沿循现有x86寻址模式被使用以对存储器操作数寻址。该 实施例还示出RFLAGS寄存器260、RIP寄存器270和MXCSR寄存器280。
[0042]
当前第1页1 2 3 4 5 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1