CN106030514B - 用于执行采用传播的被屏蔽源元素存储指令的处理器及其方法 - Google Patents

用于执行采用传播的被屏蔽源元素存储指令的处理器及其方法 Download PDF

Info

Publication number
CN106030514B
CN106030514B CN201480076434.8A CN201480076434A CN106030514B CN 106030514 B CN106030514 B CN 106030514B CN 201480076434 A CN201480076434 A CN 201480076434A CN 106030514 B CN106030514 B CN 106030514B
Authority
CN
China
Prior art keywords
result
operand
source
instruction
elements
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
Application number
CN201480076434.8A
Other languages
English (en)
Other versions
CN106030514A (zh
Inventor
M.普罗特尼科夫
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 CN106030514A publication Critical patent/CN106030514A/zh
Application granted granted Critical
Publication of CN106030514B publication Critical patent/CN106030514B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

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/30145Instruction analysis, e.g. decoding, instruction word fields
    • G06F9/3016Decoding the operand specifier, e.g. specifier format
    • 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/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30032Movement instructions, e.g. MOVE, SHIFT, ROTATE, SHUFFLE
    • 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

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架构中,多个数据元素可作为打包数据(packed data)或向量数据被打包在一个寄存器或存储器位置中。在打包数据中,寄存器或另一存储位置的位可在逻辑上划分为数据元素序列。例如,128位宽打包数据寄存器可具有两个64位宽数据元素、四个32位数据元素、八个16位数据元素等。数据元素的每个可表示单独的个体数据片(例如像素颜色等),其可与其他数据片分开和/或无关地操作。
SIMD或打包数据指令可用来对多个打包数据元素并发和/或并行地进行操作。一种已知类型的SIMD指令是广播指令。一些广播指令可使处理器向结果打包数据的全部数据元素位置广播例如源寄存器或存储器位置中的单个数据元素或值。其他广播指令还指定和使用写屏蔽。这类广播指令可使处理器向结果打包数据的全部未屏蔽数据元素位置广播例如源寄存器或存储器位置中的单个数据元素或值。结果打包数据的被屏蔽数据元素位置可调零或者保持不变。
发明内容
一方面,本公开提供一种处理器,包括:用于对指令进行解码的解码单元,所述指令用于指示包括第一批多个数据元素的第一源打包数据操作数、用于指示包括多个屏蔽元素的源屏蔽以及用于指示目的地存储位置;以及与所述解码单元耦合的执行单元,所述执行单元响应所述指令而用于将结果打包数据操作数存储在所述目的地存储位置中,所述结果打包数据操作数具有:与所述源屏蔽的未屏蔽的屏蔽元素对应的至少两个未屏蔽结果数据元素,所述未屏蔽结果数据元素的每个具有所述第一源打包数据操作数的相同相对位位置中的对应数据元素的值;以及每个最接近的一对未屏蔽结果数据元素之间的所有被屏蔽结果数据元素具有与所述一对未屏蔽结果数据元素的最靠近所述结果打包数据操作数的第一端的未屏蔽结果数据元素相同的值,所述被屏蔽结果数据元素对应于所述源屏蔽的被屏蔽的屏蔽元素,其中所述第一端是所述结果打包数据操作数的最高阶端。
另一方面,本公开提供一种处理器,包括:解码单元,所述解码单元用于对指令进行解码,所述指令用于指示包括第一批多个数据元素的第一源打包数据操作数、用于指示包括最低阶数据元素和最高阶数据元素的第二源打包数据操作数、用于指示包括多个屏蔽元素的源屏蔽,以及用于指示目的地存储位置,以及与所述解码单元耦合的执行单元,所述执行单元响应所述指令而用于将结果打包数据操作数存储在所述目的地存储位置中,所述结果打包数据操作数具有:与所述源屏蔽的未屏蔽的屏蔽元素对应的至少两个未屏蔽结果数据元素,所述未屏蔽结果数据元素的每个具有所述第一源打包数据操作数的相同相对位位置中的对应数据元素的值;以及每个最接近的一对未屏蔽结果数据元素之间的所有被屏蔽结果数据元素具有与所述一对未屏蔽结果数据元素的最靠近所述结果打包数据操作数的第一端的未屏蔽结果数据元素相同的值,所述被屏蔽结果数据元素对应于所述源屏蔽的被屏蔽的屏蔽元素,
所述第一端和最接近所述第一端的第一未屏蔽结果数据元素之间的至少一个被屏蔽结果数据元素的第一集合,所述第一集合的每个被屏蔽结果数据元素具有与所述第二源打包数据操作数的最高阶数据元素或者最低阶数据元素相同的值。
再一方面,本公开提供一种在处理器中的方法,包括:接收指令,所述指令指示包括第一批多个数据元素的第一源打包数据操作数、指示包括多个屏蔽元素的源屏蔽并且指示目的地存储位置;以及响应所述指令而将结果打包数据操作数存储在所述目的地存储位置中,所述结果打包数据操作数包括:与所述源屏蔽的未屏蔽的屏蔽元素对应的至少两个未屏蔽结果数据元素,所述未屏蔽结果数据元素的每个具有所述第一源打包数据操作数的相同相对位位置中的对应数据元素的值;以及每个最接近的一对未屏蔽结果数据元素之间的所有被屏蔽结果数据元素具有与所述一对未屏蔽结果数据元素的最靠近所述结果打包数据操作数的第一端的未屏蔽结果数据元素相同的值,所述被屏蔽结果数据元素对应于所述源屏蔽的被屏蔽的屏蔽元素,其中所述第一端是所述结果打包数据操作数的最高阶端。
再一方面,本公开提供一种处理指令的系统,包括:互连;与所述互连耦合的处理器,所述处理器响应指示包括第一批多个数据元素的第一源打包数据操作数、指示包括多个屏蔽元素的源屏蔽以及指示目的地存储位置的指令可操作以将结果打包数据操作数存储在所述目的地存储位置中,所述结果打包数据操作数包括:与所述源屏蔽的未屏蔽的屏蔽元素对应的至少两个未屏蔽结果数据元素,所述未屏蔽结果数据元素的每个具有所述第一源打包数据操作数的相同相对位位置中的对应数据元素的值;以及每个最接近的一对未屏蔽结果数据元素之间的所有被屏蔽结果数据元素具有与所述一对未屏蔽结果数据元素的最靠近所述结果打包数据操作数的第一端的未屏蔽结果数据元素相同的值,所述被屏蔽结果数据元素对应于所述源屏蔽的被屏蔽的屏蔽元素,其中所述第一端是所述结果打包数据操作数的最高阶端;以及与所述互连耦合的动态随机存取存储器DRAM,所述DRAM存储指令集,以便对于对基于多个条件所修改的标量值执行计算的循环进行向量化,所述指令集在由所述处理器运行时可操作以使所述处理器执行操作,包括:评估所述多个条件;使所述多个的屏蔽元素对于被评估为真的条件成为未屏蔽的;使所述多个的屏蔽元素对于被评估为假的条件成为被屏蔽的;以及对所述结果打包数据操作数并行地执行所述计算。
附图说明
通过参照用来示出实施例的以下描述和附图,可以最透彻地了解本发明。附图包括:
图1是可操作以执行采用传播的被屏蔽对应源元素存储指令的实施例的处理器的一实施例的框图。
图2是执行采用传播的被屏蔽对应源元素存储指令的实施例的方法的一实施例的流程框图。
图3是将最低阶源元素存储到最低阶被屏蔽结果数据元素的采用传播的被屏蔽对应源元素存储操作的一实施例的框图。
图4是将最高阶源元素存储到最低阶被屏蔽结果数据元素的采用传播的被屏蔽对应源元素存储操作的一实施例的框图。
图5是使最低阶被屏蔽结果数据元素保持不变的采用传播的被屏蔽对应源元素存储操作的一实施例的框图。
图6是将最低阶源元素存储到最低阶被屏蔽结果数据元素的采用传播的反向被屏蔽对应源元素存储操作的一实施例的框图。
图7是打包数据寄存器的适当集合的示例实施例的框图。
图8是示出屏蔽位的数量可取决于打包数据宽度和数据元素宽度的表。
图9是打包数据操作屏蔽寄存器组的一实施例的框图。
图10A-10B是示出按照本发明的实施例的通用向量友好指令格式及其指令模板的框图。
图11A是示出按照本发明的实施例的示范特定向量友好指令格式的框图。
图11B是示出按照本发明的一个实施例、组成全操作码字段的特定向量友好指令格式的字段的框图。
图11C是示出按照本发明的一个实施例、组成寄存器索引字段的特定向量友好指令格式的字段的框图。
图11D是示出按照本发明的一个实施例、组成扩充操作字段的特定向量友好指令格式的字段的框图。
图12是按照本发明的一个实施例的寄存器架构的框图。
图13A是示出按照本发明的实施例、示范有序管线和示范寄存器重命名、无序发出/ 执行管线的框图。
图13B示出包括耦合到执行引擎单元前端单元(二者均耦合到存储器单元)的处理器核心。
图14A是按照本发明的实施例、单个处理器核心连同其到晶片(die)上互连网络的连接以及连同其第2级(L2)高速缓存的本地子集的框图。
图14B是按照本发明的实施例、图14A中的处理器核心的部分的展开图。
图15是按照本发明的实施例、可具有一个以上核心、可具有集成存储器控制器并且可具有集成图形的处理器的框图。
图16是按照本发明的一个实施例的系统的框图。
图17是按照本发明的一实施例的第一更具体示范系统的框图。
图18是按照本发明的一实施例的第二更具体示范系统的框图。
图19是按照本发明的一实施例的SoC的框图。
图20是按照本发明的实施例、与软件指令转换器用来将源指令集中的二进制指令转换成目标指令集中的二进制指令相对照的框图。
具体实施方式
本文所公开的是采用到被屏蔽结果元素的传播将源元素存储到对应未屏蔽结果元素的采用传播的被屏蔽源元素存储指令、运行指令的处理器、由处理器在处理或运行指令时执行的方法以及结合一个或多个处理器以处理或运行指令的系统。在以下描述中,提出许多具体细节(例如具体指令操作、数据格式、处理器配置、微架构细节、操作序列等)。但是,即使没有这些具体细节也可实施实施例。在其他情况下,没有详细示出众所周知的电路、结构和技术,以免影响对本描述的理解。
图1是可操作以执行采用传播的被屏蔽源元素存储指令102的实施例的处理器100的一实施例的框图。在一些实施例中,处理器可以是通用处理器(例如常用于台式、膝上型或其他计算机中的类型的通用微处理器)。备选地,处理器可以是专用处理器。适当专用处理器的示例包括但不限于网络处理器、通信处理器、密码处理器、图形处理器、协处理器、嵌入式处理器、数字信号处理器(DSP)和控制器(例如微控制器),这里只列举几个示例。处理器可以是各种复合指令集计算(CISC)处理器、各种简化指令集计算(RISC)处理器、各种超长指令字(VLIW)处理器、它们的各种混合或者其他类型的处理器中的任一个。
在操作期间,处理器100可接收采用传播的被屏蔽源元件存储指令102的实施例。例如,指令可从指令取单元、指令队列等接收。指令可表示宏指令、汇编语言指令、机器代码指令或者处理器的指令集的另一指令或控制信号。在一些实施例中,指令可显式指定(例如经过一个或多个字段或者位集合)或者以其他方式指示(例如隐式指示、经过模拟寄存器映射来映射到那个寄存器等)具有多个数据元素的第一源打包数据操作数110,在一些实施例中可指定或者以其他方式指示具有至少一个值的可选第二源(例如打包数据)操作数112,可指定或者以其他方式指示源屏蔽116(例如在打包数据操作屏蔽寄存器118中),以及可指定或者以其他方式指示将要存储结果打包数据操作数114的目的地存储位置。
再次参照图1,处理器包括解码单元或解码器104。解码单元可对采用传播的被屏蔽源元素存储指令102进行接收和解码。解码单元可输出一个或多个微指令、微操作、微码输入点、解码指令或控制信号或者反映、表示指令102和/或从指令102所得出的其他较低级指令或控制信号。一个或多个低级指令或控制信号可经过一个或多个低级(例如电路级或硬件级)操作来实现高级指令102。在一些实施例中,解码单元可包括:一个或多个输入结构(例如(一个或多个)端口、(一个或多个)互连、接口等),接收指令;指令识别和解码逻辑,与输入结构耦合,以接收、识别指令并且将指令解码为一个或多个对应低级指令或控制信号;以及一个或多个输出结构(例如(一个或多个)端口、(一个或多个)互连、接口等),与指令识别和解码逻辑耦合,以输出一个或多个对应低级指令或控制信号。解码单元可使用各种不同机制来实现,包括但不限于微码只读存储器(ROM)、查找表、硬件实现、可编程逻辑阵列(PLA)和本领域已知的其他机制。
在一些实施例中,指令102不是直接提供给解码单元,而是可选地可使用指令模拟器、转化器、变形器、解释器或其他指令转换模块。各种不同类型的指令转换模块是本领域已知的,并且可通过软件、硬件、固件或者其组合来实现。在一些实施例中,指令转换模块可位于指令处理处理器外部,例如单独晶片上和/或存储器(例如静态、动态或运行时指令模拟模块)中。作为举例,指令转换模块可接收可属于第一指令集的指令102,并且可对指令102进行模拟、转化、变形、解释或者以其他方式将指令102转换为一个或多个对应或所得出中间指令或控制信号,其可属于第二不同的指令集。第二指令集的一个或多个中间指令或控制信号可提供给解码单元(例如解码单元104),其可将第二指令集的所接收的一个或多个指令或控制信号解码为由处理器的本机硬件(例如一个或多个执行单元)可执行的一个或多个低级指令或控制信号。
处理器还包括打包数据寄存器组108。打包数据寄存器的每个可表示晶片上存储位置,其可操作以存储打包数据、向量数据或SIMD数据。打包数据寄存器可表示架构可见的寄存器(例如架构寄存器堆)。架构可见或架构寄存器是软件和/或编程人员可见的,和/或是通过处理器的指令集的指令所指示以识别操作数的寄存器。这些架构寄存器与给定微架构中的其他非架构或者非架构可见寄存器(例如暂时寄存器、重排序缓冲器、引退寄存器等)形成对照。打包数据寄存器可在不同微架构中使用众所周知的技术按照不同方式来实现,而并不局限于任何特定类型的电路。各种不同类型的寄存器是适当的。适当类型的寄存器的示例包括但不限于专用物理寄存器、使用寄存器重命名的动态分配物理寄存器及其组合。
在一些实施例中,第一源打包数据操作数110可选地可存储在第一打包数据寄存器中,以及第二源打包数据操作数112可存储在第二打包数据寄存器中。备选地,存储器位置或其他存储位置可用于这些操作数的一个或多个。在一些实施例中,目的地存储位置也可以是打包数据寄存器。在一些情况下,用作目的地存储位置的打包数据寄存器与用于第一源打包数据操作数和第二源操作数的打包数据寄存器可以是不同的。在其他情况下,用于源打包数据操作数其中之一的打包数据寄存器可再用作目的地存储位置(例如结果打包数据操作数可覆盖源打包数据操作数其中之一来写入)。例如,在一些情况下,结果打包数据操作数可覆盖第二源打包数据操作数来写入,其在一些情况下可用来准备相同类型的指令的另一个实例的第二源打包数据操作数。备选地,存储器或其他存储位置可选地可用于目的地存储位置。
再次参照图1,执行单元106与解码单元104、第一源打包数据操作数110、可选的第二源操作数112和源屏蔽116耦合(例如,可与打包数据寄存器108和打包数据操作屏蔽寄存器118耦合)。作为举例,执行单元可包括算术逻辑单元、逻辑单元、执行逻辑或数据操纵操作的数字电路等。执行单元可接收一个或多个解码或者以其他方式转换的指令或控制信号,其表示采用传播的被屏蔽源元素存储指令102和/或从其中得出。执行单元还可接收第一源打包数据操作数110、源屏蔽116以及在一些实施例中的可选第二源(例如打包数据)操作数112,其全部可由指令102来指定或者以其他方式指示。
在一些实施例中,执行单元可使用源屏蔽116作为屏蔽或控制操作数,以屏蔽或控制数据如何从第一源打包数据操作数110存储到结果打包数据操作数114。源屏蔽可包括多个屏蔽元素或控制元素。在一些实施例中,屏蔽元素可按照与结果打包数据操作数的对应结果数据元素的一一对应性来包含,使得可对各结果数据元素与其他分开和/或无关地提供屏蔽或控制。在一些实施例中,各屏蔽元素可以是单个屏蔽位,但是本发明的范围并不局限于此。在这类情况下,源屏蔽可具有各结果数据元素和/或各源数据元素的屏蔽位。在一些实施例中,各屏蔽位或另一屏蔽元素的值可屏蔽或控制来自第一源打包数据操作数110的对应数据元素是否存储到结果打包数据操作数114中的对应结果数据元素。例如,各屏蔽位或元素可具有未屏蔽值(例如设置成二进制一(即,1)),以便使第一源打包数据操作数110中的对应源数据元素存储到对应未屏蔽结果数据元素,或者各屏蔽位可具有屏蔽值(例如清除为二进制零(即,0)),以便使(例如最近的未屏蔽结果数据元素的)另一个值被传播或者以其他方式存储到对应被屏蔽结果数据元素。在另一个实施例中,两个或更多位可选地可用于各屏蔽元素。例如,各屏蔽元素可具有与各对应源数据元素相同的位数,以及最低阶位或最高阶位可用作单个屏蔽位。
执行单元可以是响应指令102和/或作为指令102的结果(例如响应从指令直接或间接解码(例如经过模拟)的一个或多个指令或控制信号)可操作的,以便将结果打包数据操作数 114存储在指令所指示的目的地存储位置中。在一些实施例中,结果打包数据操作数可包括至少两个未屏蔽结果数据元素。至少两个未屏蔽结果数据元素可对应于源屏蔽116的未屏蔽的屏蔽元素。结果打包数据操作数114的未屏蔽结果数据元素的每个可具有相同相对位位置中的第一源打包数据操作数110的对应数据元素的值。结果打包数据操作数114还可具有每个最接近的一对未屏蔽结果数据元素之间的所有被屏蔽结果数据元素,其具有与最靠近结果打包数据操作数114的第一端(例如最低有效位位置或端或者最高有效位位置或端)的该对的未屏蔽结果数据元素相同的值。被屏蔽结果数据元素对应于源屏蔽116的被屏蔽的屏蔽元素。在一些实施例中,结果打包数据操作数的上述特性对指令可以是固定或隐式的(例如,对指令的操作码或类型是固定或隐式的),而不是(例如通过shufftle、permute或其他极灵活指令的显式控制操作数)按照灵活方式显式指定的。在一些实施例中,结果打包数据操作数可选地可以是对于图3-6的任一个所示和所述的操作数的任一个,但是本发明的范围并不局限于此。
执行单元和/或处理器可包括特定或具体逻辑(例如晶体管、集成电路或者潜在地与固件(例如非易失性存储器中存储的指令)和/或软件相结合的其他硬件),其可操作以执行指令 102,和/或响应指令102和/或作为指令102的结果来存储结果。在一些实施例中,执行单元可包括:一个或多个输入结构(例如(一个或多个)端口、(一个或多个)互连、接口等),接收源操作数;与(一个或多个)输入结构耦合的电路或逻辑,以处理源操作数,并且生成结果操作数;以及与电路或逻辑耦合的一个或多个输出结构(例如(一个或多个)端口、(一个或多个)互连、接口等),输出结果操作数。
为了避免影响对本描述的理解,示出和描述比较简单的处理器。在其他实施例中,处理器可选地可包括其他众所周知的处理器组件。实施例可包含在具有多个核心的处理器、逻辑处理器或执行引擎中,其中至少一个具有解码单元和执行单元,以执行本文所公开指令的实施例。
图2是执行采用传播的被屏蔽源元素存储指令的实施例的方法220的一实施例的流程图。在各个实施例中,该方法可由处理器、指令处理设备或另一数字逻辑装置来执行。在一些实施例中,图2的方法可由图1的处理器来执行和/或在其中执行。本文对于图1的处理器所述的组件、特征和具体可选细节可选地也适用于图2的方法。备选地,图2的方法可由类似或不同的处理器或设备来执行和/或在其中执行。此外,图1的处理器可与图2相同、相似或者不同地执行方法。
该方法包括在框221接收采用传播的被屏蔽源元素存储指令。在各个方面,指令可在处理器或者其一部分(例如指令取单元、解码单元、总线接口单元等)来接收。在各个方面,指令可从晶片外来源(例如从存储器、互连等)或者从晶片上来源(例如从指令高速缓存、指令队列等)来接收。指令可指定或者以其他方式指示包括第一批多个数据元素的第一源打包数据操作数,在一些实施例中可选地可指定或者以其他方式指示具有值的第二源操作数,可指定或者以其他方式指示包括多个屏蔽元素的源屏蔽,并且可指定或者以其他方式指示目的地存储位置。
该方法包括在框222响应指令和/或作为指令的结果而将结果打包数据操作数存储在目的地存储位置中。代表性地,执行单元可执行指令并且存储结果。在一些实施例中,结果打包数据操作数可包括至少两个未屏蔽结果数据元素。未屏蔽结果数据元素可对应于源屏蔽的未屏蔽的屏蔽元素。结果打包数据操作数的未屏蔽结果数据元素的每个可具有相同相对位位置中的第一源打包数据操作数的对应数据元素的值。结果打包数据操作数还可具有每个最接近的一对未屏蔽结果数据元素之间的所有被屏蔽结果数据元素,其具有与最靠近结果打包数据操作数的第一端的该对的未屏蔽结果数据元素相同的值。被屏蔽结果数据元素可对应于源屏蔽的被屏蔽的屏蔽元素。
所示方法涉及架构操作(例如从软件角度可见的操作)。在其他实施例中,该方法可选地可包括一个或多个微架构操作。可对指令进行取、解码、无序调度,可访问源操作数,执行单元可执行微架构操作以实现指令,等等。在一些实施例中,微架构操作可选地可包括把来自源元素的值存储到结果元素,把来自低阶未屏蔽结果元素的值传播或存储到高阶被屏蔽结果元素,等等。
图3是示出将最低阶源元素存储到最低阶被屏蔽结果数据元素的采用传播的被屏蔽对应源元素存储操作330(其可响应指令的实施而执行)的一实施例的框图。在这个实施例中,第二源打包数据操作数312的最低阶数据元素(X0)的值可用于零或以上(例如在所示示例中为三)最低阶屏蔽掉的结果数据元素332的集合的值。
指令还可指定(例如显式指定)或者以其他方式指示(例如隐式指示)具有第一批多个打包数据元素的第一源打包数据操作数310。在所示实施例中,第一源打包操作数数据具有八个数据元素A0至A7,但是本发明的范围并不局限于此。在其他实施例中,第一源打包数据操作数可具有不同数量的数据元素,例如等于第一源打包数据操作数的位的大小除以各数据元素的位的大小的数量。在各个实施例中,第一源打包数据操作数的宽度可以是64位、 128位、256位、512位或1024位,但是本发明的范围并不局限于此。在各个实施例中,各打包数据元素的宽度可以是8位、16位、32位或64位,但是本发明的范围并不局限于此。在一些实施例中,第一源打包数据操作数可处于存储器位置中,其可允许数据元素直接从存储器存储在结果打包数据中,而无需像先前那样加载到源打包数据寄存器中,但是这不作要求。
指令还可指定或者以其他方式指示第二源打包数据操作数312。在这个实施例中,第二源打包数据操作数可提供单个最低阶或最低有效数据元素(X0),其值可用于(例如存储到) 结果打包数据操作数314中的零或以上(例如在所示示例中为三)最低阶或最低有效屏蔽掉的结果数据元素。屏蔽掉的结果数据元素可以是与源屏蔽操作数316中的相同相对位置的屏蔽掉的屏蔽元素对应的那些元素。在一些实施例中,第二源打包数据操作数可存储在打包数据寄存器中。在这个实施例中,单个数据元素(X0)存储在最低阶或最低有效数据元素位置中。第二源打包数据操作数中的其他数据元素和/或数据元素位置设计有星号(*),以指示它们可选地可被操作和/或指令忽略和/或未使用。如以下将进一步说明,提供打包数据操作数的最低阶位置中的单个数据元素(例如X0)从某些实现的算法角度来看(例如当向量化递减循环时) 可提供优点。但是,本发明的范围并不局限于这类实现或者这样来提供单个数据元素(X0)。
指令还可指定或者以其他方式指示源屏蔽316。源屏蔽可包括多个屏蔽元素。例如,源屏蔽可包括与结果打包数据操作数中的结果数据元素的数量相同数量的屏蔽元素。在所示实施例中,源屏蔽具有八个屏蔽元素。各屏蔽元素可对应于第一源打包数据的数据元素其中之一和/或操作数中的相同相对位置的结果打包数据的数据元素其中之一。例如,最低有效屏蔽元素可对应于最低有效结果数据元素和/或A0,最高有效屏蔽元素可对应于最高有效结果数据元素和/或A7,依此类推。如所示,在一些实施例中,各屏蔽元素可以是单个屏蔽位,但是本发明的范围并不局限于此。按照所示实施例中使用的惯例,具有二进制零(即,0) 值的屏蔽元素表示屏蔽掉或被屏蔽的屏蔽元素,而具有二进制一(即,1)值的屏蔽元素表示未屏蔽的屏蔽元素。相反惯例也是可能的。在特定所示示例中,八个屏蔽位从左边的最高有效位置到右边的最低有效位位置具有二进制值0、1、0、0、1、0、0和0。要理解,这些只是示例值。在一些实施例中,指令可包含在带有指示具有作为判定操作数(predicateoperand)以判定打包数据操作的源屏蔽的屏蔽寄存器的其他指令的指令集中。
结果打包数据操作数314可响应指令的实施例和/或作为指令的实施例的结果而被生成并且存储(例如由执行单元306)在目的地存储位置中。目的地存储位置可通过指令来指定或者以其他方式指示。在各个实施例中,目的地存储位置可以是打包数据寄存器、存储器位置或者另一存储位置。结果打包数据操作数可包括多个结果数据元素。例如,结果打包数据可包括与第一源打包数据操作数中的数据元素的数量相同数量的结果数据元素和/或源屏蔽中的相同数量的屏蔽元素。在所示实施例中,结果打包数据具有八个结果数据元素,但是本发明的范围并不局限于此。各结果数据元素可对应于第一源打包数据中的不同数据元素和/ 或操作数中的相同相对位置的源屏蔽中的不同屏蔽元素。
当从右边的最低阶端或位位置331移动到左边的最高阶端或位位置333时,八个结果数据元素占用数据元素位置0至7。注意,在所示示例实施例中,位置3中的结果数据元素(A3)对应于未屏蔽的屏蔽元素(例如具有值1),并且是最低阶未屏蔽结果数据元素和/或与最低阶端或位位置最靠近的未屏蔽结果数据元素。如所示示例实施例中在332所示,三个最低阶或最右结果数据元素(即,在位置0至2中)表示最低阶端或位位置与位置3中的最低阶未屏蔽结果数据元素(A3)之间的被屏蔽结果数据元素的集合。三个最低阶结果数据元素各对应于屏蔽掉的屏蔽元素(例如具有值0),而位置3中的下一个最高阶结果数据元素(A3)对应于未屏蔽的屏蔽元素(例如具有值1)。在这个实施例中,第二源打包数据操作数312的单个最低阶数据元素(X0)的值用于(例如存储于)这些最低阶屏蔽掉的结果数据元素(其超前结果打包数据的位置3中的第一遇到的或最低阶未屏蔽结果数据元素(A3))的全部三个的值。在这个实施例中,X0是用于这些最低阶屏蔽掉的结果数据元素的预定值。位置3中的下一个最高阶结果数据元素(A3)(其是未屏蔽结果数据元素)存储第一源打包数据操作数的位置3中的对应数据元素(A3)的值。
继续跨所示示例结果打包数据操作数从右到左,两个下一个最高阶结果数据元素(即,在位置4和5中)也是屏蔽掉的结果数据元素,其各对应于屏蔽掉的屏蔽元素(例如具有值0)。在一些实施例中,如在334所示,最接近低阶未屏蔽结果数据元素(在本例中为A3) 的值可传播或者以其他方式存储在位置4和5的这两个高阶屏蔽掉的结果数据元素的每个中。例如,如所示,位置4至5中的屏蔽掉的结果数据元素的每个可存储最接近低阶未屏蔽结果数据元素(A3)的值。也就是说,在一些实施例中,最接近低阶未屏蔽结果数据元素(A3) 的值可传播到零或以上(在本例中为二)高阶屏蔽掉的结果数据元素的集合中。注意,不是所谓的“垂直”操作(其中来自相同对应或“垂直”位置中的第一源打包数据的对应源数据元素的值存储到这些屏蔽掉的结果数据元素中),而是可执行所谓的“水平”操作(其中最接近超前低阶未屏蔽结果数据元素的值可存储到这些屏蔽掉的结果数据元素的每个中)。
位置6中的下一个最高阶结果数据元素(A6)(其是未屏蔽结果数据元素)存储第一源打包数据操作数的位置6中的对应数据元素(A6)的值。下一个最高阶结果数据元素(即,在位置7中)是屏蔽掉的结果数据元素,其对应于被屏蔽的屏蔽元素(例如具有值0)。位置6中的未屏蔽结果数据元素(A6)是与结果打包数据操作数的最高阶端或位位置最靠近的未屏蔽结果数据元素。位置7中的结果数据元素表示结果打包数据操作数的最高有效端或位位置和与最高有效端或位位置最靠近的未屏蔽结果数据元素(例如位置6中的A6)之间的一个或多个被屏蔽结果数据元素(在本例中为单个被屏蔽结果数据元素)的集合。在一些实施例中,最接近低阶未屏蔽结果数据元素(其在这个示例中是位置6中的未屏蔽结果数据元素A6)的值可存储到位置7的这个高阶屏蔽掉的结果数据元素中。例如,如所示,最接近低阶未屏蔽结果数据元素(A6)的值可传播到位置7的最高阶屏蔽掉的结果数据元素中。
以下所列示的是将最低阶源元素存储到最低阶被屏蔽结果数据元素的采用传播的被屏蔽源元素存储指令(称作MULTISRCSTRPROPZERO)的具体示例实施例的伪代码。MASK是源屏蔽(例如源屏蔽316)。SRC1是具有将要存储在结果打包数据操作数的零或以上最低阶被屏蔽元素的集合中的单个最低阶数据元素的第二源打包数据操作数(例如操作数312)。 SRC2是具有将要存储或传播到目的地的元素的第一源打包数据操作数(例如操作数310)。 DST是可存储结果打包数据操作数(例如操作数314)的目的地。在各个实施例中,SRC1、 SRC2和DST各可以是128位(例如xmm寄存器)、256位(例如ymm寄存器)或者512位(例如zmm寄存器),但是本发明的范围并不局限于此。在备选实施例中,可使用其他大小的寄存器,和/或源操作数的一个或多个可从存储器位置或者另一存储位置而不是从打包数据寄存器来获得。另外,在其他实施例中,显式源操作数其中之一可隐式地再用作目的地操作数。在代码中,“i”是操作数中的位置计数器,“i++”表示增量,VL是第一源打包数据操作数中的数据元素的数量,以及tmp_val是临时变量。数据可以是字节、字、双字、四字、单精度或双精度,这里列举几个示例。
MULTISRCSTRPROPZERO MASK,SRC1,SRC2,DST
tmp_val=SRC1[0];
for(i=0;i<VL;i++){
if(MASK[i]==1)tmp_val=SRC2[i];
DST[i]=tmp_val;}
图4是示出将最高阶源元素存储到最低阶被屏蔽结果数据元素的采用传播的被屏蔽对应源元素存储操作436(其可响应指令的实施例而执行)的一实施例的框图。在这个实施例中,第二源打包数据操作数412的单个最高阶数据元素(X7)的值用于零或以上(例如在所示示例中为三)最低阶屏蔽掉的结果数据元素432的集合的值。
指令还可指定(例如显式指定)或者以其他方式指示(例如隐式指示)第一源打包数据操作数410、第二源打包数据操作数412和源屏蔽416。第一源打包数据操作数、第二源打包数据操作数(除了以下所述差异之外)和源屏蔽可选地可具有(例如对于图3)先前所述的特性和变化的任一个。
在这个实施例中,第二源打包数据操作数412提供单个最高阶或最高有效数据元素 (X7),其值可用于(例如存储到)结果打包数据操作数414中的零或以上(例如在所示示例中为三)最低阶或最低有效屏蔽掉的结果数据元素432。如以下将进一步说明,提供打包数据操作数的最高阶位置中的单个数据元素(例如X7)从某些实现的算法角度来看(例如当向量化递增循环时)可提供优点。但是,本发明的范围并不局限于这类实现或者这样来提供单个数据元素(X7)。
结果打包数据操作数414可响应指令的实施例和/或作为指令的实施例结果而被生成并且存储(例如由执行单元406)在目的地存储位置中。当从右边的最低阶端或位位置431移动到左边的最高阶端或位位置433时,八个结果数据元素占用数据元素位置0至7。在所示示例实施例中,位置3中的结果数据元素(A3)对应于未屏蔽的屏蔽元素(例如具有值1),并且是最低阶(例如最右)未屏蔽结果数据元素和/或与最低阶端或位位置最靠近的未屏蔽结果数据元素。如所示示例实施例中在432所示,三个最低阶或最右结果数据元素(即,在位置0 至2中)表示最低阶端或位位置与位置3中的最低阶未屏蔽结果数据元素(A3)之间的被屏蔽结果数据元素的集合。在这个实施例中,第二源打包数据操作数412的单个最高阶或最高有效数据元素(X7)的值存储在全部三个最低阶屏蔽掉的结果数据元素(其超前结果打包数据的位置3中的第一遇到的或最低阶未屏蔽结果数据元素(A3))。在这个实施例中,X7是用于这些最低阶屏蔽掉的结果数据元素的预定值。下一个最高阶结果数据元素(A3)(位置3中) (其是未屏蔽结果数据元素)存储第一源打包数据操作数的位置3中的对应数据元素(A3)的值。除了与最高阶数据元素(X7)而不是最低阶数据元素(X0)的使用相关的这些差异之外,结果打包数据操作数414可选地可具有图3的先前所述结果打包数据操作数314的特性和变化的任一个。如在434所示,最接近低阶未屏蔽结果数据元素(在本例中为A3)的值可传播或者以其他方式存储在位置4和5的这两个高阶屏蔽掉的结果数据元素的每个中。
以下所列示的是将最高阶源元素存储到最低阶被屏蔽结果数据元素的采用传播的被屏蔽源元素存储指令(称作MULTISRCSTRPROPUPPER)的具体示例实施例的伪代码。SRC1是具有将要存储在结果打包数据操作数的零或以上最低阶被屏蔽元素的集合中的单个最高阶数据元素的源打包数据操作数(例如操作数412)。否则,MASK、SRC1、SRC2、DST、VL 和其他参数可具有与上述MULTISRCSTRPROPZERO指令中相同的特性或变化。
MULTISRCSTRPROPUPPER MASK,SRC1,SRC2,DST
tmp_val=SRC1[VL-1];
for(i=0;i<VL;i++){
if(MASK[i]==1)tmp_val=SRC2[i];
DST[i]=tmp_val;}
图5是示出使最低阶源被屏蔽结果数据元素保持不变的采用传播的被屏蔽对应源元素存储操作538(其可响应指令的实施例而执行)的一实施例的框图。在这个实施例中,超前最低有效未屏蔽结果数据元素(例如在所示示例中为位置3中的A3)的零或以上(例如在所示示例中为三)最低阶被屏蔽结果数据元素532的集合可保持不变(例如,可以不改变目的地存储位置中的初始值)。
指令还可指定(例如显式指定)或者以其他方式指示(例如隐式指示)第一源打包数据操作数510和源屏蔽516。第一源打包数据操作数510和源屏蔽516可选地可具有(例如对于图 3-4)先前所述的特性和变化的任一个。在这个实施例中,无需第二源操作数(例如,像第二源操作数312或412)提供将要用于最低阶被屏蔽结果数据元素532的集合的单个值。
结果打包数据操作数514可响应指令或操作的实施例和/或作为指令或操作的实施例结果而被生成并且存储(例如由执行单元506)在目的地存储位置中。最低阶端或位位置531 在右边示出,以及最高阶端或位位置533在左边示出。如前面所述,在所示示例实施例中,位置3中的结果数据元素(A3)对应于未屏蔽的屏蔽元素(例如具有值1),并且是最低阶(例如最右)未屏蔽结果数据元素。如在532所示,在位置0至2中的三个最低阶(最右)结果数据元素表示最低阶端或位位置与位置3中的最低阶未屏蔽结果数据元素(A3)之间的被屏蔽结果数据元素的集合。在这个实施例中,位置0至2中的这些最低阶(例如最右)被屏蔽结果数据元素的全部三个可保持不变。例如,目的地存储位置(例如寄存器)中的初始或起始数据元素可保持不变和/或不通过操作/指令来更新。作为举例,目的地存储位置最初可将数据元素R0 至R2存储在三个最低阶数据元素位置中。在操作/指令之后,数据元素R0至R2可保持为存储在三个最低阶数据元素位置中。除了上述差异之外,结果打包数据操作数514可选地可具有(例如对于图3-4)先前所述的特性和变化的任一个。如在534所示,最接近低阶未屏蔽结果数据元素(在本例中为A3)的值可传播或者以其他方式存储在位置4和5的这两个高阶屏蔽掉的结果数据元素的每个中。
以下所列示的是保持不变的采用传播的被屏蔽源元素存储指令(称作MULTISRCSTRPROPUN)的具体示例实施例的伪代码。在这个实施例中,无需第二源操作数(例如操作数312、412)提供将要存储在结果打包数据操作数的零或以上最低阶被屏蔽元素的集合中的单个数据元素。在这个实施例中,SRC1是具有将要存储或传播到目的地的元素的第一源打包数据操作数(例如操作数510)。SRC1、MASK、DST、VL可具有与上述MULTISRCSTRPROPZERO和MULTISRCSTRPROPUPPER指令中相同的特性或变化。在这个实施例中,超前第一最低阶未屏蔽结果数据元素的DST的最低阶被屏蔽结果数据元素可保持不变。
MULTISRCSTRPROPUN MASK,SRC1,DST
For(i=0;i<VL;i++){
if(MASK[i]==1)break;//查找最低阶未屏蔽位置
else*DST[i]保持不变*}
for(;i<VL;i++){//i从最低阶未屏蔽位置继续
if(MASK[i]==1)tmp_val=SRC1[i]
DST[i]=tmp_val;}
图6是示出将最低阶源元素存储到最高阶被屏蔽结果数据元素的采用传播的反向被屏蔽对应源元素存储操作640(其可响应指令的实施例而执行)的一实施例的框图。在这个实施例中,第二源打包数据操作数612的最低阶数据元素(X0)的值可用于零或以上(例如在所示示例中为一)最高阶屏蔽掉的结果数据元素632(其超前最高阶未屏蔽结果数据元素(例如在所示示例中为位置6中的A6))的集合的值。
指令还可指定(例如显式指定)或者以其他方式指示(例如隐式指示)第一源打包数据操作数610、第二源打包数据操作数612和源屏蔽616。第一源打包数据操作数、第二源打包数据操作数和源屏蔽可选地可具有(例如对于图3-4)先前所述的特性和变化的任一个。在这个示例实施例中,第二源打包数据操作数612具有将要存储到最高阶屏蔽掉的结果数据元素 632的最低阶数据元素(X0)。
结果打包数据操作数614可响应指令或操作的实施例和/或作为指令或操作的实施例的结果而被生成并且存储(例如由执行单元606)在目的地存储位置中。最低阶端或位位置 631在右边示出,以及最高阶端或位位置633在左边示出。在这个实施例中,操作是采用传播的反向存储操作,其中结果数据元素632的集合是最高阶集合而不是最低阶集合,并且其中传播是从高阶数据元素位置到低阶数据元素位置。在所示示例实施例中,位置6中的结果数据元素(A6)对应于最高阶未屏蔽结果数据元素和/或与最高阶端或位位置(例如在图示的左边)最靠近的未屏蔽结果数据元素。如所示示例实施例中在632所示,位置7中的最高阶结果数据元素表示最高阶端或位位置与位置6中的最高阶未屏蔽结果数据元素(A6)之间的零或以上(例如在本例中为一)最高阶被屏蔽结果数据元素的集合。在这个实施例中,第二源打包数据操作数612的单个最低阶或最低有效数据元素(X0)的值存储在所有这些最高阶被屏蔽结果数据元素632中。
位置6中的最高阶未屏蔽结果数据元素(A6)存储第一源打包数据操作数610的位置6 中的对应数据元素(A6)的值。在这个实施例中,高阶未屏蔽结果数据元素的值被传播或存储到一直到下一个未屏蔽结果数据元素的邻接低阶屏蔽结果数据元素。在所示示例中,后两个低阶结果数据元素(位置4和5中)也是屏蔽掉的结果数据元素。如在634所示,位置6中的最接近高阶未屏蔽结果数据元素(A6)的值可传播或者以其他方式存储(在这个实施例中沿减少位有效性的方向)在位置4和5的被屏蔽结果数据元素的每个中。
位置3中的下一个低阶数据元素是未屏蔽结果数据元素,并且存储对应源数据元素 (A3)的值。位置0至2中的后三个低阶数据元素是被屏蔽结果数据元素,并且存储最靠近高阶未屏蔽结果数据元素(其在本例中是位置3中的结果数据元素(A3))的值。
图6的实施例示出使用来自第二源打包数据操作数612的最低阶数据元素(X0)的情况。在另一个实施例中,可选地可使用最高阶数据元素(X7)。在又一个实施例中,最高阶被屏蔽结果数据元素可保持不变,并且可选地可省略第二源操作数612。
以下所列示的是将最低阶源元素存储到最高阶被屏蔽结果数据元素的采用传播的反向被屏蔽源元素存储指令(称作REVMULTISRCSTRPROPZERO)的具体示例实施例的伪代码。这个指令使用从高阶未屏蔽结果数据元素到低阶被屏蔽结果数据元素的值的反向传播或存储。在代码中,“i--”表示减量并且i>=0条件,即“i”大于或等于零。在这个实施例中,MASK、SRC1、SRC2、DST、VL可具有与上述MULTISRCSTRPROPZERO和 MULTISRCSTRPROPUPPER指令中相同的特性或变化。在其他实施例中,不是使用来自 SRC1的最低阶数据元素,而是可选地可使用来自SRC1的最高阶数据元素,或者DST中的初始最高阶被屏蔽数据元素可保持不变。
REVMULTISRCSTRPROPZERO MASK,SRC1,SRC2,DST
tmp_val=SRC1[0];
for(i=VL-1;i>=0;i--){
if(MASK[i]:=1)tmp_val=SRC2[i];
DST[i]=tmp_val;}
图3-6示出若干说明性示例实施例。但是,本发明的范围并不是只限于这些实施例。其他实施例可包括不同数量的数据元素、多位屏蔽元素等。另外,图3-6示出提供将用于最低阶或最高阶被屏蔽结果数据元素的值的单个数据元素或值(例如X0)的三种不同示例方式。如以下进一步描述,这三种不同方式在不同实现期间(例如在循环的向量化期间)可提供某些优点。但是,在各个其他实施例中,单个数据元素或值可在打包数据的中间位置中、在通用寄存器中、在存储器位置中或者在另一个存储位置中提供。如果单个数据元素或值足够小(例如8 位字节元素或16位字元素)而不会过度增加特定实现的指令长度,则它可选地可在指令的立即(immediate)中提供。
本文所述的指令是通用指令。本领域的技术人员将发现使用指令的各种不同方式和目的。在一些实施例中,指令可用来促进循环(例如包括对于在条件下修改的标量值的计算的循环)的向量化,但本发明范围不限于此。在下列伪代码中示出这种循环的一个示例:
x=x0;//将x设置为初始值
for(i=0;i<N;i++){
if(condition[i])x=A[i];//仅当满足条件时才改变x
result[i]=computation(x,i);}
在这个伪代码中,x是标量,以及“i”是迭代数。在这个示例中,计算取决于标量x的值,并且潜在地/可选地可取决于迭代数“i”,这取决于特定实现。
一个可能的物理示例是双态触发器。例如,触发器可在特定事件(例如按压按钮)时切换到另一种状态(例如,0->1或1->0),并且触发器可保持在那种状态,直到另一个特定事件 (例如再次按压按钮)为止。在屏蔽中,如果“1”对应于触发器切换到另一种状态(例如按压按钮)的时刻,则“0”可表示触发器的状态保持不变(例如尚未再次按压按钮)。一个可能的图形示例是采用不同颜色所绘制的线条。线条定义边界。可期望采用边界的颜色来填充边界之间的空间。
本文所公开指令的一实施例可用于这个目的。各像素可具有其关联颜色。屏蔽中的“1”可定义具有其自己的已知颜色的边界像素。“0”可表示两个边界之间需要改变其颜色的像素。“0”颜色可以完全不定义。在一些实施例中,本文所公开指令的实施例可用右边界(例如对于指令的正向形式)或左边界(例如对于指令的反向形式)的颜色进行“0”的填充。因此,屏蔽在这里可用来定义传播的边界。
一个难题在于,如果向量化是完全可能的,则大部分因x值中的迭代之间的数据相关性,当前一般趋向于对这类循环进行向量化极为棘手。一般来说,不存在能够解析数据相关性的足够短的指令序列,其可由编译器用来对这种循环进行向量化。
有利地,本文所公开的指令可用来促进循环(例如上述伪代码中所示的循环)的向量化。例如,这些指令可用来生成可用于后续向量计算中的x值的向量。在上述伪代码中要注意,x最初设置为初始值。还要注意,在循环的迭代期间,x的值仅对满足那个迭代的条件的那些迭代改变。如果不满足条件,则x的值不发生变化。这可通过将数据元素的值从一个位置传播到结果打包数据操作数中的另一个位置来实现。
在一些实施例中,迭代的条件可在本文所公开指令的执行的界限外部来评估。这些条件的评估可用来生成源屏蔽,其可通过本文所公开指令的实施例来指示。起始(例如最低阶)被屏蔽结果数据元素可设置为初始值(例如在上述伪代码示例的情况下的x0),并且传播到第一未屏蔽结果数据元素。那个第一(例如最低阶)未屏蔽结果数据元素可被给予来自可存储一系列值A[i](例如A0、A1、A2等)的另一个源操作数的对应数据元素的值。在涉及控制屏蔽中的两个后续设置位(比如说低位置为j)的数据元素位置之间的结果打包数据中,可存储值A[j],其中j满足条件(例如condition[j]为真)。这可对应于循环迭代的集合上的x值。
为了进一步说明某些概念,考虑示例循环可如何向量化的下列示例伪代码。这个示例使用multisrcstrpropzero指令。
broadcast x0,zmml//采用x0初始化zmm1
k2=100...0//创建仅具有上屏蔽位集合的屏蔽,供vcompress使用
for(i=0;i+=KL;i<N){//其中KL是向量中的元素的数量
zmm_iterations={i+KL-l:i+KL-2:...:i+l:i}//KL迭代次数
K1[KL-1:0]=condition(i+KL-1:i)//基于条件来生成源屏蔽
vmovaps&A[i],zmm2//准备x值的向量
multisrcstrpropzero kl,zmml,zmm2,zmm3//最低元素版本
zmm4=computation(zmm3,zmm_iterations)//对x和i进行计算
result[i+KL-l:i]=zmm4//存储结果
vcompress zmm3,zmml{k2}//将zmm3的上方元素用于下一个x}
以上要注意,使用vcompress指令和仅具有最高阶位集合的k2屏蔽,以便从zmm3寄存器的上方值来获得循环的KL向量迭代的下一个集合的x值。在另一个实施例中,为了帮助消除伴随下一迭代的准备的这种附加开销(例如消除vcmpress指令和k2屏蔽),multisrcstrpropupper指令可选地可用来代替multisrcstrpropzero指令。考虑使用multisrcstrpropupper指令来实现循环的下列示例伪代码。
broadcast x0,zmm3//采用x0初始化zmm3
for(i=0;i+=KL;i<N){//其中KL是向量中的元素的数量
zmm_iterations={i+KL-l:i+KL-2:...:i+l:i}//KL迭代次数
kl[KL-1:0]=condition(i+KL-l:i)//基于条件来生成源屏蔽
vmovaps&A[i],zmm2//准备x值的向量
multisrcstrpropupper kl,zmm3,zmm2,zmm3//最高元素版本
zmm4=computation(zmm3,zmm_iterations)//对x和i进行计算
result[i+KL-l:i]=zmm4//存储结果}
注意,在这个实施例中,消除vcompress指令,并且无需生成或使用仅具有最高阶位集合的 k2屏蔽。还要注意,zmm3通过multisrcstrpropupper指令用作源并且用作目的地。在一些实施例中,指令将源操作数(例如寄存器)用作目的地可以是隐式的。在multisrcstrpropupper和/ 或multisrcstrpropzero指令的另一个实施例中,存储器位置可用作提供值的源操作数代替 zmm2。
为了进一步说明,考虑向量用于循环的八次迭代的上述循环的实现的示例。最初可评估条件,以生成源屏蔽,并且起始数据可在可通过multisrcstrpropupper指令所指示的源操作数中建立。考虑例如下列操作数(其中具有左边的最高有效和右边的最低有效):
kl=01001000//迭代0-7的源屏蔽的示例值
zmm2=A7:A6:A5:A4:A3:A2:Al:A0//迭代0-7的A值
zmm3=x0:*:*:*:*:*:*:*//采用x0初始化zmm3的最高阶数据元素,
//*指示任意或随意值
multisrcstrpropupper指令可执行如下:
multisrcstrpropupper kl,zmm3,zmm2,zmm3
multisrcstrpropupper指令的执行可使下列结果打包数据操作数被存储:
zmm3=A6:A6:A3:A3:A3:x0:x0:x0
随后,可评估八个条件的另一个集合,以生成新源屏蔽。后八次迭代的起始A值的新集合可存储在新源操作数中。先前multisrcstrpropupper指令的结果打包数据操作数可指示为源操作数,以提供将要用于新结果打包数据的最低阶被屏蔽数据的单个最高阶数据元素。考虑例如下列操作数(其中具有左边的最高有效和右边的最低有效):
kl=10010100//迭代8-15的示例源屏蔽
zmm2=A15:A14:A13:A12:Al1:A10:A9:A8//迭代8-15的A值
zmm3=A6:A6:A3:A3:A3:x0:x0:x0//x值的先前结果向量
multisrcstrpropupper指令可执行如下:
multisrcstrpropupper kl,zmm3,zmm2,zmm3
multisrcstrpropupper指令的执行可使下列结果打包数据操作数被存储:
zmm3=A15:A12:A12:A12:A10:A10:A6:A6
这个过程一般可对循环的后续迭代重复进行。
图7是打包数据寄存器708的适当集合的示例实施例的框图。打包数据寄存器包括32个512位打包数据寄存器,标记为ZMM0至ZMM31。在所示实施例中,下方16个寄存器、即ZMM0-ZMM15的低阶256位被混叠或覆盖于相应256位打包数据寄存器(标记为 YMM0-YMM15),但是这不作要求。同样,在所示实施例中,寄存器YMM0-YMM15的低阶128位被混叠或覆盖于相应128位打包数据寄存器(标记为XMM0-XMM15),但是这也不作要求。512位寄存器ZMM0至ZMM31可操作以保持512位打包数据、256位打包数据或 128位打包数据。256位寄存器YMM0-YMM15可操作以保存256位打包数据或128位打包数据。128位寄存器XMM0-XMM15可操作以保存128位打包数据。在一些实施例中,寄存器的每个可用来存储打包浮点数据或打包整数数据。支持不同的数据元素大小,包括至少8 位字节数据、16位字数据、32位双字、32位单精度浮点数据、64位四字和64位双精度浮点数据。在备选实施例中,可使用不同数量的寄存器和/或不同大小的寄存器。在又一些实施例中,寄存器可以或者可以不使用较大寄存器对较小寄存器的混叠,和/或可以或者可以不用来存储浮点数据。
图8是示出屏蔽位的数量取决于打包数据宽度和打包数据元素宽度的表890。示出128位、256位和512位的打包数据宽度,但是其他宽度也是可能的。考虑8位字节、16位字、32位双字(dword)或者单精度浮点以及64位四字(Qword)或双精度浮点的打包数据元素宽度,但是其他宽度也是可能的。
图9是打包数据操作屏蔽寄存器918的适当集合的示例实施例的框图。打包数据操作屏蔽寄存器的每个可用来存储打包数据操作屏蔽。在所示实施例中,集合包括标记为k0至k7的八个寄存器。备选实施例可包括少于八个寄存器(例如二、四、六个等)或者多于八个寄存器(例如十六、三十二个等)。在所示实施例中,寄存器的每个为64位。在备选实施例中,寄存器的宽度可宽于64位(例如80位、128位等)或者窄于64位(例如8位、16位、 32位等)。寄存器可使用众所周知的技术按照不同方式来实现,而并不局限于任何已知的特定类型的电路。适当寄存器的示例包括但不限于专用物理寄存器、使用寄存器重命名的动态分配物理寄存器及其组合。作为举例,指令可使用三位(例如3位字段)来编码或指定八个打包数据操作屏蔽寄存器k0至k7的任一个。在备选实施例中,当存在更少或更多打包数据操作屏蔽寄存器时,可分别使用更少或更多位。在一些实施例中,屏蔽可存储在这些寄存器的最低阶位中,但是这不作要求。
指令集包括一个或多个指令格式。给定指令格式定义各种字段(位数、位的位置),以指定将要执行的操作(操作码)以及对其将要执行操作的(一个或多个)操作数等等。一些指令格式经过指令模板的定义(或者子格式)进一步分解。例如,给定指令格式的指令模板可定义成具有指令格式的字段的不同子集(所包含的字段通常按照相同顺序,但是至少一部分具有不同的位位置,因为包含了更少字段),和/或定义成具有以不同方式所解释的给定字段。因此,ISA的各指令使用给定指令格式来表达(以及如果被定义,则采用该指令格式的指令模块的给定指令模块),并且包括用于指定操作和操作数的字段。例如,示范ADD指令具有特定操作码和指令格式,其包括指定该操作码的操作码字段以及选择操作数(源1/目的地和源2) 的操作数字段;以及这个ADD指令在指令流中的出现将在选择特定操作数的操作数字段中具有特定内容。称作高级向量扩展(AVX)(AVX1和AVX2)并且使用向量扩展(VEX)编码方案的SIMD扩展集合已经发布和/或发表(例如参见
Figure GDA0002130036270000211
64和IA-32架构软件开发人员手册, 2011年10月;并且参见
Figure GDA0002130036270000212
高级向量扩展编程参考,2011年6月)。
示范指令格式
本文所述的(一个或多个)指令的实施例可按照不同格式来实施。另外,下面详述示范系统、架构和管线。(一个或多个)指令的实施例可在这类系统、架构和管线上运行,但是并不局限于那些细节。
通用向量友好指令格式
向量友好指令格式是适合于向量指令的指令格式(例如,存在向量操作特定的某些字段)。虽然描述向量和标量操作均经过向量友好指令格式来支持的实施例,但是备选实施例仅使用向量友好指令格式的向量操作。
图10A-10B是示出按照本发明的实施例的通用向量友好指令格式及其指令模板的框图。图10A是示出按照本发明的实施例的通用向量友好指令格式及其A类指令模板的框图;而图10B是示出按照本发明的实施例的通用向量友好指令格式及其B类指令模板的框图。具体来说,通用向量友好指令格式1000被定义A类和B类指令模板,其均包括无存储器存取1005指令模板和存储器存取1020指令模板。向量友好指令格式的上下文中的术语“通用”表示指令格式没有绑定到任何特定指令集。
虽然将描述向量友好指令格式支持如下方面的本发明的实施例:具有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字节)数据元素宽度)的不同向量操作数大小(例如256字节向量操作数)。
图10A中的A类指令模板包括:1)在无存储器存取1005指令模板中,示出无存储器存取、全舍入控制类型(full round control type)操作1010指令模板和无存储器存取、数据变换类型操作1015指令模板;以及2)在存储器存取1020指令模板中,示出存储器存取、时间上的1025指令模板和存储器存取、非时间上的1030指令模板。图10B中的B类指令模板包括:1)1)在无存储器存取1005指令模板中,示出无存储器存取、写屏蔽控制、部分舍入控制类型操作1012指令模板和无存储器存取、写屏蔽控制、vsize操作1017指令模板;以及2)在存储器存取1020指令模板中,示出存储器存取、写屏蔽控制1027指令模板。
通用向量友好指令格式1000包括以下按照图10A-10B所示顺序所列示的下列字段。
格式化字段1040–这个字段中的特定值(指令格式标识符值)唯一地标识向量友好指令格式,并且因而识别指令流中按照向量友好指令格式的指令的出现。因此,在不是仅具有通用向量友好指令格式的指令集所需的意义上,这个字段是可选的。
基础操作字段1042–其内容区分不同的基础操作。
寄存器变址字段1044–其内容直接地或者经过地址生成来指定源和目的地操作数的位置(如果它们在寄存器中或者在存储器中)。这些包括足够的位数,以便从P×Q(例如32×512、16×128、32×1024,、64×1024)寄存器堆中选择N个寄存器。虽然在一个实施例中,N可达三个源和一个目的地寄存器,但是备选实施例可支持更多或更少的源和目的地寄存器(例如,可支持达两个源(其中这些源之一还充当目的地),可支持达三个源(其中这些源之一还充当目的地),可支持达两个源和一个目的地)。
修改符字段1046–其内容区分按照通用向量指令格式的指令的出现,其指定来自不是这样(即,在无存储器存取1005指令模板与存储器存取1020指令模板之间)的那些的存储器存取。存储器存取操作对存储器分级结构进行读和/或写(在一些情况下,使用寄存器中的值来指定源和/或目的地地址),而非存储器存取操作则不是这样(例如源和目的地是寄存器)。虽然在一个实施例中,这个字段也在执行存储器地址计算的三种不同方式之间进行选择,但是备选实施例可支持执行存储器地址计算的更多、更少或不同的方式。
扩充操作字段1050–其内容区分除了基础操作之外、多种不同操作的哪一个还要被执行。这个字段是上下文特定的。在本发明的一个实施例中,这个字段分为类字段 1068、α字段1052和β字段1054。扩充操作字段1050允许操作的共同编组在单个指令、而不是2、3或4个指令中执行。
缩放(scale)字段1060–其内容允许用于存储器地址生成(例如,用于使用2scale*变址+基址的地址生成)的变址字段的内容的缩放。
位移字段1062A–其内容用作存储器地址生成的部分(例如用于使用2scale*变址+基址+位移的地址生成)。
位移因数字段1062B(注意,直接在位移因数字段1062B之上的位移字段1062A的并置指示使用一个或另一个)–其内容用作地址生成的部分;它指定通过存储器存取的大小(N)来缩放的位移因数—其中N是存储器存取中的字节数(例如,用于使用2scale*变址+基址+已缩放的位移的地址生成)。忽略冗余低阶位,并且因此位移因数字段的内容与存储器操作数总大小(N)相乘,以便生成计算有效地址中使用的最终位移。N的值由处理器硬件在运行时基于全操作码字段1074(本文稍后所述)和数据操纵字段1054C来确定。位移字段 1062A和位移因数字段1062B在它们没有用于无存储器存取1005指令模板的意义上是可选的和/或不同实施例可以仅实现这两个中的一个或二者。
数据元素宽度字段1064–其内容区分要使用多个数据元素宽度的哪一个(在一些实施例中对于全部指令;在其他实施例中仅对于指令的一部分)。在仅支持一个数据元素宽度而不需要这个字段的意义上,这个字段是可选的,和/或数据元素宽度使用操作码的某个方面来支持。
写屏蔽字段1070–其内容基于每数据元素位置来控制目的地向量操作数中的那个数据元素位置是否反映基础操作和扩充操作的结果。A类指令模板支持合并–写屏蔽,而B类指令模板支持合并-和调零-写屏蔽。当合并时,向量屏蔽允许目的地中的元素的任何集合在任何操作的执行期间被保护以免更新(通过基础操作和扩充操作所指定);在另一实施例中,保存目的地的各元素的旧值,其中对应屏蔽位具有0。相比之下,当调零时,向量屏蔽允许目的地中的元素的任何集合在任何操作的执行期间被调零(通过基础操作和扩充操作所指定);在一个实施例中,当对应屏蔽位具有0值时,目的地的元素设置为0。这个功能性的子集是控制被执行操作的向量长度的能力(也就是说,元素的跨度从第一个修改成最后一个);但是,修改的元素是连续的不是必需的。因此,写屏蔽字段1070允许部分向量操作,包括加载、存储、算术、逻辑等。虽然描述写屏蔽字段1070的内容选择包含待使用写屏蔽的多个写屏蔽寄存器其中之一(并且因而写屏蔽字段1070的内容间接地识别待执行屏蔽)的本发明的实施例,但是作为替代或补充,备选实施例允许屏蔽写字段1070的内容直接指定待执行屏蔽。
立即(immediate)字段1072–其内容允许立即的指定。在这个字段不存在于不支持立即的通用向量友好格式的实现中以及不存在于没有使用立即的指令中的意义上,这个字段是可选的。
类字段1068–其内容区分指令的不同类。参照图10A-B,这个字段的内容在A类与B类指令之间进行选择。图10A-B中,圆角正方形用来指示特定值存在于字段中(例如,分别在图10A-B中的类字段1068的A类1068A和B类1068B)。
A类的指令模板
在A类的非存储器存取1005指令模板的情况下,α字段1052被解释为RS字段1052A,其内容区分不同扩充操作类型的哪一个要被执行(例如,对无存储器存取、舍入类型操作1010 和无存储器存取、数据变换类型操作1015指令模板分别指定舍入1052A.1和数据变换1052A.2),而β字段1054区分要执行所指定类型的操作的哪一个。在无存储器存取1005指令模板中,缩放字段1060、位移字段1062A和位移缩放字段1062B不存在。
无存储器存取指令模板–全舍入控制类型操作
在无存储器存取全舍入控制类型操作1010指令模板中,β字段1054被解释为舍入控制字段 1054A,其(一个或多个)内容提供静态舍入。虽然在本发明的所述实施例中,舍入控制字段 1054A包括抑制所有浮点异常(SAE)字段1056和舍入操作字段1058,但是备选实施例可支持将这些概念均编码到同一字段中,或者仅具有这些概念/字段的一个或另一个(例如可以仅具有舍入操作字段1058)。
SAE字段1056–其内容区分是否禁用异常事件报告;当SAE字段1056的内容指示启用抑制时,给定指令不报告任何种类的浮点异常标志,并且不提出任何浮点异常处理程序(handler)。
舍入操作字段1058–其内容区分要执行一组舍入操作的哪一个(例如上舍入、下舍入、向零方向舍入和舍入到最近)。因此,舍入操作字段1058允许基于每指令来改变舍入模式。在处理器包括用于指定舍入模式的控制寄存器的本发明的一个实施例中,舍入操作字段 1058的内容覆盖该寄存器值。
无存储器存取指令模板–数据变换类型操作
在无存储器存取数据变换类型操作1015指令模板中,β字段1054被解释为数据变换字段 1054B,其内容区分要执行多个数据变换的哪一个(例如无数据变换、搅和、广播)。
在A类的存储器存取1020指令模板的情况下,α字段1052被解释为逐出提示字段1052B,其内容区分要使用逐出提示的哪一个(图10A中,对存储器存取、时间上的1025指令模板和存储器存取、非时间上的1030指令模板分别指定时间上的1052B.1和非时间上的1052B.2),而β字段1054被解释为数据操纵字段1054C,其内容区分要执行多个数据操纵操作(又称作原语)的哪一个(例如,无操纵、广播、源的上变换和目的地的下变换)。存储器存取1020指令模板包括缩放字段1060以及可选的位移字段1062A或位移缩放字段1062B。
向量存储器指令采用转换支持来执行从存储器的向量加载以及对存储器的向量存储。如同正则向量指令一样,向量存储器指令逐个数据元素地从/向存储器传递数据,其中实际传递的元素通过选择作为写屏蔽的向量屏蔽的内容来规定。
存储器存取指令模板–时间上的
时间数据是可能足够快再使用以获益于高速缓存的数据。但是,这是提示,并且不同处理器可按照不同方式(包括完全忽略提示)来实现它。
存储器存取指令模板–非时间上的
非时间数据是不可能足够快被再使用以获益于第1级高速缓存中的高速缓存的数据,并且应当被给予逐出的优先级。但是,这是提示,并且不同处理器可按照不同方式(包括完全忽略提示)来实现它。
B类的指令模板
在B类的指令模板的情况下,α字段1052被解释为写屏蔽控制(Z)字段1052C,其内容区分写屏蔽字段1070所控制的写屏蔽应当是合并还是调零。
在B类的非存储器存取1005指令模板的情况下,β字段1054的部分被解释为RL字段1057A,其内容区分不同扩充操作类型的哪一个要被执行(例如,对无存储器存取、写屏蔽控制、部分舍入控制类型操作1012指令模板和无存储器存取、写屏蔽控制、VSIZE类型操作1017指令模板分别指定舍入1057A.1和向量长度(VSIZE)1057A.2),而β字段1054的其余部分区分要执行所指定类型的操作的哪一个。在无存储器存取1005指令模板中,缩放字段1060、位移字段1062A和位移因数字段1062B不存在。
在无存储器存取、写屏蔽控制、部分舍入控制类型操作1010指令模板中,β字段1054的其余部分被解释为舍入操作字段1059A,并且禁用异常事件报告(给定指令不报告任何种类的浮点异常标志,并且不提出任何浮点异常处理程序)。
舍入操作字段1059A–正如舍入操作字段1058,其内容区分要执行一组舍入操作的哪一个(例如上舍入、下舍入、向零方向舍入和舍入到最近)。因此,舍入操作字段1059A 允许基于每指令来改变舍入模式。在处理器包括用于指定舍入模式的控制寄存器的本发明的一个实施例中,舍入操作字段1059A的内容覆盖该寄存器值。
在无存储器存取、写屏蔽控制、VSIZE类型操作1017指令模板中,β字段1054的其余部分被解释为向量长度字段1059B,其内容区分多个数据向量长度的哪一个要被执行 (例如128、256或512字节)。
在B类的存储器存取1020指令模板的情况下,β字段1054的部分被解释为广播字段1057B,其内容区分广播类型数据操纵操作是否要被执行,而β字段1054的其余部分被解释为向量长度字段1059B。存储器存取1020指令模板包括缩放字段1060以及可选的位移字段1062A或位移因数字段1062B。
关于通用向量友好指令格式1000,示出全操作码字段1074,其包括格式字段1040、基础操作字段1042和数据元素宽度字段1064。虽然示出全操作码字段1074包括全部这些字段的一个实施例,但是在不支持它们全部的实施例中,全操作码字段1074包括少于全部这些字段。全操作码字段1074提供操作代码(操作码)。
扩充操作字段1050、数据元素宽度字段1064和写屏蔽字段1070允许这些特征基于每指令在通用向量友好指令格式中指定。
写屏蔽字段和数据元素宽度字段的组合创建类型化的指令,因为它们允许屏蔽基于不同数据元素宽度来应用。
存在于A类和B类中的各种指令模板在不同状况中是有益的。在本发明的一些实施例中,不同处理器或者处理器中的不同核心可支持仅A类、仅B类或者两类。例如,预计用于通用计算的高性能通用无序核心可以仅支持B类,主要预计用于图形和/或科学(吞吐量)计算的核心可以仅支持A类,以及预计用于两者的核心可支持两者(当然,具有来自两类的模板和指令的某种混合但是没有来自两类的所有模板和指令的核心处于本发明的范围之内)。另外,单个处理器可包括多个核心,其全部支持相同类,或者其中不同核心支持不同类。例如,在具有单独图形和通用核心的处理器中,主要预计用于图形和/或科学计算的图形核心之一可以仅支持A类,而通用核心的一个或多个可以是具有预计用于通用计算的无序执行和寄存器重命名的高性能通用核心,其仅支持B类。没有单独图形核心的另一个处理器可包括一个或多个通用有序或无序核心,其支持A类以及B类。当然,在本发明的不同实施例中,来自一类的特征也可在另一类中实现。通过高级语言所编写的程序输入(例如就在编译或静态编译时)到多种不同的可执行形式中,包括:1)仅具有目标处理器所支持的 (一个或多个)类的指令供执行的形式;或者2)具有使用所有类的指令的不同组合所编写的备选例程并且具有控制流程代码(其基于当前运行代码的处理器所支持的指令来选择要运行的例程)的形式。
示范特定向量友好指令格式
图11是示出按照本发明的实施例的示范特定向量友好指令格式的框图。图11示出特定向量友好指令格式1100,其在指定字段的位置、大小、解释和顺序以及那些字段的一部分的值的意义上是特定的。特定向量友好指令格式1100可用来扩展x86指令集,并且因而字段的一部分与现有x86指令集及其扩展(例如AVX)中使用的字段相似或相同。这个格式保持为与具有扩展的现有x86指令集的前缀编码字段、真正操作码字节字段、MOD R/M字段、SIB字段、位移字段和立即字段一致。示出来自图11的字段映射到来自图10的字段中。
应当理解,虽然为了便于说明而在通用向量友好指令格式1000的上下文中参照特定向量友好指令格式1100来描述本发明的实施例,但是本发明并不局限于特定向量友好指令格式1100,除了要求保护的情况之外。例如,通用向量友好指令格式1000考虑各种字段的多种可能大小,而特定向量友好指令格式1100示为具有特定大小的字段。通过特定示例,虽然数据元素宽度字段1064示为特定向量友好指令格式1100中的一位字段,但是本发明并不局限于此(也就是说,通用向量友好指令格式1000考虑数据元素宽度字段1064的其他大小)。
通用向量友好指令格式1000包括以下按照图11A所示顺序所列示的下列字段。
EVEX前缀(字节0-3)1102–按照四字节形式来编码。
格式字段1040(EVEX字节0、位[7:0])–第一字节(EVEX字节0)是格式字段 1040,并且它包含0×62(在本发明的一个实施例中用于区分向量友好指令格式的唯一值)。
第二-第四字节(EVEX字节1-3)包括提供特定能力的多个位字段。
REX字段1105(EVEX字节1,位[7-5])–由EVEX.R位字段(EVEX字节1,位[7] –R)、EVEX.X位字段(EVEX字节1,位[6]–X)和1057BEX字节1、位[5]–B)来组成。EVEX.R、EVEX.X和EVEX.B位字段提供与对应VEX位字段相同的功能性,并且使用 1的补数的形式来编码,即,ZMM0编码为111B,ZMM15编码为0000B。指令的其他字段如本领域已知对寄存器变址的下三位进行编码(rrr、xxx和bbb),使得Rrrr、Xxxx和Bbbb 可通过相加EVEX.R、EVEX.X和EVEX.B来形成。
REX’字段1110–这是REX’字段的第一部分,并且是EVEX.R’位字段(EVEX 字节1,位[4]–R’),其用来对扩展32寄存器组的上方16或下方16进行编码。在本发明的一个实施例中,这个位连同如以下所示的其他位按照位反转格式来存储,以区分(在众所周知的x8632位模式)BOUND指令,其真正操作码字节为62,但是在MOD R/M字段(以下所述)中不接受MOD字段中的值11;本发明的备选实施例不按照反转格式来存储这个和下面的其他所指示位。值1用来对下方16个寄存器进行编码。换言之,R’Rrrr通过组合 EVEX.R’、EVEX.R和来自其他字段的其他RRR来形成。
操作码映射字段1115(EVEX字节1,位[3:0]–mmmm)–其内容对暗示的领先操作码字节(0F、0F 38或0F 3)进行编码。
数据元素宽度字段1064(EVEX字节2,位[7]–W)–通过记号EVEX.W来表示。EVEX.W用来定义数据类型的粒度(大小)(32位数据元素或者64位数据元素)。
EVEX.vvvv 1120(EVEX字节2,位[6:3]-vvvv)–EVEX.vvvv的作用可包括如下:1)EVEX.vvvv对于按照反转(1的补码)形式所指定的第一源寄存器操作数进行编码,并且对具有2或以上源操作数的指令是有效的;2)EVEX.vvvv对于某些向量移位按照1的补码的形式所指定的目的地寄存器操作数进行编码;或者3)EVEX.vvvv没有对任何操作数进行编码,该字段被保留并且应当包含1111b。因此,EVEX.vvvv字段1120对于按照反转(1的补码)形式所存储的第一源寄存器指定符的4个低阶位进行编码。取决于指令,额外的不同 EVEX位字段用来将特定大小扩展到32个寄存器。
EVEX.U 1068类字段(EVEX字节2,位[2]-U)–如果EVEX.U=0,则它指示A类或EVEX.U0;如果EVEX.U=1,则它指示B类或EVEX.U1。
前缀编码字段1125(EVEX字节2,位[1:0]-pp)–提供基础操作字段的附加位。除了提供对EVEX前缀格式的遗留SSE指令的支持之外,这还具有压缩SIMD前缀(而不是要求一字节来表达SIMD前缀,EVEX前缀仅要求2位)的有益效果。在一个实施例中,为了支持使用按照遗留格式和按照EVEX前缀格式的SIMD前缀(66H、F2H、F3H)的遗留SSE指令,这些遗留SIMD前缀编码为SIMD前缀编码字段;以及在被提供给解码器的PLA(因此 PLA能够未经修改地运行这些遗留指令的遗留和EVEX格式)之前在运行时扩展为遗留 SIMD前缀。虽然较新指令可将EVEX前缀编码字段的内容直接用作操作码扩展,但是某些实施例按照类似方式扩展以获得一致性,但是允许不同含意由这些遗留SIMD前缀来指定。备选实施例可重新设计PLA,以支持2位SIMD前缀编码,并且因而不要求扩展。
α字段1052(EVEX字节3,位[7]–EH;又称作EVEX.EH、EVEX.rs、 EVEX.RL、EVEX.写屏蔽控制和EVEX.N;也采用α示出)–如先前所述,这个字段是上下文特定的。
β字段1054(EVEX字节3,位[6:4]-SSS,又称作EVEX.s2-0、EVEX.r2-0、EVEX.rr1、EVEX.LL0、EVEX.LLB;也采用βββ示出)–如先前所述,这个字段是上下文特定的。
REX’字段1110–这是REX’字段的其余部分,并且是EVEX.V’位字段(EVEX 字节3,位[3]–V’),其可用来对扩展32寄存器组的上16或下16进行编码。这个位按照位反转格式来存储。值1用来对下方16个寄存器进行编码。换言之,V’VVVV通过组合EVEX.V’、EVEX.vvvv来形成。
写屏蔽字段1070(EVEX字节3,位[2:0]-kkk)–其内容指定写屏蔽寄存器中的寄存器的变址,如先前所述。在本发明的一个实施例中,特定值EVEX.kkk=000具有暗示没有写屏蔽用于特定指令的特殊行为(这可按照多种方式来实现,包括使用硬连线到全部一的写屏蔽或者绕过屏蔽硬件的硬件)。
真正操作码字段1130(字节4)又称作操作码字节。操作码的部分在这个字段中指定。
MOD R/M字段1140(字节5)包括MOD字节1142、Reg字段1144和/或R/M字段 1146。如先前所述,MOD字段1142的内容区分存储器存取和非存储器存取操作。Reg字段 1144的作用能够概括成两种状况:对目的地寄存器操作数或者源寄存器操作数进行编码,或者被看作是操作码扩展而不用来对任何指令操作数进行编码。R/M字段1146的作用可包括如下:对于引用存储器地址的指令操作数进行编码,或者对目的地寄存器操作数或源寄存器操作数进行编码。
SIB 1150(包括SS 1152,SIB.xxx 1154和SIB.bbb 1156)-缩放、变址、基址(SIB)字节(字节6)–如先前所述,缩放字段1060的内容用于存储器地址生成。SIB.xxx 1154和SIB.bbb 1156–先前针对寄存器变址Xxxx和Bbbb已经提到这些字段的内容。
位移字段1062A(字节7-10)–当MOD字段1142包含10时,字节7-10是位移字段1062A,并且它与遗留32位位移(disp32)相同地进行工作,并且以字节粒度进行工作。
位移因数字段1062B(字节7)–当MOD字段1142包含01时,字节7是位移因数字段1062B。这个字段的位置是与遗留x86指令集8位位移(disp8)相同的字段,其以字节粒度进行工作。由于disp8是符号扩展,所以它能够仅在-128与127字节偏移之间进行寻址;根据64字节高速缓存线,disp8使用8位,其能够设置成仅四个实际有用值-128、-64、0和 64;由于常常需要较大范围,所以使用disp32;但是disp32要求4个字节。与disp8和 disp32形成对照,位移因数字段1062B是disp8的重新解释;当使用位移因数字段1062B 时,实际位移通过位移因数字段的内容乘以存储器操作数存取的大小(N)来确定。这种类型的位移称作disp8*N。这减少平均指令长度(用于位移但是具有大许多的范围的单个字节)。这种压缩位移基于如下假设:有效位移是存储器存取的粒度的倍数,并且因此地址偏移的冗余低阶位无需被编码。换言之,位移因数字段1062B代替遗留x86指令集8位位移。因此,位移因数字段1062B按照与x86指令集8位位移相同的方式来编码(因此没有 ModRM/SIB编码规则的变化),其中唯一的例外是disp8过度加载到disp8*N。换言之,不存在编码规则或编码长度的变化,而是仅存在硬件(其需要对位移进行缩放的倍数是存储器操作数的大小,以得到逐字节的地址偏移)对位移值的解释的变化。
立即字段1072如先前所述进行操作。
全操作码字段
图11B是示出按照本发明的一个实施例、组成全操作码字段1074的特定向量友好指令格式 1100的字段的框图。具体来说,全操作码字段1074包括格式字段1040、基础操作字段 1042和数据元素宽度(W)字段1064。基础操作字段1042包括前缀编码字段1125、操作码映射字段1115和真正操作码字段1130。
寄存器变址字段
图11C是示出按照本发明的一个实施例、组成寄存器变址字段1044的特定向量友好指令格式1100的字段的框图。具体来说,寄存器变址字段1044包括REX字段1105、REX’字段 1110、MODR/M.reg字段1144、MODR/M.r/m字段1146、VVVV字段1120、xxx字段1154 和bbb字段1156。
扩充操作字段
图11D是示出按照本发明的一个实施例、组成扩充操作字段1050的特定向量友好指令格式 1100的字段的框图。当类(U)字段1068包含0时,它表示EVEX.U0(A类1068A);当它包含 1时,它表示EVEX.U1(B类1068B)。当U=0并且MOD字段1142包含11(表示无存储器存取操作)时,α字段1052(EVEX字节3,位[7]–EH)被解释为rs字段1052A。当rs字段 1052A包含1(舍入1052A.1)时,β字段1054(EVEX字节3,位[6:4]–SSS)被解释为舍入控制字段1054A。舍入控制字段1054A包括一位SAE字段1056和二位舍入操作字段 1058。当rs字段1052A包含0(数据变换1052A.2)时,β字段1054(EVEX字节3,位[6:4] –SSS)被解释为三位数据变换字段1054B。当U=0并且MOD字段1142包含00、01或 10(表示存储器存取操作)时,α字段1052(EVEX字节3,位[7]–EH)被解释为逐出提示 (EH)字段1052B,以及β字段1054(EVEX字节3,位[6:4]–SSS)被解释为三位数据操纵字段1054C。
当U=1时,α字段1052(EVEX字节3,位[7]–EH)被解释为写屏蔽控制(Z)字段1052C。当U=1并且MOD字段1142包含11(表示无存储器存取操作)时,β字段1054的部分(EVEX字节3,位[4]–S0)被解释为RL字段1057A;当它包含1(舍入1057A.1)时,β字段1054的其余部分(EVEX字节3,位[6-5]–S2-1)被解释为舍入操作字段1059A,而当RL字段1057A包含0(VSIZE 1057.A2)时,β字段1054的其余部分(EVEX字节3,位[6-5] –S2-1)被解释为向量长度字段1059B(EVEX字节3,位[6-5]–L1-0)。当U=1并且MOD字段1142包含00、01或10(表示存储器存取操作)时,β字段1054(EVEX字节3,位[6:4]– SSS)被解释为向量长度字段1059B(EVEX字节3,位[6-5]–L1-0)和广播字段1057B(EVEX 字节3,位[4]–B)。
示范寄存器架构
图12是按照本发明的一个实施例的寄存器架构1200的框图。在所示实施例中,存在512位宽的32个向量寄存器1210;这些寄存器称作zmm0至zmm31。下方16个zmm寄存器的低阶256位覆盖于寄存器ymm0-15。下方16个zmm寄存器的低阶128位(ymm寄存器的低阶 128位)覆盖于寄存器xmm0-15。特定向量友好指令格式1100对这些覆盖寄存器堆进行操作,如下表所示。
Figure GDA0002130036270000311
换言之,向量长度字段1059B在最大长度与一个或多个其他较短长度之间进行选择,其中每个这种较短长度是超前长度的一半长度;以及没有向量长度字段1059B的指令模板对最大向量长度进行操作。此外,在一个实施例中,特定向量友好指令格式1100的B类指令模板对打包或标量单/双精度浮点数据和打包或标量整数数据进行操作。标量操作是对zmm/ymm/xmm寄存器中的最低阶数据元素位置所执行的操作;高阶数据元素位置保持为与它们在指令之前原本的情况相同或者根据本实施例调零。
写屏蔽寄存器1215–在所示实施例中,存在8个写屏蔽寄存器(k0至k7),每个的大小为64位。在备选实施例中,写屏蔽寄存器1215的大小为16位。如先前所述,在本发明的一个实施例中,向量屏蔽寄存器k0不能用作写屏蔽;当正常指示k0的编码用于写屏蔽时,它选择0xFFFF的硬连线写屏蔽,从而有效地禁用那个指令的写屏蔽。
通用寄存器1225–在所示实施例中,存在16个64位通用寄存器,其连同现有 x86寻址模式一起使用来对存储器操作数进行寻址。这些寄存器通过名称RAX、RBX、 RCX、RDX、RBP、RSI、RDI、RSP和R8至R15而被引用。
标量浮点栈寄存器堆(x87栈)1245(其上被混叠MMX打包整数平面寄存器堆1250)–在所示实施例中,x87栈是八元素栈,其用来使用x87指令集扩展对32/64/80位浮点数据执行标量浮点操作;而MMX寄存器用来对64位打包整数数据执行操作,以及保存在MMX 与XMM寄存器之间执行的一些操作的操作数。
本发明的备选实施例可使用更宽或更窄的寄存器。另外,本发明的备选实施例可使用更多、更少或不同的寄存器堆和寄存器。
示范核心架构、处理器和计算机架构
处理器核心可按照不同方式为了不同目的并且在不同的处理器中实现。例如,这类核心的实现可包括:1)预计用于通用计算的通用有序核心;2)预计用于通用计算的高性能通用无序核心;3)主要预计用于图形和/或科学(吞吐量)计算的专用核心。不同处理器的实现可包括:1)CPU,包括预计用于通用计算的一个或多个通用有序核心和/或预计用于通用计算的一个或多个通用无序核心;以及2)协处理器,包括主要预计用于图形和/或科学(吞吐量)的一个或多个专用核心。这类不同的处理器引起不同的计算机系统架构,其可包括:1)与 CPU分开的芯片上的协处理器;2)与CPU相同的打包中的单独晶片(die)上的协处理器;3)与CPU相同的晶片上的协处理器(在这种情况下,这种协处理器有时称作专用逻辑,例如集成图形和/或科学(吞吐量)逻辑,或者称作专用核心);以及4)可在相同晶片上包括所述CPU(有时称作应用核心(一个或多个)或应用处理器(一个或多个))、上述协处理器和附加功能性的芯片上的系统。接下来描述示范核心架构,之后接着示范处理器和计算机架构的描述。
示范核心架构
有序和无序核心框图
图13A是示出按照本发明的实施例、示范有序管线和示范寄存器重命名、无序发出/执行管线的框图。图13B是示出按照本发明的实施例、包含在处理器中的有序架构核心和示范寄存器重命名、无序发出/执行架构核心的框图。图13A-B中的实线框示出有序管线和有序核心,而虚线框的可选添加示出寄存器重命名、无序发出/执行管线和核心。假定有序方面是无序方面的子集,将描述无序方面。
图13A中,处理器管线1300包括取级1302、长度解码级1304、解码级1306、分配级1308、重命名级1310、调度(又称作分发或发出)级1312、寄存器读/存储器读级1314、运行级1316、回写/存储器写级1318、异常处理级1322和提交级1324。
图13B示出包括耦合到执行引擎单元1350并且均耦合到存储器单元1370的前端单元1330的处理器核心1390。核心1390可以是简化指令集计算(RISC)核心、复杂指令集计算(CISC)核心、超长指令字(VLIW)核心或者混合或备选核心类型。作为又一个选项,核心1390可以是专用核心(例如网络或通信核心)、压缩引擎、协处理器核心、通用计算图形处理单元(GPGPU)核心、图形核心等。
前端单元1330包括耦合到指令高速缓存单元1334的分支预测单元1332,指令高速缓存单元1334耦合到指令转化后备缓冲器(TLB)1336,指令转化后备缓冲器(TLB)1336耦合到指令取单元1338,指令取单元1338耦合到解码单元1340。解码单元1340(或解码器)可对指令进行解码,并且作为输出生成一个或多个微操作、微代码入口点、微指令、其他指令或其他控制信号,其从原始指令来解码或得出或者以其他方式反映原始指令。解码单元 1340可使用各种不同的机制来实现。适当机制的示例包括但不限于查找表、硬件实现、可编程逻辑阵列(PLA)、微代码只读存储器(ROM)等。在一个实施例中,核心1390包括微代码 ROM或另一介质,其存储某些宏指令的微代码(例如在解码单元1340中或者在前端单元 1330中)。解码单元1340耦合到执行引擎单元1350的重命名/分配器单元1352。
执行引擎单元1350包括重命名/分配器单元1352,其耦合到引退单元1354和一组一个或多个调度器单元1356。(一个或多个)调度器单元1356表示任何数量的不同调度器,包括保留站、中心指令窗口等。(一个或多个)调度器单元1356耦合到(一个或多个)物理寄存器堆单元1358。(一个或多个)物理寄存器堆单元1358的每个表示一个或多个物理寄存器堆,其中不同的寄存器堆存储一个或多个不同的数据类型,例如标量整数、标量浮点、打包整数、打包浮点、向量整数、向量浮点、状态(例如,作为要运行的下一个指令的地址的指令指针)等。在一个实施例中,(一个或多个)物理寄存器堆单元1358包括向量寄存器单元、写屏蔽寄存器单元和标量寄存器单元。这些寄存器单元可提供架构向量寄存器、向量屏蔽寄存器和通用寄存器。(一个或多个)物理寄存器堆单元1358被引退单元1354重叠,以示出可实现寄存器重命名和无序执行的各种方式(例如使用(一个或多个)重排序缓冲器和(一个或多个) 引退寄存器堆;使用(一个或多个)将来文件、(一个或多个)历史缓冲器和(一个或多个)引退寄存器堆;使用寄存器映射和寄存器池等)。引退单元1354和(一个或多个)物理寄存器堆单元 1358耦合到(一个或多个)执行聚类1360。(一个或多个)执行聚类1360包括一组一个或多个执行单元1362和一组一个或多个存储器存取单元1364。执行单元1362可执行各种操作(例如移位、加法、减法、乘法)并且对各种类型的数据(例如,标量浮点、打包整数、打包浮点、向量整数、向量浮点)来执行。虽然一些实施例可包括专用于特定功能或功能集合的多个执行单元,但是其他实施例可以仅包括一个执行单元或多个执行单元,其全部执行全部功能。(一个或多个)调度器单元1356、(一个或多个)物理寄存器堆单元1358和(一个或多个)执行聚类1360示为可能是多个的,因为某些实施例创建某些类型的数据/操作的单独管线(例如标量整数管线、标量浮点/打包整数/打包浮点/向量整数/向量浮点管线和/或存储器存取管线,其各具有其自己的调度器单元、(一个或多个)物理寄存器堆单元和/或执行聚类—以及在单独存储器存取管线的情况下,实现只有这个管线的执行聚类具有(一个或多个)存储器存取单元1364的某些实施例)。还应当理解,在使用独立管线的情况下,这些管线的一个或多个可以是无序发出/执行,而其余的是有序的。
存储器存取单元1364的集合耦合到存储器单元1370,其包括耦合到数据高速缓存单元1374(其耦合到第2级(L2)高速缓存单元1376)的数据TLB单元1372。在一个示范实施例中,存储器存取单元1364可包括加载单元、存储地址单元和存储数据单元,其各耦合到存储器单元1370中的数据TLB单元1372。指令高速缓存单元1334还耦合到存储器单元1370 中的第2级(L2)高速缓存单元1376。L2高速缓存单元1376耦合到一个或多个其他等级的高速缓存,并且最终耦合到主存储器。
作为举例,示范寄存器重命名、无序发出/执行核心架构可按如下所述实现管线1300:1)指令取1338执行取和长度解码级1302和1304;2)解码单元1340执行解码级 1306;3)重命名/分配器单元1352执行分配级1308和重命名级1310;4)(一个或多个)调度器单元1356执行调度级1312;5)(一个或多个)物理寄存器堆单元1358和存储器单元1370 执行寄存器读/存储器读级1314;执行聚类1360执行运行级1316;6)存储器单元1370和 (一个或多个)物理寄存器堆单元1358执行回写/存储器写级1318;7)各种单元可包含在异常处理级1322中;以及8)引退单元1354和(一个或多个)物理寄存器堆单元1358执行提交级 1324。
核心1390可支持一个或多个指令集(例如x86指令集(其中具有随较新版本已经添加的一些扩展);MIPS Technologies(Sunnyvale,CA)的MIPS指令集;ARM Holdings(Sunnyvale,CA)的ARM指令集(其中具有可选附加扩展、例如NEON)),包括本文所述的(一个或多个)指令。在一个实施例中,核心1390包括支持打包数据指令集扩展的逻辑(例如AVX1、AVX2),由此允许许多多媒体应用所使用的操作使用打包数据来执行。
应当理解,核心可支持多线程运行(运行操作或线程的两个或更多并行集合),并且可按照多种方式这样做,包括时间切片多线程运行、同时多线程运行(其中单个物理核心为物理核心同时多线程运行的线程的每个提供逻辑核心)或者其组合(例如,时间切片取和解码以及此后的同时多线程运行,例如在
Figure GDA0002130036270000351
超线程技术中)。
虽然在无序执行的上下文中描述寄存器重命名,但是应当理解,寄存器重命名可用于有序架构中。虽然处理器的所示实施例还包括单独指令和数据高速缓存单元1334/1374和共享L2高速缓存单元1376,但是备选实施例可具有用于指令和数据的单个内部高速缓存,例如第1级(L1)内部高速缓存或者多级内部高速缓存。在一些实施例中,系统可包括内部高速缓存以及核心和/或处理器外部的外部高速缓存的组合。备选地,高速缓存全部可以是核心和/或处理器外部的。
特定示范有序核心架构
图14A-B示出更具体的示范有序核心架构的框图,该核心可以是芯片中的若干逻辑块其中之一(包括相同类型和/或不同类型的其他核心)。逻辑块经过具有某种固定功能逻辑、存储器 I/O接口和其他必要I/O逻辑(这取决于应用)的高带宽互连网络(例如环形网络)进行通信。
图14A是按照本发明的实施例、单个处理器核心连同其到晶片上互连网络1402的连接以及连同其第2级(L2)高速缓存1404的本地子集的框图。在一个实施例中,指令解码器1400支持具有打包数据指令集扩展的x86指令集。L1高速缓存1406允许对标量和向量单元中的高速缓冲存储器的低等待时间访问。虽然在一个实施例中(为了简化设计),标量单元1408和向量单元1410使用单独寄存器组(分别为标量寄存器1412和向量寄存器1414),以及在它们之间所传递的数据被写到存储器并且然后从第1级(L1)高速缓存1406读回,但是本发明的备选实施例可使用不同方式(例如使用单个寄存器组,或者包括允许数据在两个寄存器堆之间来传递的通信,而无需被写入和读回)。
L2高速缓存1404的本地子集是全局L2高速缓存(其划分为单独本地子集,每处理器核心一个)的部分。各处理器核心具有到L2高速缓存1404的其自己的本地子集的直接访问通路。由处理器核心所读取的数据存储在其L2高速缓存子集1404中,并且能够与访问其自己的本地L2高速缓存子集的其他处理器核心并行地快速访问。由处理器核心所写入的数据存储在其自己的L2高速缓存子集1404中,并且在必要时从其他子集来刷新。环形网络确保共享数据的相干性。环形网络是双向的,以便允许诸如处理器核心、L2高速缓存和其他逻辑块之类的代理能够在芯片中相互通信。各环形数据通路每方向为1012位宽。
图14B是按照本发明的实施例、图14A中的处理器核心的部分的展开图。图14B包括L1高速缓存1404的L1数据高速缓存1406A部分以及与向量单元1410和向量寄存器 1414有关的更多细节。具体来说,向量单元1410是16宽向量处理单元(VPU)(参见16宽 ALU 1428),其运行整数、单精度浮点和双精度浮点指令的一个或多个。VPU支持采用搅和单元1420来搅和寄存器输入、采用数字转换单元1422A-B的数字转换以及采用复制单元 1424对存储器输入的复制。写屏蔽寄存器1426允许判定所产生向量写。
具有集成存储器控制器和图形的处理器
图15是按照本发明的实施例、可具有一个以上核心、可具有集成存储器控制器并且可具有集成图形的处理器1500的框图。图15中的实线框示出具有单个核心1502A、系统代理 1510、一组一个或多个总线控制器单元1516的处理器1500,而虚线框的可选添加示出具有多个核心1502A-N、系统代理单元1510中的一组一个或多个集成存储器控制器单元1514和专用逻辑1508的备选处理器1500。
因此,处理器1500的不同实现可包括:1)具有作为集成图形和/或科学(吞吐量)逻辑 (其可包括一个或多个核心)的专用逻辑1508和作为一个或多个通用核心(例如通用有序核心、通用无序核心、两者的组合)的核心1502A-N的CPU;2)具有作为主要预计用于图形和 /或科学(吞吐量)的大量专用核心的核心1502A-N的协处理器;以及3)具有作为大量通用有序核心的核心1502A-N的协处理器。因此,处理器1500可以是通用处理器、协处理器或专用处理器,例如网络或通信处理器、压缩引擎、图形处理器、GPGPU(通用图形处理单元)、高吞吐量多集成核心(MIC)协处理器(包括30个或以上核心)、嵌入式处理器等。处理器可在一个或多个芯片上实现。处理器1500可以是一个或多个衬底的一部分和/或可使用多种工艺技术的任一种、例如BiCMOS、CMOS或NMOS在一个或多个衬底上实现。
存储器分级结构包括核心中的一级或多级高速缓存1504A-N、一组一个或多个共享高速缓存单元1506以及耦合到集成存储器控制器单元1514的集合的外部存储器(未示出)。共享高速缓存单元1506的集合可包括一个或多个中间级高速缓存,例如第2级(L2)、第3 级(L3)、第4级(L4)或者其他高速缓存级、最后一级高速缓存(LLC)和/或它们的组合。虽然在一个实施例中,基于环形的互连单元1512互连集成图形逻辑1508、共享高速缓存单元1506的集合和系统代理单元1510/集成存储器控制器单元1514,但是备选实施例可将任何数量的众所周知技术用于互连这类单元。在一个实施例中,在一个或多个高速缓存单元1506 与核心1502A-N之间保持一致性。
在一些实施例中,核心1502A-N的一个或多个能够进行多线程运行。系统代理1510包括协调和操作核心1502A-N的那些组件。系统代理单元1510可包括例如功率控制单元(PCU)和显示单元。PCU可以是或者包括用于调节核心1502A-N和集成图形逻辑1508的功率状态所需的逻辑和组件。显示单元用于驱动一个或多个外部连接的显示器。
核心1502A-N在架构指令集方面可以是同构或异构的;也就是说,核心1502A-N的两个或更多可以能够运行相同指令集,而其他核心可以能够仅运行那个指令集的子集或者不同的指令集。
示范计算机架构
图16-19是示范计算机架构的框图。用于膝上型、台式、手持PC、个人数字助理、工程工作站、服务器、网络装置、网络集线器、交换机、嵌入式处理器,数字信号处理器(DSP)、图形装置、视频游戏装置、机顶盒、微控制器,蜂窝电话、便携媒体播放机、手持装置和各种其他电子装置的本领域已知的其他系统设计和配置也是适合的。一般来说,能够结合本文所公开的处理器和/或其他执行逻辑的大量系统或电子装置一般是适合的。
现在参照图16,所示的是按照本发明的一个实施例的系统1600的框图。系统1600可包括一个或多个处理器1610、1615,其耦合到控制器中枢1620。在一个实施例中,控制器中枢1620包括图形存储器控制器中枢(GMCH)1690和输入/输出中枢(IOH)1650(其可在单独芯片上);GMCH 1690包括存储器和图形控制器,存储器1640和协处理器1645与其耦合;IOH1650将输入/输出(I/O)装置1660耦合到GMCH 1690。备选地,存储器和图形控制器的一个或两者集成在处理器中(如本文所述),存储器1640和协处理器1645直接耦合到处理器1610,以及控制器中枢1620(与IOH 1650在单个芯片中)。
附加处理器1615的可选性质在图16中采用虚线表示。各处理器1610、1615可包括本文所述处理核心的一个或多个,并且可以是处理器1500的某个版本。
存储器1640可以是例如动态随机存取存储器(DRAM)、相变存储器(PCM)或者两者的组合。对于至少一个实施例,控制器中枢1620经由多点总线(例如前侧总线(FSB))、点对点接口(例如QuickPath互连(QPI))或者类似连接1695与(一个或多个)处理器1610、1615进行通信。
在一个实施例中,协处理器1645是专用处理器,例如高吞吐量MIC处理器、网络或通信处理器、压缩引擎、图形处理器、GPGPU、嵌入式处理器等。在一个实施例中,控制器中枢1620可包括集成图形加速器。
在包括架构、微架构、热、功率消耗特性等的优点的衡量标准范围方面,在物理资源1610、1615之间存在各种差异。
在一个实施例中,处理器1610运行控制通用类型的数据处理操作的指令。嵌入在指令中的可以是协处理器指令。处理器1610将这些协处理器指令识别为应当由所附连的协处理器1645来运行的类型。相应地,处理器1610在协处理器总线或另一互连上向协处理器1645发出这些协处理器指令(或者表示协处理器指令的控制信号)。(一个或多个)协处理器1645接受和运行所接收的协处理器指令。
现在参照图17,所示的是按照本发明的一实施例的第一更具体示范系统1700的框图。如图17所示,多处理器系统1700是点对点互连系统,并且包括经由点对点互连1750 所耦合的第一处理器1770和第二处理器1780。处理器1770和1780的每个可以是处理器 1500的某种版本。在本发明的一个实施例中,处理器1770和1780分别是处理器1610和 1615,而协处理器1738是协处理器1645。在另一个实施例中,处理器1770和1780分别是处理器1610、协处理器1645。
示出处理器1770和1780,其分别包括集成存储器控制器(IMC)单元1772和1782。处理器1770还包括作为其总线控制器单元的部分的点对点(P-P)接口1776和1778;类似地,第二处理器1780包括P-P接口1786和1788。处理器1770、1780可使用点对点(P-P)接口电路1778、1788经由P-P接口1750来交换数据。如图17所示,IMC 1772和1782将处理器耦合到相应存储器、即存储器1732和存储器1734,其可以是本地附连到相应处理器的主存储器的部分。
处理器1770、1780均可使用点对点接口电路1776、1794、1786、1798经由个体P-P接口1752、1754与芯片组1790交换数据。芯片组1790可选地可经由I/F 1792通过高性能接口1739与协处理器1738交换信息。在一个实施例中,协处理器1738是专用处理器,例如高吞吐量MIC处理器、网络或通信处理器、压缩引擎、图形处理器、GPGPU、嵌入式处理器等。
共享高速缓存(未示出)可包含处理器中或者两个处理器外部,但是仍然经由P-P互连与处理器连接,使得如果使处理器进入低功耗模式,则任一个或两个处理器的本地高速缓存信息可存储在共享高速缓存中。
芯片组1790可经由接口1796耦合到第一总线1716。在一个实施例中,第一总线1716可以是外设部件互连(PCI)总线或者例如PCI Express总线等总线或另一种第三代I/O互连总线,但是本发明的范围并不局限于此。
如图17所示,各种I/O装置1714可连同总线桥1718(其将第一总线1716耦合到第二总线1720)一起耦合到第一总线1716。在一个实施例中,诸如协处理器、高吞吐量MIC处理器、GPGPU、加速器(例如,图形加速器或数字信号处理(DSP)单元)、现场可编程门阵列或者任何其他处理器之类的一个或多个附加处理器1715耦合到第一总线1716。在一个实施例中,第二总线1720可以是低引脚数(LPC)总线。在一个实施例中,各种装置可耦合到第二总线1720,包括例如键盘和/或鼠标1722、通信装置1727以及可包括指令/代码和数据1730 的诸如磁盘驱动器或其他大容量存储装置之类的存储单元1728。此外,音频I/O 1724可耦合到第二总线1720。注意,其他架构是可能的。例如,代替图17的点对点架构,系统可实现多点总线或其他这种架构。
现在参照图18,所示的是按照本发明的一实施例的第二更具体示范系统1800的框图。图17和图18中的相似元件具有相似参考标号,并且从图18中省略图17的某些方面,以免影响对图18的其他方面的理解。
图18示出处理器1770、1780可分别包括集成存储器和I/O控制逻辑(“CL”)1772 和1782。因此,CL 1772、1782包括集成存储器控制器单元,并且包括I/O控制逻辑。图18 不仅示出存储器1732、1734耦合到CL 1772、1782,而且还示出I/O装置1814也耦合到控制逻辑1772、1782。传统I/O装置1815耦合到芯片组1790。
现在参照图19,所示的是按照本发明的一实施例的SoC 1900的框图。图15中的相似元件具有相似参考标号。另外,虚线框是更高级SoC上的可选特征。图19中,(一个或多个)互连单元1902耦合到:应用处理器1910,其包括一组一个或多个核心1502A-N和(一个或多个)共享高速缓存单元1506;系统代理单元1510;(一个或多个)总线控制器单元1516; (一个或多个)集成存储器控制器单元1514;一组一个或多个协处理器1920,其可包括集成图形逻辑、图像处理器、音频处理器和视频处理器;静态随机存取存储器(SRAM)单元 1930;直接存储器存取(DMA)单元1932;以及显示单元1940,用于耦合到一个或多个外部显示器。在一个实施例中,(一个或多个)协处理器1920包括专用处理器,例如网络或通信处理器、压缩引擎、GPGPU、高吞吐量MIC处理器、嵌入式处理器等。
本文所公开的机制的实施例可通过硬件、软件、固件或者这类实现方式的组合来实现。本发明的实施例可实现为在可编程系统上运行的计算机程序或程序代码,其中可编程系统包括至少一个处理器、存储系统(包括易失性和非易失性存储器和/或存储元件)、至少一个输入装置和至少一个输出装置。
例如图17所示的代码1730等程序代码可应用于输入指令,以执行本文所述的功能并且生成输出信息。输出信息可按照已知方式应用于一个或多个输出装置。为了便于本申请,处理系统包括具有例如数字信号处理器(DSP)、微控制器、专用集成电路(ASIC)或者微处理器等处理器的任何系统。
程序代码可通过高级过程或面向对象的编程语言来实现,以便与处理系统进行通信。根据需要,程序代码也可通过汇编或机器语言来实现。实际上,本文所述的机制的范围并不局限于任何具体编程语言。在任何情况下,语言可以是编译或解释语言。
至少一个实施例的一个或多个方面可通过机器可读介质上存储的、表示处理器中的各种逻辑的代表指令来实现,其在由机器读取时使机器制作执行本文所述技术的逻辑。称作“IP核心”的这类表示可存储在有形机器可读介质上,并且提供给各种客户或制造设施,以加载到实际制作逻辑或处理器的制造机器中。
这种机器可读存储介质可以非限制性地包括通过机器或装置所制造或形成的产品的非暂时有形布置,其中包括:例如硬盘等存储介质;任何其他类型的盘,包括软盘、光盘、致密盘只读存储器(CD-ROM)、可重写致密盘(CD-RW)和磁光盘;半导体器件,例如只读存储器(ROM)、例如动态随机存取存储器(DRAM)、静态随机存取存储器(SARAM)等随机存取存储器(RAM)、可擦可编程只读存储器(EPROM)、闪速存储器、电可擦可编程只读存储器(EEPROM)、相变存储器(PCM);磁卡或光卡;或者适合于存储电子指令的任何其他类型的介质。
相应地,本发明的实施例还包括非暂时有形机器可读介质,其包含指令或者包含定义本文所述结构、电路、设备、处理器和/或系统特征的设计数据、例如硬件描述语言(HDL)。这类实施例又可称作程序产品。
模拟(包括二进制转化、代码变形等)
在一些情况下,指令转换器可用来将指令从源指令集转换成目标指令集。例如,指令转换器可将指令转化(例如使用静态二进制转化、包括动态编译的动态二进制转化)、变形、模拟或者以其他方式变换成将要由核心来处理的一个或多个其他指令。指令转换器可通过软件、硬件、固件或其组合来实现。指令转换器可以在处理器上、处理器外或者部分处理器上和部分处理器外。
图20是按照本发明的实施例、与软件指令转换器用来将源指令集中的二进制指令转换成目标指令集中的二进制指令相对照的框图。在所示实施例中,指令转换器是软件指令转换器,但是备选地,指令转换器可通过软件、固件、硬件或者它们的各种组合来实现。图20示出高级语言2002的程序可使用x86编译器2004来编译,以生成x86二进制代码2006,其可由具有至少一个x86指令集核心的处理器2016本机运行。具有至少一个x86指令集核心的处理器2016表示任何处理器,其能够通过兼容地运行或者以其他方式处理下列方面来执行与具有至少一个x86指令集核心的Intel处理器基本上相同的功能:(1)Intel x86 指令集核心的指令集的大部分;或者(2)针对运行于具有至少一个x86指令集核心的Intel处理器的应用或其他软件的对象代码版本,以便取得与具有至少一个x86指令集核心的Intel 处理器基本上相同的结果。x86编译器2004表示可操作以生成x86二进制代码2006(例如对象代码)(其能够在具有或没有附加链接处理的情况下运行于具有至少一个x86指令集核心的处理器2016)的编译器。类似地,图20示出高级语言2002的程序可使用备选指令集编译器2008来编译,以便生成备选指令集二进制代码2010,其可由没有至少一个x86指令集核心的处理器2014(例如具有运行MIPS Technologies(Sunnyvale,CA)的MIPS指令集和/或运行ARM Holdings(Sunnyvale,CA)的ARM指令集的核心的处理器)本机运行。指令转换器2012用来将x86二进制代码2006转换为可由没有x86指令集核心的处理器2014本机运行的代码。这个转换代码不可能与备选指令集二进制代码2010是相同的,因为能够进行这个操作的指令转换器难以制作;但是,转换代码将实现一般操作,并且由来自备选指令集的指令来组成。因此,指令转换器2012表示软件、固件、硬件或者其组合,其经过模拟、仿真或者任何其他过程允许处理器或者没有x86指令集处理器或核心的另一电子装置运行x86二进制代码2006。
对图3-9的任一个所述的组件、特征和细节也可选地可用于图1-2的任一个中。此外,本文对本文所述设备的任一个所述的组件、特征和细节也可选地可用于和/或应用于本文所述方法的任一个,其在实施例中可由和/或采用这种设备来执行。本文所述处理器的任一个可包含在计算机系统或者本文所述的其他系统的任一个中。指令可具有本文所述的各种指令格式的任一种。
在本描述和权利要求书中,可使用术语“耦合”和/或“连接”连同其派生。这些术语不是要作为彼此的同义词。在实施例中,“连接”而是可用来表示两个或更多元件相互直接物理和/或电接触。“耦合”可表示两个或更多元件相互直接物理和/或电接触。但是,“耦合”也可表示两个或更多元件不是相互直接接触,但是仍然相互配合或交互。例如,执行单元可经过一个或多个中间组件与寄存器和/或解码单元耦合。附图中,箭头用来示出连接和耦合。
可使用术语“和/或”。如本文所使用的术语“和/或”表示一个或另一个或者两者(例如A和/或B表示A或B或者A和B)。
在以上描述中,提出了许多具体细节,以便提供对实施例的透彻了解。但是,即使没有这些具体细节的一部分也可实施其他实施例。本发明的范围不是通过以上提供的具体示例来确定,而是仅通过以下权利要求书来确定。在其他情况下,众所周知的电路、结构、装置和操作以框图形式示出和/或没有详述,以免影响对本描述的理解。在认为适当的情况下,附图中重复参考标号或者参考标号的末尾部分,以指示可选地可具有相同或相似特性的对应或相似的元件,除非另有指定或者另加明确说明。
某些操作可由硬件组件来执行,或者可包含在机器可执行或电路可执行指令中,这些指令可用来使和/或引起采用指令所编程的电路或硬件(例如处理器、处理器的部分、电路等等)执行操作。操作还可以可选地通过硬件和软件的组合来执行。处理器、机器、电路或硬件可包括特定或具体电路或另一逻辑(例如潜在地与固件和/或软件相结合的硬件),其可操作以运行和/或处理指令,并且响应指令而存储结果。
一些实施例包括制造产品(例如计算机程序产品),其包括机器可读介质。介质可包括采取机器可读的形式来提供、例如存储信息的机制。机器可读介质可提供或者其上存储了指令或指令序列,其如果和/或在由机器运行时可操作以使机器执行和/或引起机器执行本文所公开的一个或多个操作、方法或技术。机器可读介质可存储或者以其他方式提供本文所述指令的实施例的一个或多个。
在一些实施例中,机器可读介质可包括有形和/或非暂时机器可读存储介质。例如,有形和/或非暂时机器可读存储介质可包括软盘、光存储介质、光盘、光数据存储装置、CD- ROM、磁盘、磁光盘、只读存储器(ROM)、可编程ROM(PROM)、可擦可编程 ROM(EPROM)、电可擦可编程ROM(EEPROM)、随机存取存储器(RAM)、静态 RAM(SRAM)、动态RAM(DRAM)、闪速存储器、相变存储器、相变数据存储材料、非易失性存储器、非易失性数据存储装置、非暂时存储器、非暂时数据存储装置等。非暂时机器可读存储介质不是由暂时传播信号来组成。
适当机器的示例包括但不限于通用处理器、专用处理器、指令处理设备、数字逻辑电路、集成电路等。适当机器的又一些示例包括计算装置或另一电子装置,其包括处理器、指令处理设备、数字逻辑电路或集成电路。这类计算装置和电子装置的示例包括但不限于台式计算机、膝上型计算机、笔记本计算机、平板计算机、上网本、智能电话、蜂窝电话、服务器、网络装置(例如路由器和交换机)、移动因特网装置(MID)、媒体播放器、智能电视机、上网机、机顶盒和视频游戏控制器。
例如,本说明书中通篇提到“一个实施例”、“一实施例”、“一个或多个实施例”、“一些实施例”指示特定特征可包含在本发明的实践中,但是不一定要求这样。类似地,在本描述中,各种特征有时在单个实施例、附图或者其描述中集中在一起,以便简化本公开,并且帮助了解各个发明方面。但是,本公开的这种方法不应当被理解为反映本发明要求超过各权利要求中明确描述的特征的意图。如以下权利要求所反映的那样,发明方面而是在于少于单个所公开实施例的全部特征。因此,接着详细描述的权利要求书书由此明确结合到本详细描述中,其中各权利要求本身代表本发明的独立实施例。
示例实施例
以下示例涉及其他实施例。示例中的具体细节可在一个或多个实施例中的任何位置使用。
示例1是处理器,其包括解码单元以对指令进行解码。指令指示包括第一批多个数据元素的第一源打包数据操作数、指示包括多个屏蔽元素的源屏蔽以及指示目的地存储位置。执行单元与解码单元耦合。执行单元响应指令而将结果打包数据操作数存储在目的地存储位置中。结果打包数据操作数具有至少两个未屏蔽结果数据元素,其对应于源屏蔽的未屏蔽的屏蔽元素。未屏蔽结果数据元素的每个具有相同相对位位置中的第一源打包数据操作数的对应数据元素的值。每个最接近的一对未屏蔽结果数据元素之间的所有被屏蔽结果数据元素具有与最靠近结果打包数据操作数的第一端的该对的未屏蔽结果数据元素相同的值。被屏蔽结果数据元素对应于源屏蔽的被屏蔽的屏蔽元素。
示例2包括示例1的处理器,其中执行单元存储包括第一端与最靠近第一端的第一未屏蔽结果数据元素之间的至少一个被屏蔽结果数据元素的第一集合的结果打包数据操作数。
示例3包括示例2的处理器,其中解码单元对指示包括最高阶数据元素的第二源打包数据操作数的指令进行解码。又可选地,其中执行单元存储结果打包数据操作数,其中第一集合的每个被屏蔽结果数据元素具有与第二源打包数据操作数的最高阶数据元素相同的值。
示例4包括示例3的处理器,其中解码单元对隐式指示但是没有显式指定用于第二源打包数据操作数的寄存器也用作目的地存储位置的指令进行解码。
示例5包括示例3的处理器,其中执行单元存储结果打包数据操作数,其中第一端包括最低阶端。
示例6包括示例2的处理器,其中解码单元对指示包括最低阶数据元素的第二源打包数据操作数的指令进行解码。又可选地,其中执行单元存储结果打包数据操作数,其中第一集合的每个被屏蔽结果数据元素具有与第二源打包数据操作数的最低阶数据元素相同的值。
示例7包括示例5的处理器,其中执行单元存储结果打包数据操作数,其中第一端包括最高阶端。
示例8包括示例2的处理器,其中执行单元存储结果打包数据操作数,其中第一集合的每个被屏蔽结果数据元素具有相同相对位位置中的第一源打包数据操作数的对应数据元素的值。
示例9包括示例1至8的任一个的处理器,其中执行单元存储包括结果打包数据操作数的第二端与最靠近第二端的第二未屏蔽结果数据元素之间的至少一个被屏蔽结果数据元素的第二集合的结果打包数据操作数。第二集合的每个被屏蔽结果数据元素具有与第二未屏蔽结果数据元素相同的值。
示例10包括示例1至8的任一个的处理器,其中源屏蔽的各屏蔽元素由单个位组成。
示例11包括示例1至8的任一个的处理器,其中源屏蔽存储在屏蔽寄存器中,并且指令包含在具有指示作为判定打包数据操作的判定操作数的屏蔽寄存器的多个其他指令的指令集中。
示例12包括示例1至8的任一个的处理器,其中解码单元对指示存储器中的位置中的第一源打包数据操作数的指令进行解码。
示例13包括示例1至8的任一个的处理器,其中执行单元存储结果打包数据操作数,其中具有第一源打包数据操作数的对应数据元素的值的各未屏蔽结果数据元素对指令的操作码是固定的。
示例14是处理器中包括接收指令的方法。指令指示包括第一批多个数据元素的第一源打包数据操作数,指示包括多个屏蔽元素的源屏蔽,并且指示目的地存储位置。响应指令而将结果打包数据存储在目的地存储位置中。结果打包数据包括与源屏蔽的未屏蔽的屏蔽元素对应的至少两个未屏蔽结果数据元素,未屏蔽结果数据元素的每个具有相同相对位位置中的第一源打包数据操作数的对应数据元素的值。每个最接近的一对未屏蔽结果数据元素之间的所有被屏蔽结果数据元素具有与最靠近结果打包数据操作数的第一端的该对的未屏蔽结果数据元素相同的值。被屏蔽结果数据元素对应于源屏蔽的被屏蔽的屏蔽元素。
示例15包括示例14的方法,其中存储包括存储包括第一端与最靠近第一端的第一未屏蔽结果数据元素之间的至少一个被屏蔽结果数据元素的第一集合的结果打包数据操作数。
示例16包括示例15的方法,其中接收包括接收指示包括最高阶数据元素的第二源打包数据操作数的指令。又可选地,其中存储包括存储结果打包数据操作数,其中第一集合的每个被屏蔽结果数据元素具有与第二源操作数的最高阶数据元素相同的值。
示例17包括示例15的方法,其中接收包括接收指示包括最低阶数据元素的第二源打包数据操作数的指令。又可选地,其中存储包括存储结果打包数据操作数,其中第一集合的每个被屏蔽结果数据元素具有与第二源操作数的最低阶数据元素相同的值。
示例18包括示例15的方法,其中存储包括存储结果打包数据操作数,其中第一集合的每个被屏蔽结果数据元素具有相同相对位位置中的第一源打包数据操作数的对应数据元素的值。
示例19包括示例14的方法,其中存储包括存储包括第二端与最靠近第二端的第二未屏蔽结果数据元素之间的至少一个被屏蔽结果数据元素的第二集合的结果打包数据操作数。第二集合的每个被屏蔽结果数据元素具有与第二未屏蔽结果数据元素相同的值。
示例20包括示例14的方法,其中接收包括接收指示源屏蔽的指令,其中各屏蔽元素由单个位组成。
示例 21是处理指令的系统,其包括互连以及与互连耦合的处理器。处理器响应指示包括第一批多个数据元素的第一源打包数据操作数、指示包括多个屏蔽元素的源屏蔽以及指示目的地存储位置的指令可操作以将结果打包数据操作数存储在目的地存储位置中。结果打包数据操作数包括与源屏蔽的未屏蔽的屏蔽元素对应的至少两个未屏蔽结果数据元素,未屏蔽结果数据元素的每个具有相同相对位位置中的第一源打包数据操作数的对应数据元素的值。每个最接近的一对未屏蔽结果数据元素之间的所有被屏蔽结果数据元素具有与最靠近结果打包数据操作数的第一端的该对的未屏蔽结果数据元素相同的值。被屏蔽结果数据元素对应于源屏蔽的被屏蔽的屏蔽元素。系统还包括与互连耦合的动态随机存取存储器(DRAM)。 DRAM存储指令集,以便对于对基于多个条件所修改的标量值执行计算的循环进行向量化。指令集在由处理器运行时可操作以使处理器执行操作,包括评估多个条件,使该多个的屏蔽元素对于被评估为真的条件是未屏蔽的,使该多个的屏蔽元素对于被评估为假的条件是被屏蔽的,并且对结果打包数据操作数并行地执行计算。
示例22包括示例21的系统,其中处理器存储包括第一端与最靠近第一端的第一未屏蔽结果数据元素之间的至少一个被屏蔽结果数据元素的第一集合的结果打包数据操作数。又可选地,其中第一集合的每个被屏蔽结果数据元素具有与指令所指示的第二源打包数据操作数的最高阶数据元素相同的值。
示例 23包括制造产品,其中包括非暂时机器可读存储介质。非暂时机器可读存储介质存储指令。指令指示包括第一批多个数据元素的第一源打包数据操作数,指示包括多个屏蔽元素的源屏蔽,并且指示目的地存储位置。指令在由机器运行时可操作以使机器执行操作,包括响应指令而将结果打包数据操作数存储在目的地存储位置中。结果打包数据操作数包括与源屏蔽的未屏蔽的屏蔽元素对应的至少两个未屏蔽结果数据元素。未屏蔽结果数据元素的每个具有相同相对位位置中的第一源打包数据操作数的对应数据元素的值。每个最接近的一对未屏蔽结果数据元素之间的所有被屏蔽结果数据元素具有与最靠近结果打包数据操作数的第一端的该对的未屏蔽结果数据元素相同的值。被屏蔽结果数据元素对应于源屏蔽的被屏蔽的屏蔽元素。
示例24包括示例23的制造产品,其中各屏蔽元素由单个位组成,其中指令指示第二源打包数据操作数具有单个值,待存储到一个或多个最低阶被屏蔽结果数据元素的集合。
示例25包括处理器或其他设备,其可操作以执行示例14-20的任一个的方法。
示例26包括处理器或其他设备,其包括用于执行示例14-20的任一个的方法的部件。
示例27包括处理器,其包括执行示例14-20的任一个的方法的模块、单元、逻辑、电路、部件或者它们的任何组合。
示例28包括计算机系统或另一电子装置,其包括互连、与互连耦合的处理器以及与互连耦合的至少一个组件,其从DRAM、图形芯片、无线通信芯片、相变存储器和摄像机中选取,计算机系统或另一电子装置执行示例14-20的任一个的方法。
示例29包括可选的非暂时机器可读介质,其可选地存储或者以其他方式提供指令,其如果和/或在由处理器、计算机系统或另一机器运行时可操作以使机器执行示例14-20的任一个的方法。
示例30包括处理器或其他设备,其可操作以执行一个或多个操作或者基本上如本文所述的任何方法。
示例31包括处理器或其他设备,其包括用于执行一个或多个操作或者基本上如本文所述的任何方法的部件。
示例32包括处理器或其他设备,其可操作以执行基本上如本文所述的指令的任一个。
示例33包括处理器或其他设备,其包括用于执行基本上如本文所述的指令的任一个的部件。
示例34包括处理器或其他设备,其包括可操作以对第一指令集的指令进行解码的解码单元。解码单元接收一个或多个指令,其模拟可以是基本上如本文所公开的指令的任一个并且属于第二指令集的第一指令。处理器或其他设备还包括与解码单元耦合的一个或多个执行单元,以运行第一指令集的一个或多个指令。一个或多个执行单元响应第一指令集的一个或多个指令可操作以将结果存储在目的地中。结果可包括基本上如本文对第一指令所公开的结果的任一个。
示例35包括计算机系统或另一电子装置,其包括具有解码单元(其可操作以对第一指令集的指令进行解码)并且具有一个或多个执行单元的处理器。计算机系统还包括耦合到处理器的存储装置。存储装置存储第一指令,其可以是基本上如本文所公开的指令的任一个,并且属于第二指令集。存储装置还存储指令,以便将第一指令转换为第一指令集的一个或多个指令。第一指令集的一个或多个指令在由处理器运行时可操作以使处理器将结果存储在目的地中。结果可包括基本上如本文对第一指令所公开的结果的任一个。
示例36包括示例8的处理器,其中解码单元对隐式指示但是没有显式指定用于第一源打包数据操作数的寄存器也用作目的地存储位置的指令进行解码。

Claims (18)

1.一种处理器,包括:
用于对指令进行解码的解码单元,所述指令用于指示包括第一批多个数据元素的第一源打包数据操作数、用于指示包括多个屏蔽元素的源屏蔽以及用于指示目的地存储位置;以及
与所述解码单元耦合的执行单元,所述执行单元响应所述指令而用于将结果打包数据操作数存储在所述目的地存储位置中,所述结果打包数据操作数具有:
与所述源屏蔽的未屏蔽的屏蔽元素对应的至少两个未屏蔽结果数据元素,所述未屏蔽结果数据元素的每个具有所述第一源打包数据操作数的相同相对位位置中的对应数据元素的值;以及
每个最接近的一对未屏蔽结果数据元素之间的所有被屏蔽结果数据元素具有与所述一对未屏蔽结果数据元素的最靠近所述结果打包数据操作数的第一端的未屏蔽结果数据元素相同的值,所述被屏蔽结果数据元素对应于所述源屏蔽的被屏蔽的屏蔽元素,
其中所述第一端是所述结果打包数据操作数的最高阶端,
其中,执行单元用于存储包括所述第一端与最靠近所述第一端的第一未屏蔽结果数据元素之间的至少一个被屏蔽结果数据元素的第一集合的所述结果打包数据操作数,并且
其中,所述解码单元用于对指示包括最低阶数据元素的第二源打包数据操作数的所述指令进行解码,并且所述执行单元用于存储所述结果打包数据操作数,其中所述第一集合的每个被屏蔽结果数据元素具有与所述第二源打包数据操作数的最低阶数据元素相同的值,或者
其中,所述执行单元用于存储所述结果打包数据操作数,其中所述第一集合的每个被屏蔽结果数据元素具有所述第一源打包数据操作数的相同相对位位置中的对应数据元素的值。
2.一种处理器,包括:
解码单元,所述解码单元用于对指令进行解码,所述指令用于指示包括第一批多个数据元素的第一源打包数据操作数、用于指示包括最低阶数据元素和最高阶数据元素的第二源打包数据操作数、用于指示包括多个屏蔽元素的源屏蔽,以及用于指示目的地存储位置,以及
与所述解码单元耦合的执行单元,所述执行单元响应所述指令而用于将结果打包数据操作数存储在所述目的地存储位置中,所述结果打包数据操作数具有:
与所述源屏蔽的未屏蔽的屏蔽元素对应的至少两个未屏蔽结果数据元素,所述未屏蔽结果数据元素的每个具有所述第一源打包数据操作数的相同相对位位置中的对应数据元素的值;以及
每个最接近的一对未屏蔽结果数据元素之间的所有被屏蔽结果数据元素具有与所述一对未屏蔽结果数据元素的最靠近所述结果打包数据操作数的第一端的未屏蔽结果数据元素相同的值,所述被屏蔽结果数据元素对应于所述源屏蔽的被屏蔽的屏蔽元素,
所述第一端和最接近所述第一端的第一未屏蔽结果数据元素之间的至少一个被屏蔽结果数据元素的第一集合,其中所述第一集合的每个被屏蔽结果数据元素具有与所述第二源打包数据操作数的最高阶数据元素或者最低阶数据元素相同的值。
3.如权利要求2所述的处理器,其中所述解码单元用于对隐式指示但是没有显式指定用于所述第二源打包数据操作数的寄存器也用作所述目的地存储位置的所述指令进行解码。
4.如权利要求1至3中的任一项所述的处理器,其中,执行单元用于存储包括所述结果打包数据操作数的第二端与最靠近所述第二端的第二未屏蔽结果数据元素之间的至少一个被屏蔽结果数据元素的第二集合的所述结果打包数据操作数,并且所述第二集合的每个被屏蔽结果数据元素具有与所述第二未屏蔽结果数据元素相同的值。
5.如权利要求1至3中的任一项所述的处理器,其中,所述源屏蔽的各屏蔽元素由单个位组成。
6.如权利要求1至3中的任一项所述的处理器,其中,所述源屏蔽要存储在屏蔽寄存器中,并且其中所述指令被包含在具有指示作为判定打包数据操作的判定操作数的所述屏蔽寄存器的多个其他指令的指令集中。
7.如权利要求1至3中的任一项所述的处理器,其中,所述解码单元用于对指示存储器中的位置中的所述第一源打包数据操作数的所述指令进行解码。
8.如权利要求1至3中的任一项所述的处理器,其中,所述执行单元用于存储所述结果打包数据操作数,其中具有所述第一源打包数据操作数的对应数据元素的值的各未屏蔽结果数据元素对所述指令的操作码是固定的。
9.一种在处理器中的方法,包括:
接收指令,所述指令指示包括第一批多个数据元素的第一源打包数据操作数、指示包括多个屏蔽元素的源屏蔽并且指示目的地存储位置;以及
响应所述指令而将结果打包数据操作数存储在所述目的地存储位置中,所述结果打包数据操作数包括:
与所述源屏蔽的未屏蔽的屏蔽元素对应的至少两个未屏蔽结果数据元素,所述未屏蔽结果数据元素的每个具有所述第一源打包数据操作数的相同相对位位置中的对应数据元素的值;以及
每个最接近的一对未屏蔽结果数据元素之间的所有被屏蔽结果数据元素具有与所述一对未屏蔽结果数据元素的最靠近所述结果打包数据操作数的第一端的未屏蔽结果数据元素相同的值,所述被屏蔽结果数据元素对应于所述源屏蔽的被屏蔽的屏蔽元素,
其中所述第一端是所述结果打包数据操作数的最高阶端,
其中,存储包括存储所述结果打包数据操作数,所述结果打包数据操作数包括所述第一端与最靠近所述第一端的第一未屏蔽结果数据元素之间的至少一个被屏蔽结果数据元素的第一集合,并且
其中,接收包括接收指示包括最高阶数据元素的第二源打包数据操作数的所述指令,并且存储包括存储所述结果打包数据操作数,其中所述第一集合的每个被屏蔽结果数据元素具有与所述第二源打包操作数的所述最高阶数据元素相同的值,或者
其中,接收包括接收指示包括最低阶数据元素的第二源打包数据操作数的所述指令,并且存储包括存储所述结果打包数据操作数,其中所述第一集合的每个被屏蔽结果数据元素具有与所述第二源打包操作数的所述最低阶数据元素相同的值,或者
其中,存储包括存储所述结果打包数据操作数,其中所述第一集合的每个被屏蔽结果数据元素具有所述第一源打包数据操作数的相同相对位位置中的对应数据元素的值。
10.如权利要求9所述的方法,其中,存储包括存储所述结果打包数据操作数,所述结果打包数据操作数包括第二端与最靠近所述第二端的第二未屏蔽结果数据元素之间的至少一个被屏蔽结果数据元素的第二集合,并且其中所述第二集合的每个被屏蔽结果数据元素具有与所述第二未屏蔽结果数据元素相同的值。
11.如权利要求9所述的方法,其中,接收包括接收指示所述源屏蔽的所述指令,其中各屏蔽元素由单个位组成。
12.一种处理指令的系统,包括:
互连;
与所述互连耦合的处理器,所述处理器响应指示包括第一批多个数据元素的第一源打包数据操作数、指示包括多个屏蔽元素的源屏蔽以及指示目的地存储位置的指令可操作以将结果打包数据操作数存储在所述目的地存储位置中,所述结果打包数据操作数包括:
与所述源屏蔽的未屏蔽的屏蔽元素对应的至少两个未屏蔽结果数据元素,所述未屏蔽结果数据元素的每个具有所述第一源打包数据操作数的相同相对位位置中的对应数据元素的值;以及
每个最接近的一对未屏蔽结果数据元素之间的所有被屏蔽结果数据元素具有与所述一对未屏蔽结果数据元素的最靠近所述结果打包数据操作数的第一端的未屏蔽结果数据元素相同的值,所述被屏蔽结果数据元素对应于所述源屏蔽的被屏蔽的屏蔽元素,其中所述第一端是所述结果打包数据操作数的最高阶端;以及
与所述互连耦合的动态随机存取存储器DRAM,所述DRAM存储指令集,以便对基于多个条件所修改的标量值执行计算的循环进行向量化,所述指令集在由所述处理器运行时可操作以使所述处理器执行操作,包括:
评估所述多个条件;
使所述多个屏蔽元素对于被评估为真的条件成为未屏蔽的;
使所述多个屏蔽元素对于被评估为假的条件成为被屏蔽的;以及
对所述结果打包数据操作数并行地执行所述计算,
其中,所述处理器用于存储包括所述第一端与最靠近所述第一端的第一未屏蔽结果数据元素之间的至少一个被屏蔽结果数据元素的第一集合的所述结果打包数据操作数,并且其中所述第一集合的每个被屏蔽结果数据元素具有与所述指令所指示的第二源打包数据操作数的最高阶数据元素相同的值。
13.一种处理器,包括用于执行如权利要求9-11中的任一项所述的方法的部件。
14.一种制造产品,包括非暂时机器可读存储介质,其存储指令,所述指令在由机器运行时可操作以使所述机器执行如权利要求9-11中的任一项所述的方法。
15.一种计算机系统,包括:
互连;
与所述互连耦合的处理器;以及
与所述互连耦合的动态随机存取存储器DRAM,所述计算机系统可操作以执行如权利要求9-11中的任一项所述的方法。
16.一种在处理器中的装置,包括:
用于接收指令的部件,所述指令指示包括第一批多个数据元素的第一源打包数据操作数、指示包括多个屏蔽元素的源屏蔽,并且指示目的地存储位置;以及
用于响应所述指令而将结果打包数据操作数存储在所述目的地存储位置中的部件,所述结果打包数据操作数包括:
与所述源屏蔽的未屏蔽的屏蔽元素对应的至少两个未屏蔽结果数据元素,所述未屏蔽结果数据元素的每个具有所述第一源打包数据操作数的相同相对位位置中的对应数据元素的值;以及
每个最接近的一对未屏蔽结果数据元素之间的所有被屏蔽结果数据元素具有与所述一对未屏蔽结果数据元素的最靠近所述结果打包数据操作数的第一端的未屏蔽结果数据元素相同的值,所述被屏蔽结果数据元素对应于所述源屏蔽的被屏蔽的屏蔽元素,
其中所述第一端是所述结果打包数据操作数的最高阶端,
其中,所述结果打包数据操作数包括所述第一端与最靠近所述第一端的第一未屏蔽结果数据元素之间的至少一个被屏蔽结果数据元素的第一集合,以及
其中,所述指令指示包括最高阶数据元素的第二源打包数据操作数,并且所述第一集合的每个被屏蔽结果数据元素具有与所述第二源打包操作数的所述最高阶数据元素相同的值,或者
其中,所述指令指示包括最低阶数据元素的第二源打包数据操作数,并且所述第一集合的每个被屏蔽结果数据元素具有与所述第二源打包操作数的所述最低阶数据元素相同的值,或者
其中,所述第一集合的每个被屏蔽结果数据元素具有所述第一源打包数据操作数的相同相对位位置中的对应数据元素的值。
17.如权利要求16所述的装置,其中,所述结果打包数据操作数包括第二端与最靠近所述第二端的第二未屏蔽结果数据元素之间的至少一个被屏蔽结果数据元素的第二集合,并且其中所述第二集合的每个被屏蔽结果数据元素具有与所述第二未屏蔽结果数据元素相同的值。
18.如权利要求16所述的装置,其中,所述指令指示所述源屏蔽,其中各屏蔽元素由单个位组成。
CN201480076434.8A 2014-03-28 2014-03-28 用于执行采用传播的被屏蔽源元素存储指令的处理器及其方法 Active CN106030514B (zh)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/IB2014/000624 WO2015145193A1 (en) 2014-03-28 2014-03-28 Processors, methods, systems, and instructions to store source elements to corresponding unmasked result elements with propagation to masked result elements

Publications (2)

Publication Number Publication Date
CN106030514A CN106030514A (zh) 2016-10-12
CN106030514B true CN106030514B (zh) 2022-09-13

Family

ID=50884426

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201480076434.8A Active CN106030514B (zh) 2014-03-28 2014-03-28 用于执行采用传播的被屏蔽源元素存储指令的处理器及其方法

Country Status (6)

Country Link
US (1) US10223119B2 (zh)
EP (1) EP3123300A1 (zh)
JP (1) JP6419205B2 (zh)
KR (1) KR101818985B1 (zh)
CN (1) CN106030514B (zh)
WO (1) WO2015145193A1 (zh)

Families Citing this family (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101826707B1 (ko) 2014-03-27 2018-02-07 인텔 코포레이션 마스킹된 결과 요소들로의 전파를 이용하여 연속 소스 요소들을 마스킹되지 않은 결과 요소들에 저장하기 위한 프로세서, 방법, 시스템 및 명령어
CN106030514B (zh) 2014-03-28 2022-09-13 英特尔公司 用于执行采用传播的被屏蔽源元素存储指令的处理器及其方法
US10891131B2 (en) * 2016-09-22 2021-01-12 Intel Corporation Processors, methods, systems, and instructions to consolidate data elements and generate index updates
EP3336692B1 (en) 2016-12-13 2020-04-29 Arm Ltd Replicate partition instruction
EP3336691B1 (en) * 2016-12-13 2022-04-06 ARM Limited Replicate elements instruction
CN106886642A (zh) * 2017-02-13 2017-06-23 中国电子科技集团公司第五十四研究所 一种低功耗高可配的总线桥接电路设计方法
GB2568230B (en) * 2017-10-20 2020-06-03 Graphcore Ltd Processing in neural networks
US10963253B2 (en) * 2018-07-10 2021-03-30 Arm Limited Varying micro-operation composition based on estimated value of predicate value for predicated vector instruction
US11256987B1 (en) 2021-06-02 2022-02-22 SambaNova Systems, Inc. Memory efficient dropout, with reordering of dropout mask elements
US11328209B1 (en) 2021-06-02 2022-05-10 SambaNova Systems, Inc. Dual cycle tensor dropout in a neural network

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20100042789A1 (en) * 2008-08-15 2010-02-18 Apple Inc. Check-hazard instructions for processing vectors
WO2013095617A1 (en) * 2011-12-23 2013-06-27 Intel Corporation Apparatus and method for propagating conditionally evaluated values in simd/vector execution
TW201344570A (zh) * 2011-12-30 2013-11-01 Intel Corp 緊縮旋轉處理器、方法、系統與指令

Family Cites Families (25)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4180861A (en) * 1978-03-31 1979-12-25 Ncr Corporation Selectively operable mask generator
US6266769B1 (en) * 1998-04-30 2001-07-24 Intel Corporation Conversion between packed floating point data and packed 32-bit integer data in different architectural registers
US6356951B1 (en) * 1999-03-01 2002-03-12 Sun Microsystems, Inc. System for parsing a packet for conformity with a predetermined protocol using mask and comparison values included in a parsing instruction
US6993148B1 (en) * 1999-07-16 2006-01-31 Canon Kabushiki Kaisha Image processing apparatus and method, and storage medium
US20040054877A1 (en) * 2001-10-29 2004-03-18 Macy William W. Method and apparatus for shuffling data
US20100325399A1 (en) * 2008-08-15 2010-12-23 Apple Inc. Vector test instruction for processing vectors
US20110283092A1 (en) * 2008-08-15 2011-11-17 Apple Inc. Getfirst and assignlast instructions for processing vectors
US8793472B2 (en) * 2008-08-15 2014-07-29 Apple Inc. Vector index instruction for generating a result vector with incremental values based on a start value and an increment value
US8271832B2 (en) * 2008-08-15 2012-09-18 Apple Inc. Non-faulting and first-faulting instructions for processing vectors
US8984262B2 (en) 2008-08-15 2015-03-17 Apple Inc. Generate predicates instruction for processing vectors
US8959316B2 (en) * 2008-08-15 2015-02-17 Apple Inc. Actual instruction and actual-fault instructions for processing vectors
US8417921B2 (en) 2008-08-15 2013-04-09 Apple Inc. Running-min and running-max instructions for processing vectors using a base value from a key element of an input vector
US20110035568A1 (en) 2008-08-15 2011-02-10 Apple Inc. Select first and select last instructions for processing vectors
US8650383B2 (en) * 2008-08-15 2014-02-11 Apple Inc. Vector processing with predicate vector for setting element values based on key element position by executing remaining instruction
US8447956B2 (en) * 2008-08-15 2013-05-21 Apple Inc. Running subtract and running divide instructions for processing vectors
US9086872B2 (en) 2009-06-30 2015-07-21 Intel Corporation Unpacking packed data in multiple lanes
JP5506273B2 (ja) * 2009-07-31 2014-05-28 富士フイルム株式会社 画像処理装置及び方法、データ処理装置及び方法、並びにプログラム
US20120254592A1 (en) 2011-04-01 2012-10-04 Jesus Corbal San Adrian Systems, apparatuses, and methods for expanding a memory source into a destination register and compressing a source register into a destination memory location
US20120254588A1 (en) 2011-04-01 2012-10-04 Jesus Corbal San Adrian Systems, apparatuses, and methods for blending two source operands into a single destination using a writemask
US9268569B2 (en) * 2012-02-24 2016-02-23 Apple Inc. Branch misprediction behavior suppression on zero predicate branch mispredict
US9116686B2 (en) * 2012-04-02 2015-08-25 Apple Inc. Selective suppression of branch prediction in vector partitioning loops until dependency vector is available for predicate generating instruction
US9501276B2 (en) * 2012-12-31 2016-11-22 Intel Corporation Instructions and logic to vectorize conditional loops
US20140289502A1 (en) 2013-03-19 2014-09-25 Apple Inc. Enhanced vector true/false predicate-generating instructions
KR101826707B1 (ko) 2014-03-27 2018-02-07 인텔 코포레이션 마스킹된 결과 요소들로의 전파를 이용하여 연속 소스 요소들을 마스킹되지 않은 결과 요소들에 저장하기 위한 프로세서, 방법, 시스템 및 명령어
CN106030514B (zh) 2014-03-28 2022-09-13 英特尔公司 用于执行采用传播的被屏蔽源元素存储指令的处理器及其方法

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20100042789A1 (en) * 2008-08-15 2010-02-18 Apple Inc. Check-hazard instructions for processing vectors
WO2013095617A1 (en) * 2011-12-23 2013-06-27 Intel Corporation Apparatus and method for propagating conditionally evaluated values in simd/vector execution
TW201344570A (zh) * 2011-12-30 2013-11-01 Intel Corp 緊縮旋轉處理器、方法、系統與指令

Also Published As

Publication number Publication date
JP6419205B2 (ja) 2018-11-07
WO2015145193A1 (en) 2015-10-01
KR20160113704A (ko) 2016-09-30
US10223119B2 (en) 2019-03-05
JP2017509064A (ja) 2017-03-30
KR101818985B1 (ko) 2018-02-28
EP3123300A1 (en) 2017-02-01
US20170017487A1 (en) 2017-01-19
CN106030514A (zh) 2016-10-12

Similar Documents

Publication Publication Date Title
CN109478139B (zh) 用于共享存储器中的访问同步的装置、方法和系统
CN106030514B (zh) 用于执行采用传播的被屏蔽源元素存储指令的处理器及其方法
CN111177647A (zh) 实行16位浮点矩阵点积指令的系统和方法
US20160179523A1 (en) Apparatus and method for vector broadcast and xorand logical instruction
CN107003846B (zh) 用于向量索引加载和存储的方法和装置
CN107924308B (zh) 数据元素比较处理器、方法、系统和指令
US9268626B2 (en) Apparatus and method for vectorization with speculation support
CN107967149B (zh) 从源写掩码寄存器在目的地写掩码寄存器中设置输出掩码的系统、装置和方法
CN107924307B (zh) 按索引分散至寄存器以及数据元素重布置处理器、方法、系统和指令
CN104081340B (zh) 用于数据类型的下转换的装置和方法
CN107111484B (zh) 四维莫顿坐标转换处理器、方法、系统和指令
CN113076139A (zh) 用于执行指令以转换成16位浮点格式的系统和方法
WO2014004050A2 (en) Systems, apparatuses, and methods for performing a shuffle and operation (shuffle-op)
CN109313553B (zh) 用于跨步加载的系统、装置和方法
CN107111554B (zh) 用于在加载数据元素以供执行时考虑空间局部性的装置和方法
US10521226B2 (en) Efficient implementation of complex vector fused multiply add and complex vector multiply
CN107257955B (zh) 快速向量动态存储器冲突检测
CN107003848B (zh) 用于融合乘法-乘法指令的装置和方法
CN108268279B (zh) 用于广播算术操作的系统、装置和方法
CN109643235B (zh) 用于多源混合操作的装置、方法和系统
KR101826707B1 (ko) 마스킹된 결과 요소들로의 전파를 이용하여 연속 소스 요소들을 마스킹되지 않은 결과 요소들에 저장하기 위한 프로세서, 방법, 시스템 및 명령어
US20130332701A1 (en) Apparatus and method for selecting elements of a vector computation
CN107003841B (zh) 用于融合加法-加法指令的装置和方法
CN107077333B (zh) 用于实行向量位聚集的方法和装置
US20190138303A1 (en) Apparatus and method for vector horizontal logical instruction

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