CN107003851A - 用于压缩掩码值的方法和装置 - Google Patents
用于压缩掩码值的方法和装置 Download PDFInfo
- Publication number
- CN107003851A CN107003851A CN201580064602.6A CN201580064602A CN107003851A CN 107003851 A CN107003851 A CN 107003851A CN 201580064602 A CN201580064602 A CN 201580064602A CN 107003851 A CN107003851 A CN 107003851A
- Authority
- CN
- China
- Prior art keywords
- mask register
- bit
- bits
- field
- 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.)
- Pending
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30018—Bit or string instructions
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30025—Format conversion instructions, e.g. Floating-Point to Integer, decimal conversion
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30032—Movement instructions, e.g. MOVE, SHIFT, ROTATE, SHUFFLE
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30036—Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30036—Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
- G06F9/30038—Instructions to perform operations on packed data, e.g. vector, tile or matrix operations using a mask
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30098—Register arrangements
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30098—Register arrangements
- G06F9/30101—Special purpose registers
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)
Abstract
一种用于掩码压缩的装置和方法。例如,处理器的一个实施例包括:源掩码寄存器,用以存储包括多个已设置位和多个未设置的位的多个掩码位;目的地掩码寄存器,用以存储从所述源掩码寄存器中读取的已设置位;以及掩码压缩逻辑,用以从所述源掩码寄存器中读取所述已设置位中的每一个并且用以将所述已设置位存储在所述目的地掩码寄存器的一侧上的连续的位位置中。
Description
技术领域
本发明一般地涉及计算机处理器的领域。更特别地,本发明涉及用于压缩掩码值的方法和装置。
背景技术
指令集或指令集架构(ISA)是与编程相关的计算机架构的部分,其包括原生数据类型、指令、寄存器架构、寻址模式、存储器架构、中断和异常处置、以及外部输入和输出(I/O)。应注意到,术语“指令”在本文中一般指代与微指令或微运算(其是处理器的解码器解码宏指令的结果)相对的宏指令(其是被提供给处理器以用于执行的指令)。微指令或微运算可以被配置成命令处理器上的执行单元实行运算以实现与所述宏指令相关联的逻辑。
ISA不同于微架构,微架构是用于实现指令集的处理器设计技术的集合。具有不同微架构的处理器可以共享公共指令集。例如,英特尔®奔腾4处理器、英特尔®酷睿™处理器以及来自加州桑尼维尔的超微半导体公司(Advanced Micro Devices, Inc)的处理器实现几乎相同版本的x86指令集(其中已经被添加有较新版本的一些扩展),但是具有不同的内部设计。例如,可以使用公知技术在不同的微架构中以不同方式实现相同的ISA寄存器架构,所述公知技术包括专用物理寄存器、使用寄存器重命名机制(例如,使用寄存器别名表(RAT)、重排序缓冲器(ROB)以及引退寄存器文件)的一个或多个动态分配物理寄存器。除非另外指明,否则本文中使用短语寄存器架构、寄存器文件和寄存器来指代对软件/编程者可见的内容以及指令指定寄存器所处于的方式。在需要区分的情况下,将使用形容词“逻辑的”、“架构的”或“软件可见的”来指示寄存器架构中的寄存器/文件,同时将使用不同的形容词来指明给定的微架构中的寄存器(例如,物理寄存器、重排序缓冲器、引退寄存器、寄存器池)。
指令集包括一个或多个指令格式。给定的指令格式定义各种字段(位的数目、位的位置)来(除其它之外)指定要实行的运算以及要对其实行运算的(一个或多个)运算元。通过指令模板(或子格式)的定义来进一步分解一些指令格式。例如,给定指令格式的指令模板可以被定义成具有指令格式的字段的不同子集(所包括的字段通常是以相同的顺序,但是至少某些具有不同的位位置,因为包括了较少的字段)和/或被定义成具有以不同方式解释的给定字段。使用给定的指令格式(并且如果定义了的话,以该指令格式的指令模板中的给定的一个)来表达给定的指令,并且所述给定的指令指定运算和运算元。指令流是特定的指令序列,其中该序列中的每个指令是指令以指令格式(并且如果定义了的话,该指令格式的指令模板中的给定的一个)的出现。
附图说明
可以从结合附图的以下详细描述获得对本发明的更好理解,在附图中:
图1A和1B是根据本发明的实施例的图示出通用向量友好指令格式以及其指令模板的框图;
图2A-D是根据本发明的实施例的图示出示例性特定向量友好指令格式的框图;
图3是根据本发明的一个实施例的寄存器架构的框图;以及
图4A是根据本发明的实施例的图示出示例性有序提取、解码、引退流水线以及示例性寄存器重命名、无序发布/执行流水线二者的框图;
图4B是根据本发明的实施例的图示出有序提取、解码、引退核心的示例性实施例以及要被包括在处理器中的示例性寄存器重命名、无序发布/执行架构核心二者的框图;
图5A是单个处理器核心以及其到管芯上(on-die)互连网络的连接的框图;
图5B图示出根据本发明的实施例的图5A中的处理器核心的一部分的展开图;
图6是根据本发明的实施例的具有集成存储器控制器和图形模块(graphics)的单核处理器和多核处理器的框图;
图7图示出根据本发明的一个实施例的系统的框图;
图8图示出根据本发明的实施例的第二系统的框图;
图9图示出根据本发明的实施例的第三系统的框图;
图10图示出根据本发明的实施例的片上系统(SoC)的框图;
图11图示出根据本发明的实施例的对照用以将源指令集中的二进制指令转换成目标指令集中的二进制指令的软件指令转换器的使用的框图;
图12图示出可以在其上实现本发明的实施例的示例性处理器;
图13图示出根据本发明的一个实施例的掩码压缩逻辑;
图14图示出根据本发明的另一实施例的掩码压缩逻辑;以及
图15图示出根据本发明的一个实施例的方法。
具体实施方式
在以下描述中,出于解释的目的,阐述众多具体细节以便提供对下面描述的本发明的实施例的透彻理解。然而,对于本领域技术人员来说将会显而易见的是,可以在没有这些具体细节中的某些的情况下实践本发明的实施例。在其它情况下,以框图形式示出公知的结构和设备以避免使本发明的实施例的根本原理变晦涩。
示例性处理器架构以及数据类型
指令集包括一个或多个指令格式。给定的指令格式定义各种字段(位的数量、位的位置)来(除其它之外)指定要实行的运算(运算码)以及要对其实行运算的(一个或多个)运算元。通过指令模板(或子格式)的定义来进一步分解一些指令格式。例如,给定指令格式的指令模板可以被定义成具有指令格式的字段的不同子集(所包括的字段通常是以相同的顺序,但是至少某些具有不同的位位置,因为包括了较少的字段)和/或被定义成具有以不同方式解释的给定字段。因此,使用给定的指令格式(并且如果定义了的话,以该指令格式的指令模板中的给定的一个)来表达ISA的每个指令,并且所述指令包括用于指定运算和运算元的字段。例如,示例性ADD指令具有特定运算码和指令格式,所述指令格式包括用以指定该运算码的运算码字段以及用以选择运算元(源1/目的地以及源2)的运算元字段;并且该ADD指令在指令流中的出现将在运算元字段中具有选择特定运算元的特定内容。已经发表和/或出版了称为高级向量扩展(AVX)(AVX1和AVX2)且使用向量扩展(VEX)编码方案的SIMD扩展集(例如,参见英特尔®64和IA-32架构软件开发者手册,2011年10月;并且参见英特尔®高级向量扩展编程参考,2011年6月)。
示例性指令格式
本文中描述的(一个或多个)指令的实施例可以以不同的格式来体现。附加地,下文详述了示例性系统、架构和流水线。可以在此类系统、架构和流水线上执行(一个或多个)指令的实施例,但是所述实施例不限于那些详述的内容。
A. 通用向量友好指令格式
向量友好指令格式是适用于向量指令(例如,存在特定于向量运算的某些字段)的指令格式。虽然描述了其中通过向量友好指令格式支持向量和标量运算二者的实施例,但是替换实施例仅使用向量友好指令格式的向量运算。
图1A-1B是根据本发明的实施例的图示出通用向量友好指令格式以及其指令模板的框图。图1A是根据本发明的实施例的图示出通用向量友好指令格式以及其A类指令模板的框图;而图1B是根据本发明的实施例的图示出通用向量友好指令格式以及其B类指令模板的框图。具体来说,针对其定义了A类和B类指令模板的通用向量友好指令格式100,其二者都包括无存储器访问105指令模板和存储器访问120指令模板。在向量友好指令格式的情境中,术语通用指代没有被绑定至任何特定指令集的指令格式。
虽然将要描述其中向量友好指令格式支持以下内容的本发明的实施例:具有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字节向量运算元)。
图1A中的A类指令模板包括:1)在无存储器访问105指令模板内示出无存储器访问、全舍入(full round)控制类型运算110指令模板和无存储器访问、数据变换类型运算115指令模板;以及2)在存储器访问120指令模板内示出存储器访问、暂时性125指令模板以及存储器访问、非暂时性130指令模板。图1B中的B类指令模板包括:1)在无存储器访问105指令模板内示出无存储器访问、写掩码控制、部分舍入(partial round)控制类型运算112指令模板和无存储器访问、写掩码控制、vsize类型运算117指令模板;以及2)在存储器访问120指令模板内示出存储器访问、写掩码控制127指令模板。
通用向量友好指令格式100包括下文中以在图1A-1B中图示出的顺序列出的以下字段。
格式字段140——该字段中的特定值(指令格式标识符值)唯一地识别向量友好指令格式,以及因而的在指令流中的以向量友好指令格式的指令的出现。同样地,该字段在对于仅具有通用向量友好指令格式的指令集而言不需要该字段的意义上是可选的。
基础运算字段142——其内容区分不同的基础运算。
寄存器索引字段144——其内容直接地或通过地址生成来指定源运算元和目的地运算元的位置(假设它们在寄存器中或在存储器中)。这些包括充足数量的位来从PxQ(例如,32x512、16x128、32x1024、64x1024)的寄存器文件中选择N个寄存器。虽然在一个实施例中N可以多达三个源和一个目的地寄存器,但是替换实施例可以支持更多或更少个源和目的地寄存器(例如,可以支持多达两个源,其中,这些源中的一个还充当目的地;可以支持多达三个源,其中,这些源中的一个还充当目的地;可以支持多达两个源和一个目的地)。
修饰符字段146——其内容将指定存储器访问的以通用向量友好指令格式的指令的出现与不指定存储器访问的指令的出现进行区分;即,在无存储器访问105指令模板和存储器访问120指令模板之间进行区分。存储器访问运算读取和/或写入到存储器层级(在某些情况下,使用寄存器中的值来指定源和/或目的地地址),而无存储器访问运算不读取和/或写入到存储器层级(例如,源和目的地是寄存器)。虽然在一个实施例中该字段还在三种不同方式之间进行选择以实行存储器地址计算,但是替换实施例可以支持更多、更少或不同的方式来实行存储器地址计算。
增加运算字段150——其内容区分除了基础运算之外要实行各种不同运算中的哪一个。该字段是情境特定的。在本发明的一个实施例中,该字段被划分成类字段168、α字段152和β字段154。增加运算字段150允许在单个指令而不是2、3或4个指令中实行公共运算组。
比例字段160——其内容允许针对存储器地址生成对索引字段的内容的缩放(例如,针对使用2比例*索引+基数(base)的地址生成)。
位移字段162A——其内容用作存储器地址生成的一部分(例如,针对使用2比例*索引+基数+位移的地址生成)。
位移因数字段162B(注意,位移字段162A直接在位移因数字段162B之上的并置指示使用一个或另一个)——其内容用作地址生成的一部分;其指定要被存储器访问(N)的尺寸缩放的位移因数——其中N是存储器访问中的字节数(例如,针对使用2比例*索引+基数+经缩放的位移的地址生成)。忽视冗余的低阶位,并且因此,将位移因数字段的内容乘以存储器运算元总尺寸(N)以便生成要在计算有效地址时使用的最终位移。由处理器硬件在运行时间基于全运算码字段174(本文中稍后描述)和数据操纵字段154C来确定N的值。位移字段162A和位移因数字段162B在它们不用于无存储器访问105指令模板和/或不同的实施例可以实现二者中的仅一个或一个都不实现的意义上是可选的。
数据元素宽度字段164——其内容区分要使用多个数据元素宽度中的哪一个(在一些实施例中针对所有指令;在其它实施例中针对指令中的仅某些)。该字段在如果仅支持一个数据元素宽度和/或使用运算码的某一方面支持数据元素宽度的情况下不需要该字段的意义上是可选的。
写掩码字段170——其内容基于每数据元素位置来控制目的地向量运算元中的数据元素位置是否反映基础运算和增加运算的结果。A类指令模板支持归并写掩蔽(merging-writemasking),而B类指令模板支持归并写掩蔽和归零写掩蔽二者。当归并时,向量掩码允许在(由基础运算和增加运算指定的)任何运算的执行期间保护目的地中的任何元素集合免于更新;在另一实施例中,保留其中对应掩码位具有0的目的地的每个元素的旧值。相比之下,当归零时,向量掩码允许在(由基础运算和增加运算指定的)任何运算的执行期间使目的地中的任何元素集合归零;在一个实施例中,当对应掩码位具有0值时将目的地的元素设置成0。该功能的子集是控制所实行的运算的向量长度(即,从第一个到最后一个,所修改的元素的跨度)的能力;然而,并非必要的是,所修改的元素不一定是连贯的。因此,写掩码字段170允许部分向量运算,包括加载、存储、算术、逻辑等。虽然描述了其中写掩码字段170的内容选择包含要使用的写掩码的多个写掩码寄存器中的一个(并且因而写掩码字段170的内容直接识别要实行的掩蔽)的本发明的实施例,但是替换实施例替代地或附加地允许写掩码字段170的内容直接指定要实行的掩蔽。
立即数(immediate)字段172——其内容允许指定立即数。该字段在其不存在于不支持立即数的通用向量友好格式的实现中且其不存在于不使用立即数的指令中的意义上是可选的。
类字段168——其内容区分指令的不同类。参考图1A-B,该字段的内容在A类和B类指令之间进行选择。在图1A-B中,使用圆角方形来指示在字段中存在特定值(例如,在图1A-B中,A类168A和B类168B分别针对类字段168)。
A类的指令模板
在A类的无存储器访问105指令模板的情况下,α字段152被解释为RS字段152A,其内容区分要实行不同增加运算类型中的哪一个(例如,分别针对无存储器访问、舍入类型运算110和无存储器访问、数据变换类型运算115指令模板指定舍入152A.1和数据变换152A.2),而β字段154区分要实行指定类型的运算中的哪一个。在无存储器访问105指令模板中,不存在比例字段160、位移字段162A和位移比例字段162B。
无存储器访问指令模板——全舍入控制类型运算
在无存储器访问全舍入控制类型运算110指令模板中,β字段154被解释为舍入控制字段154A,其(一个或多个)内容提供静态舍入。虽然在所描述的本发明的实施例中舍入控制字段154A包括抑制所有浮点异常(SAE)字段156和舍入运算控制字段158,但是替换实施例可以支持可以将这两个概念编码到同一字段中或仅具有这些概念/字段中的一个或另一个(例如,可以仅具有舍入运算控制字段158)。
SAE字段156——其内容区分是否要禁用异常事件报告;当SAE字段156的内容指示启用抑制时,给定的指令不报告任何种类的浮点异常标记,并且不引起任何浮点异常处置程序。
舍入运算控制字段158——其内容区分要实行一组舍入运算(例如,上舍入、下舍入、向零舍入以及向最近舍入)中的哪一个。因此,舍入运算控制字段158允许基于每个指令改变舍入模式。在其中处理器包括控制寄存器以用于指定舍入模式的本发明的一个实施例中,舍入运算控制字段150的内容覆盖(override)该寄存器值。
无存储器访问指令模板——数据变换类型运算
在无存储器访问数据变换类型运算115指令模板中,β字段154被解释为数据变换字段154B,其内容区分要实行多个数据变换(例如,无数据变换、拌和(swizzle)、广播)中的哪一个。
在A类的存储器访问120指令模板的情况下,α字段152被解释为驱逐提示字段152B,其内容区分要使用驱逐提示中的哪一个(在图1A中,分别针对存储器访问、暂时性125指令模板和存储器访问、非暂时性130指令模板指定暂时性152B.1和非暂时性152B.2),而β字段154被解释为数据操纵字段154C,其内容区分要实行多个数据操纵运算(也称为原语)(例如,无操纵、广播、源的上转换以及目的地的下转换)中的哪一个。存储器访问120指令模板包括比例字段160以及可选地包括位移字段162A或位移比例字段162B。
向量存储器指令实行从存储器的向量加载和到存储器的向量存储,具有转换支持。正如常规向量指令那样,向量存储器指令以逐个数据元素的方式从/向存储器传输数据,其中通过被选为写掩码的向量掩码的内容来命令实际传输的元素。
存储器访问指令模板——暂时性
暂时性数据是很可能足够快地被再次使用以从高速缓存获益的数据。然而,这是一种提示,并且不同的处理器可以以不同的方式实现它,包括完全忽视该提示。
存储器访问指令模板-非暂时性
非暂时性数据是不太可能足够快地被再次使用以从一级高速缓存中的高速缓存获益并且不应被给予驱逐优先级的数据。然而,这是一种提示,并且不同的处理器可以以不同的方式实现它,包括完全忽视该提示。
B类的指令模板
在B类的指令模板的情况下,α字段152被解释为写掩码控制(Z)字段152C,其内容区分由写掩码字段170控制的写掩蔽应是归并的还是归零的。
在B类无存储器访问105指令模板的情况下,β字段154的一部分被解释为RL字段157A,其内容区分要实行不同增加运算类型中的哪一个(例如,分别针对无存储器访问、写掩码控制、部分舍入控制类型运算112指令模板和无存储器访问、写掩码控制、VSIZE类型运算117指令模板而指定舍入157A.1和向量长度(VSIZE)157A.2),而β字段154的其余部分区分要实行指定类型的运算中的哪一个。在无存储器访问105指令模板中,不存在比例字段160、位移字段162A和位移比例字段162B。
在无存储器访问、写掩码控制、部分舍入控制类型运算110指令模板中,β字段154的其余部分被解释为舍入运算字段159A并禁用异常事件报告(给定的指令不报告任何种类的浮点异常标记并且不引起任何浮点异常处置程序)。
舍入运算控制字段159A——正如舍入运算控制字段158一样,其内容区分要实行一组舍入运算(例如,上舍入、下舍入、向零舍入以及向最近舍入)中的哪一个。因此,舍入运算控制字段159A允许基于每个指令改变舍入模式。在其中处理器包括控制寄存器以用于指定舍入模式的本发明的一个实施例中,舍入运算控制字段150的内容覆盖该寄存器值。
在无存储器访问、写掩码控制、VSIZE类型运算117指令模板中,β字段154的其余部分被解释为向量长度字段159B,其内容区分要对多个向量长度(例如,128、256或512字节)中的哪一个实行运算。
在B类的存储器访问120指令模板的情况下,β字段154的一部分被解释为广播字段157B,其内容区分是否要实行广播类型数据操纵运算,而β字段154的其余部分被解释为向量长度字段159B。存储器访问120指令模板包括比例字段160以及可选地包括位移字段162A或位移比例字段162B。
关于通用向量友好指令格式100,全运算码字段174被示为包括格式字段140、基础运算字段142和数据元素宽度字段164。虽然示出了其中全运算码字段174包括这些字段中的全部的一个实施例,但是全运算码字段174在不支持它们全部的实施例中包括少于这些字段的全部。全运算码字段174提供运算代码(运算码)。
增加运算字段150、数据元素宽度字段164和写掩码字段170允许基于以通用向量友好指令格式的每个指令来指定这些特征。
写掩码字段和数据元素宽度字段的组合产生了类型化指令,因为它们允许基于不同的数据元素宽度来应用掩码。
在A类和B类内发现的各种指令模板在不同的情况中是有益的。在本发明的一些实施例中,不同的处理器或处理器内的不同核心可以支持仅A类、仅B类或两个类。例如,意图用于通用计算的高性能通用无序核心可以支持仅B类,主要意图用于图形和/或科学(吞吐量)计算的核心可以支持仅A类,以及意图用于二者的核心可以支持二者(当然,具有来自两个类的模板和指令的某种混合但是不具有来自两个类的全部模板和指令的核心处于本发明的范围内)。同样,单个处理器可以包括多个核心,其全部支持相同的类或者其中不同的核心支持不同的类。例如,在具有单独的图形核心和通用核心的处理器中,主要意图用于图形和/或科学计算的图形核心中的一个可以支持仅A类,而通用核心中的一个或多个可以是支持仅B类的意图用于通用计算的具有无序执行和寄存器重命名的高性能通用核心。不具有单独的图形核心的另一处理器可以包括支持A类和B类的一个或多个通用有序或无序核心。当然,在本发明的不同实施例中,来自一个类的特征也可以被实现在另一个类中。以高级语言编写的程序将会被投放(例如,被准时化(just in time)编译或静态编译)成各种不同的可执行形式,包括:1)仅具有由目标处理器支持以用于执行的(一个或多个)类的指令的形式;或者2)具有使用全部类的指令的不同组合编写的替换例程且具有基于由当前正执行控制流程代码的处理器支持的指令来选择要执行的例程的控制流程代码的形式。
B. 示例性特定向量友好指令格式
图2是根据本发明的实施例的图示出示例性特定向量友好指令格式的框图。图2示出特定向量友好指令格式200,其在其指定了位置、尺寸、解释、和字段顺序、以及针对那些字段中的某些的值的意义上是特定的。特定向量友好指令格式200可以用于扩展x86指令集,并且因此字段中的某些与在现存x86指令集和其扩展(例如,AVX)中使用的那些类似或相同。该格式与现存x86指令集以及扩展的前缀编码字段、实际运算码字节字段、MOD R/M字段、SIB字段、位移字段以及立即数字段保持一致。图示出来自图2的字段所映射到其中的来自图1的字段。
应理解的是,虽然出于说明性目的在通用向量友好指令格式100的情境中参考特定向量友好指令格式200描述本发明的实施例,但是本发明不限于特定向量友好指令格式200,除要求保护情况以外。例如,通用向量友好指令格式100预料到用于各字段的各种可能尺寸,而特定向量友好指令格式200被示为具有特定尺寸的字段。作为特定示例,虽然数据元素宽度字段164被图示为特定向量友好指令格式200中的一位字段,但是本发明不被如此限制(即,通用向量友好指令格式100预料到其它尺寸的数据元素宽度字段164)。
通用向量友好指令格式100包括下文中以在图2A中图示出的顺序列出的以下字段。
EVEX前缀(字节0-3)202——以四字节形式编码。
格式字段140(EVEX字节0,位[7:0])——第一字节(EVEX字节0)是格式字段140,并且其包含0x62(在本发明的一个实施例中,用于区分向量友好指令格式的唯一值)。
第二到第四字节(EVEX字节1-3)包括提供特定能力的多个位字段。
REX字段205(EVEX字节1,位[7-5])——包括EVEX.R位字段(EVEX字节1,位[7]-R)、EVEX.X位字段(EVEX字节1,位[6]-X)以及157BEX字节1,位[5]-B)。EVEX.R、EVEX.X以及EVEX.B位字段提供与对应的VEX位字段相同的功能,并且使用1s补码形式来编码,即,ZMM0被编码为111B,ZMM15被编码为0000B。指令的其它字段如本领域中已知的那样编码寄存器索引的低三位(rrr、xxx和bbb),使得可以通过添加EVEX.R、EVEX.X和EVEX.B来形成Rrrr、Xxxx和Bbbb。
REX'字段110——这是REX'字段110的第一部分,并且是用于编码扩展32寄存器集中的高16个或低16个的EVEX.R'位字段(EVEX字节1,位[4]-R')。在本发明的实施例中,将该位以及如下文指示的其它位以位逆格式来存储,以(在公知的x86 32位模式中)区分于BOUND指令,所述BOUND指令的实际运算码字节是62个、但是在MOD R/M字段(下文中描述)中不接受MOD字段中的值11;本发明的替换实施例不以逆格式存储该位和下文中指示的其它位。使用值1来编码低16个寄存器。换言之,通过组合EVEX.R'、EVEX.R以及来自其它字段的其它RRR来形成R'Rrrr。
运算码映射字段215(EVEX字节1,位[3:0]-mmmm)——其内容编码暗示前导运算码字节(OF、OF 38或OF 3)。
数据元素宽度字段164(EVEX字节2,位[7]-W)——由记号EVEX.W来表示。使用EVEX.W来定义数据类型的粒度(尺寸)(32位数据元素或64位数据元素)。
EVEX.vvvv 220(EVEX字节2,位[6:3]-vvvv)——EVEX.vvvv的作用可以包括以下:1)EVEX.vvvv编码第一源寄存器运算元,其以逆(1s补码)形式指定并针对具有两个或更多个源运算元的指令有效;2)EVEX.vvvv编码目的地寄存器运算元,其以1s补码形式指定以实现某些向量移位;或者3)EVEX.vvvv不编码任何运算元,该字段被保留并应该包含1111b。因此,EVEX.vvvv字段220编码以逆(1s补码)形式存储的第一源寄存器指定符的4个低阶位。取决于指令,使用额外的不同EVEX位字段来将指定符尺寸扩展成32个寄存器。
EVEX.U 168类字段(EVEX字节2,位[2]-U)——如果EVEX.U=0,那么其指示A类或EVEX.U0;如果EVEX.U=1,那么其指示B类或EVEX.U1。
前缀编码字段225(EVEX字节2,位[1:0]-pp)——对基础运算字段提供附加位。除了对以EVEX前缀格式的旧有(legacy)SSE指令提供支持之外,这还具有使SIMD前缀紧凑的益处(EVEX前缀仅要求两个位,而不是要求字节表达SIMD前缀)。在一个实施例中,为了支持使用以旧有格式和以EVEX前缀格式二者的SIMD前缀(66H、F2H、F3H)的旧有SSE指令,这些旧有SIMD前缀被编码到SIMD前缀编码字段中;并且在运行时间,它们在被提供给解码器的PLA之前被扩充成旧有SIMD前缀(因此,PLA可以执行这些旧有指令的旧有格式和EVEX格式二者而无需修改)。虽然较新的指令可以使用EVEX前缀编码字段的内容直接作为运算码扩展,但是某些实施例为了一致性而以类似方式扩充,但是允许由这些旧有SIMD前缀指定不同的含义。替换实施例可以重新设计PLA以支持2位SIMD前缀编码,并且因此不需要扩充。
α字段152(EVEX字节3,位[7]-EH;也称为EVEX.EH、EVEX.rs、EVEX.RL、EVEX.写掩码控制以及EVEX.N;也用α图示)——如先前所述,该字段是情境特定的。
β字段154(EVEX字节3,位[6:4]-SSS,也称为EVEX.s2-0、EVEX.r2-0、EVEX.rr1、EVEX.LL0、EVEX.LLB;也用βββ图示)——如先前所述,该字段是情境特定的。
REX'字段110——这是REX'字段的其余部分,并且是可以用于编码扩展32寄存器集的中高16个或低16个的EVEX.V'位字段(EVEX字节3,位[3]-V)。以位逆格式存储该位。使用值1来编码低16个寄存器。换言之,通过组合EVEX.V、EVEX.vvvv来形成V'VVVV。
写掩码字段170(EVEX字节3,位[2:0]-kkk)——其内容如先前描述的那样指定写掩码寄存器中的寄存器的索引。在本发明的一个实施例中,具体值EVEX.kkk=000具有暗示没有写掩码用于特定指令的特殊行为(这可以以各种方式实现,包括使用与绕过掩蔽硬件的硬件或所有全部硬接线的写掩码)。
实际运算码字段230(字节4)也称为运算码字节。在该字段中指定运算码的一部分。
MOD R/M字段240(字节5)包括MOD字段242、Reg字段244和R/M字段246。如先前所述,MOD字段242的内容在存储器访问和无存储器访问运算之间进行区分。Reg字段244的作用可以总结为两种情况:编码目的地寄存器运算元或源寄存器运算元,或者被视为运算码扩展而不用于编码任何指令运算元。R/M字段246的作用包括以下:编码引用存储器地址的指令运算元,或者编码目的地寄存器运算元或源寄存器运算元。
比例、索引、基础(SIB)字节(字节6)——如先前所述,比例字段150的内容用于存储器地址生成。SIB.xxx 254和SIB.bbb 256——先前已关于寄存器索引Xxxx和Bbbb提及了这些字段的内容。
位移字段162A(字节7-10)——当MOD字段242包含10时,字节7-10是位移字段162A,并且其与旧有32位位移(disp32)起相同作用并且以字节粒度起作用。
位移因数字段162B(字节7)——当MOD字段242包含01时,字节7是位移因数字段162B。该字段的位置与旧有x86指令集8位位移(disp8)的位置相同,其以字节粒度起作用。由于disp8是扩展符号,因此其可以仅在-128和127字节偏移之间寻址;在64字节高速缓存线方面,disp8使用8位,其可以被设置成仅四个真正有用的值-128、-64、0和64;由于常常需要较大的范围,因此使用disp32;然而,disp32需要4字节。相比于disp8和disp32,位移因数字段162B是disp8的重新解释;当使用位移因数字段162B时,通过位移因数字段的内容乘以存储器运算元访问的尺寸(N)来确定实际位移。这一类型的位移被称为disp8*N。这降低了平均指令长度(单个字节用于位移但是具有大得多的范围)。这样的经压缩的位移是基于以下假设:有效位移是存储器访问的粒度的倍数,并且因此,不需要编码地址偏移的冗余低阶位。换言之,位移因数字段162B替代了旧有x86指令集8位位移。因此,以与x86指令集8位位移相同的方式来编码位移因数字段162B(因此,在ModRM/SIB编码规则中没有改变),仅有的例外是disp8被过载为disp8*N。换言之,在编码规则或编码长度中没有改变,而是仅在由硬件进行的位移值的解释中有改变(这需要将位移缩放存储器运算元的尺寸以获得逐字节的地址偏移)。
立即数字段172如先前所述地进行运算。
全运算码字段
图2B是根据本发明的一个实施例的图示出构成全运算码字段174的特定向量友好指令格式200的字段的框图。具体来说,全运算码字段174包括格式字段140、基础运算字段142和数据元素宽度(W)字段164。基础运算字段142包括前缀编码字段225、运算码映射字段215以及实际运算码字段230。
寄存器索引字段
图2C是根据本发明的一个实施例的图示出构成寄存器索引字段144的特定向量友好指令格式200的字段的框图。具体来说,寄存器索引字段144包括REX字段205、REX'字段210、MODR/M.reg字段244、MODR/M.r/m字段246、VVVV字段220、xxx字段254以及bbb字段256。
增加运算字段
图2D是根据本发明的一个实施例的图示出构成增加运算字段150的特定向量友好指令格式200的字段的框图。当类(U)字段168包含0时,其表示EVEX.U0(A类168A);当其包含1时,其表示EVEX.U1(B类168B)。当U=0且MOD字段242包含11(表示无存储器访问运算)时,α字段152(EVEX字节3,位[7]-EH)被解释为rs字段152A。当rs字段152A包含1(舍入152A.1)时,β字段154(EVEX字节3,位[6:4]-SSS)被解释为舍入控制字段154A。舍入控制字段154A包括一位SAE字段156以及两位舍入运算字段158。当rs字段152A包含0(数据变换152A.2)时,β字段154(EVEX字节3,位[6:4]-SSS)被解释为三位数据变换字段154B。当U=0并且MOD字段242包含00、01或10(表示存储器访问运算)时,α字段152(EVEX字节3,位[7]-EH)被解释为驱逐提示(EH)字段152B并且β字段154(EVEX字节3,位[6:4]-SSS)被解释为三位数据操纵字段154C。
当U=1时,α字段152(EVEX字节3,位[7]-EH)被解释为写掩码控制(Z)字段152C。当U=1且MOD字段242包含11(表示无存储器访问运算)时,β字段154的一部分(EVEX字节3,位[4]-S0)被解释为RL字段157A;当其包含1(舍入157A.1)时,β字段154的其余部分(EVEX字节3,位[6-5]-S2-1)被解释为舍入运算字段159A,而当RL字段157A包含0(VSIZE 157.A2)时,β字段154的其余部分(EVEX字节3,位[6-5]-S2-1)被解释为向量长度字段159B(EVEX字节3,位[6-5]-L1-0)。当U=1并且MOD字段242包含00、01或10(表示存储器访问运算)时,β字段154(EVEX字节3,位[6:4]-SSS)被解释为向量长度字段159B(EVEX字节3,位[6-5]-L1-0)以及广播字段157B(EVEX字节3,位[4]-B)。
C. 示例性寄存器架构
图3是根据本发明的一个实施例的寄存器架构300的框图。在图示出的实施例中,存在512位宽的32个向量寄存器310;这些寄存器被引用为zmm0到zmm31。低16个zmm寄存器的低阶256位覆盖在寄存器ymm0-16上。低16个zmm寄存器的低阶128位(ymm寄存器的低阶128位)覆盖在寄存器xmm0-15上。特定向量友好指令格式200在如下面的表格中说明的这些覆盖寄存器文件上进行运算。
换言之,向量长度字段159B在最大长度和一个或多个其它较短长度之间进行选择,其中每个这样的较短长度是前一长度的长度的一半;并且不具有向量长度字段159B的指令模板在最大向量长度上进行运算。此外,在一个实施例中,特定向量友好指令格式200的B类指令模板对打包或标量单精度/双精度浮点数据以及打包或标量整数数据进行运算。标量运算是对zmm/ymm/xmm寄存器中的最低阶数据元素位置实行的运算;较高阶数据元素位置取决于实施例而要么保留与它们在指令之前相同,要么被归零。
写掩码寄存器315——在图示出的实施例中,存在8个写掩码寄存器(k0到k7),每一个在尺寸上都是64位。在替换实施例中,写掩码寄存器315在尺寸上是16位。如先前所述,在本发明的一个实施例中,向量掩码寄存器k0不能用作写掩码;当通常指示k0的编码用于写掩码时,其选择硬接线的写掩码0xFFFF,有效地针对该指令禁用了写掩蔽。
通用寄存器325——在图示出的实施例中,存在16个64位通用寄存器,其与现存的x86寻址模式一起用来寻址存储器运算元。通过名称RAX、RBX、RCX、RDX、RBP、RSI、RDI、RSP以及R8到R15来引用这些寄存器。
标量浮点堆栈寄存器文件(x87堆栈)345(其别名为MMX打包整数扁平寄存器文件350)——在图示出的实施例中,x87堆栈是用于对使用x87指令集扩展的32/64/80位浮点数据实行标量浮点运算的8元素堆栈;而MMX寄存器被用来对64位打包整数数据实行运算以及保存用于在MMX和XMM寄存器之间实行的一些运算的运算元。
本发明的替换实施例可以使用更宽或更窄的寄存器。附加地,本发明的替换实施例可以使用更多、更少或不同的寄存器文件和寄存器。
D. 示例性核心架构、处理器和计算机架构
处理器核心可以以不同方式实现、用于不同目的以及被实现在不同的处理器中。例如,这样的核心的实现方式可以包括:1)意图用于通用计算的通用有序核心;2)意图用于通用计算的高性能通用无序核心;3)主要意图用于图形和/或科学(吞吐量)计算的专用核心。不同处理器的实现方式可以包括:1)包括意图用于通用计算的一个或多个通用有序核心和/或意图用于通用计算的一个或多个通用无序核心的CPU;以及2)包括主要意图用于图形和/或科学(吞吐量)的一个或多个专用核心的协处理器。这样的不同处理器导致不同的计算机系统架构,其可以包括:1)在与CPU分离的芯片上的协处理器;2)在与CPU相同的封装中的分离管芯上的协处理器;3)在与CPU相同的管芯上的协处理器(在该情况下,这样的协处理器有时也称为专用逻辑,诸如集成图形和/或科学(吞吐量)逻辑,或者称为专用核心);以及4)可以包括在所述CPU的相同管芯上的片上系统(有时也称为(一个或多个)应用核心或(一个或多个)应用处理器),上述协处理器以及附加功能。接下来描述示例性核心架构,随后是示例性处理器和计算机架构的描述。
图4A是根据本发明的实施例的图示出示例性有序流水线以及示例性寄存器重命名、无序发布/执行流水线二者的框图。图4B是根据本发明的实施例的图示出有序架构核心的示例性实施例以及要被包括在处理器中的示例性寄存器重命名、无序发布/执行架构核心二者的框图。图4A-B中的实线框图示出有序流水线和有序核心,而虚线框的可选附加项图示出寄存器重命名、无序发布/执行流水线和核心。假设有序方面是无序方面的子集,将描述无序方面。
在图4A中,处理器流水线400包括提取阶段402、长度解码阶段404、解码阶段406、分配阶段408、重命名阶段410、调度(也称为派遣或发布)阶段412、寄存器读取/存储器读取阶段414、执行阶段416、写回/存储器写入阶段418、异常处置阶段422以及提交阶段424。
图4B示出处理器核心490,其包括被耦合到执行引擎单元450的前端单元430,并且这两个单元都被耦合到存储器单元470。核心490可以是精简指令集计算(RISC)核心、复杂指令集计算(CISC)核心、超长指令字(VLIW)核心或者混合或替换核心类型。作为又一选项,核心490可以是专用核心,诸如例如,网络或通信核心、压缩引擎、协处理器核心、通用计算图形处理单元(GPGPU)核心、图形核心等。
前端单元430包括分支预测单元432,其被耦合到指令高速缓存单元434,该指令高速缓存单元434被耦合到指令转译后备缓冲器(TLB)436,该指令转译后备缓冲器(TLB)436被耦合到指令提取单元438,该指令提取单元438被耦合到解码单元440。解码单元440(或解码器)可以解码指令,并且作为输出生成解码自原始指令、或以其它方式反映原始指令、或导出自原始指令的一个或多个微运算、微代码进入点、微指令、其它指令或其它控制信号。可以使用各种不同机制来实现解码单元440。适当机制的示例包括但不限于,查找表、硬件实现方式、可编程逻辑阵列(PLA)、微代码只读存储器(ROM)等等。在一个实施例中,核心490包括微代码ROM或存储用于某些宏指令的微代码的其它介质(例如,在解码单元440中或以其它方式在前端单元430内)。解码单元440被耦合到执行引擎单元450中的重命名/分配器单元452。
执行引擎单元450包括重命名/分配器单元452,其被耦合到引退单元454和一组一个或多个调度器单元456。(一个或多个)调度器单元456表示任何数量的不同调度器,包括保留站、中央指令窗口等等。(一个或多个)调度器单元456被耦合到(一个或多个)物理寄存器文件单元458。(一个或多个)物理寄存器文件单元458中的每一个表示一个或多个物理寄存器文件,其中的不同物理寄存器文件存储一个或多个不同的数据类型,诸如标量整数、标量浮点、打包整数、打包浮点、向量整数、向量浮点、状态(例如,作为要执行的下一指令的地址的指令指针)等等。在一个实施例中,(一个或多个)物理寄存器文件单元458包括向量寄存器单元、写掩码寄存器单元以及标量寄存器单元。这些寄存器单元可以提供架构向量寄存器、向量掩码寄存器以及通用寄存器。(一个或多个)物理寄存器文件单元458被引退单元454重叠以说明可以以其实现寄存器重命名和无序执行的各种方式(例如,使用(一个或多个)重排序缓冲器和(一个或多个)引退寄存器文件;使用(一个或多个)未来文件、(一个或多个)历史缓冲器以及(一个或多个)引退寄存器文件;使用寄存器映射和寄存器池等等)。引退单元454和(一个或多个)物理寄存器文件单元458被耦合到(一个或多个)执行集群460。(一个或多个)执行集群460包括一组一个或多个执行单元462以及一组一个或多个存储器访问单元464。执行单元462可以实行各种运算(例如,移位、加法、减法、乘法)并且对各种数据类型(例如,标量浮点、打包整数、打包浮点、向量整数、向量浮点)。虽然一些实施例可以包括专用于特定功能或功能集的数个执行单元,但是其它实施例可以包括全部实行所有功能的仅一个执行单元或多个执行单元。(一个或多个)调度器单元456、(一个或多个)物理寄存器文件单元458以及(一个或多个)执行集群460被示为可能是复数的,因为某些实施例针对某些数据/运算类型创建单独的流水线(例如,标量整数流水线、标量浮点/打包整数/打包浮点/向量整数/向量浮点流水线、和/或存储器访问流水线,它们各自具有其自己的调度器单元、(一个或多个)物理寄存器文件单元和/或执行集群——并且在单独的存储器访问流水线的情况下,实现其中该流水线的仅执行集群具有(一个或多个)存储器访问单元464的某些实施例)。还应理解的是,在使用单独的流水线的情况下,这些流水线中的一个或多个可以是无序发布/执行而其余部分是有序的。
该组存储器访问单元464被耦合到存储器单元470,存储器单元470包括数据TLB单元472,数据TLB单元472被耦合到数据高速缓存单元474,数据高速缓存单元474被耦合到2级(L2)高速缓存单元476。在一个示例性实施例中,存储器访问对于464可以包括负载单元、存储地址单元以及存储数据单元,其每一个都被耦合到存储器单元470中的数据TLB单元472。指令高速缓存单元434进一步被耦合到存储器单元中的2级(L2)高速缓存单元476。2级高速缓存单元476被耦合到高速缓存的一个或多个其它层并最终被耦合到主存储器。
作为示例,示例性寄存器重命名、无序发布/执行核心架构可以实现如下的流水线400:1)指令提取438实行提取和长度解码阶段402和404;2)解码单元440实行解码阶段406;3)重命名/分配器单元452实行分配阶段408和重命名阶段410;4)(一个或多个)调度器单元456实行调度阶段412;5)(一个或多个)物理寄存器文件单元458和存储器单元470实行寄存器读取/存储器读取阶段414;执行集群460实行执行阶段416;6)存储器单元470和(一个或多个)物理寄存器文件单元458实行写回/存储器写入阶段418;7)在异常处置阶段422中可能涉及到各种单元;以及8)引退单元454和(一个或多个)物理寄存器文件单元458实行提交阶段424。
核心490可以支持一个或多个指令集(例如,x86指令集(以及已经被添加有较新版本的某些扩展);加州桑尼维尔的MIPS科技的MIPS指令集;加州桑尼维尔的ARM控股公司的ARM指令集(以及诸如NEON之类的可选附加扩展)),包括本文中描述的(一个或多个)指令。在一个实施例中,核心490包括用以支持打包数据指令集扩展(例如,AVX1、AVX2)的逻辑,从而允许使用打包数据来实行由许多多媒体应用使用的运算。
应理解的是,核心可以支持多线程(执行两个或更多个并行的运算集或线程集),并且可以以各种方式来这样做,所述方式包括时间切片多线程、同时多线程(其中单个物理核心为物理核心正同时进行多线程的线程中的每一个提供逻辑核心)或者其组合(例如,时间切片提取和解码以及其后的同时多线程,诸如英特尔®超线程技术中那样)。
虽然在无序执行的情境中描述了寄存器重命名,但是应理解的是,寄存器重命名可以用在有序架构中。虽然所说明的处理器的实施例还包括单独的指令和数据高速缓存单元434/474以及共享L2高速缓存单元476,但是替换实施例可以具有用于指令和数据二者的单个内部高速缓存,诸如例如,1级(L1)内部高速缓存或多级内部高速缓存。在一些实施例中,系统可以包括内部高速缓存和在核心和/或处理器外部的外部高速缓存的组合。替换地,所有高速缓存都可以在核心和/或处理器外部。
图5A-B图示出更具体的示例性有序核心架构的框图,其核心将会是芯片中的若干逻辑块中的一个(包括相同类型和/或不同类型的其它核心)。逻辑块通过具有某些固定功能逻辑、存储器I/O接口以及其它必要I/O逻辑(取决于应用)的高带宽互连网络(例如,环形网络)进行通信。
图5A是根据本发明的实施例的单个处理器核心以及其到管芯上互连网络502以及与其2级(L2)高速缓存的本地子集504的连接的框图。在一个实施例中,指令解码器500支持具有打包数据指令集扩展的x86指令集。L1高速缓存506允许到标量和向量单元中的对高速缓存存储器的低延时访问。虽然(为了简化设计)在一个实施例中标量单元508和向量单元510使用单独的寄存器集(分别为标量寄存器512和向量寄存器514)并且在它们之间传输的数据被写入到存储器并然后从1级(L1)高速缓存506读回来,但是本发明的替换实施例可以使用不同的方法(例如,使用单个寄存器集或包括允许在两个寄存器文件之间传输数据而无需写入和读回的通信路径)。
L2高速缓存的本地子集504是被每个处理器核心一个地划分成单独的本地子集的全局L2高速缓存的一部分。每个处理器核心具有到其自己的L2高速缓存的本地子集504的直接访问路径。由处理器核心读取的数据被存储在其L2高速缓存子集504中并且可以被快速访问,与其它处理器核心访问它们自己的本地L2高速缓存子集并行地进行。由处理器核心写入的数据被存储在其自己的L2高速缓存子集504中并且如果必要的话从其它子集中被清除。环形网络确保了共享数据的一致性。该环形网络是双向的以允许诸如处理器核心、L2高速缓存以及其它逻辑块之类的代理在芯片内与彼此通信。每个环形数据路径在每个方向上都是1012位宽。
图5B是根据本发明的实施例的图5A中的处理器核心的一部分的展开图。图5B包括L1数据高速缓存506A(L1高速缓存504的一部分)以及关于向量单元510和向量寄存器514的更多细节。具体来说,向量单元510是16宽向量处理单元(VPU)(参见16宽ALU 528),其执行整数指令、单精度浮动指令以及双精度浮动指令中的一个或多个。VPU支持利用拌和单元520来拌和寄存器输入、利用数值转换单元522A-B来进行数值转换以及利用复制单元524来对存储器输入进行复制。写掩码寄存器526允许断言(predicate)所产生的向量写入。
图6是根据本发明的实施例的可以具有多于一个核心、可以具有集成存储器控制器并且可以具有集成图形模块的处理器600的框图。图6中的实线框图示出具有单个核心602A、系统代理610、一组一个或多个总线控制器单元616的处理器600,而虚线框的可选附加项图示出具有多个核心602A-N、系统代理单元610中的一组一个或多个集成存储器控制器单元614以及专用逻辑608的替换处理器600。
因此,处理器600的不同实现方式可以包括:1)具有专用逻辑608的CPU,该专用逻辑608集成了图形和/或科学(吞吐量)逻辑(其可以包括一个或多个核心),并且核心602A-N是一个或多个通用核心(例如,通用有序核心、通用无序核心、二者的组合);2)具有核心602A-N的协处理器,所述核心602A-N是主要意图用于图形和/或科学(吞吐量)的大量专用核心;以及3)具有核心602A-N的协处理器,该核心602A-N是大量的通用有序核心。因此,处理器600可以是通用处理器、协处理器或专用处理器,诸如例如,网络或通信处理器、压缩引擎、图形处理器、GPGPU(通用图形处理单元)、高吞吐量多集成核心(MIC)协处理器(包括30或更多个核心)、嵌入式处理器等等。可以在一个或多个芯片上实现处理器。处理器600可以是一个或多个基板的一部分,或者可以被实现在一个或多个基板上,所述基板使用多种工艺技术(诸如例如,BiCMOS、CMOS或NMOS)中的任意。
存储器层级包括核心内的一级或多级高速缓存、一组一个或多个共享高速缓存单元606以及被耦合到该组集成存储器控制器单元614的外部存储器(未示出)。该组共享高速缓存单元606可以包括一个或多个中间级高速缓存,诸如2级(L2)、3级(L3)、4级(L4)或其它级的高速缓存、最末级高速缓存(LLC)和/或其组合。虽然在一个实施例中基于环形的互连单元612将集成图形逻辑608、该组共享高速缓存单元606以及系统代理单元610/(一个或多个)集成存储器控制器单元614进行互连,但是替换实施例可以使用任何数量的公知技术以便互连此类单元。在一个实施例中,在一个或多个高速缓存单元606和核心602-A-N之间维持一致性。
在一些实施例中,核心602A-N中的一个或多个能够实现多线程。系统代理610包括协调和操作核心602A-N的那些组件。系统代理单元610可以包括例如功率控制单元(PCU)和显示单元。PCU可以是或者包括调节核心602A-N和集成图形逻辑608的功率状态所需的逻辑以及组件。显示单元用于驱动一个或多个外部连接的显示器。
就架构指令集而言,核心602A-N可以是同构的或是异构的;即,核心602A-N中的两个或更多个可以能够执行相同的指令集,而其它核心可以能够执行该指令集的仅子集或者执行不同的指令集。
图7-10是示例性计算机架构的框图。在针对膝上型计算机、台式计算机、手持式PC、个人数字助理、工程工作站、服务器、网络设备、网络中枢、交换机、嵌入式处理器、数字信号处理器(DSP)、图形设备、视频游戏设备、机顶盒、微控制器、蜂窝电话、便携式媒体播放器、手持式设备以及各种其它电子设备的领域中已知的其它系统设计和配置也是合适的。一般来说,能够并入如本文中公开的处理器和/或其它执行逻辑的大量的各种各样的系统或电子设备一般都是合适的。
现在参考图7,示出了根据本发明的一个实施例的系统700的框图。系统700可以包括一个或多个处理器710、715,其被耦合到控制器中枢720。在一个实施例中,控制器中枢720包括图形存储器控制器中枢(GMCH)790以及输入/输出中枢(IOH)750(其可以在单独的芯片上);GMCH 790包括存储器740和协处理器745所耦合到的存储器和图形控制器;IOH750将输入/输出(I/O)设备760耦合到GMCH 790。替换地,存储器和图形控制器中的一个或二者被集成在(如本文中描述的)处理器内,存储器740和协处理器745被直接耦合到处理器710和与IOH 750在单个芯片中的控制器中枢720。
在图7中用虚线标明了附加处理器715的可选性质。每个处理器710、715可以包括本文中描述的处理核心中的一个或多个并且可以是处理器600的某一版本。
存储器740可以例如是动态随机存取存储器(DRAM)、相变存储器(PCM)或二者的组合。针对至少一个实施例,控制器中枢720经由多点分支(multi-drop)总线(诸如前侧总线(FSB)、点到点接口(诸如快速路径互连(QPI))或者类似连接)795与(一个或多个)处理器710、715通信。
在一个实施例中,协处理器745是专用处理器,诸如例如,高吞吐量MIC处理器、网络或通信处理器、压缩引擎、图形处理器、GPGPU、嵌入式处理器等等。在一个实施例中,控制器中枢720可以包括集成图形加速器。
就包括架构、微架构、热学、功率消耗特性等的优点的度量谱而言,在物理资源710、715之间可以存在各种差异。
在一个实施例中,处理器710执行控制通用类型的数据处理运算的指令。嵌入在指令内的可以是协处理器指令。处理器710将这些协处理器指令识别为应由附连的协处理器745来执行的类型。相应地,处理器710在协处理器总线或其它互连上将这些协处理器指令(或表示协处理器指令的控制信号)发给协处理器745。(一个或多个)协处理器745接受并执行接收到的协处理器指令。
现在参考图8,示出了根据本发明的实施例的第一更具体的示例性系统800的框图。如图8中所示,多处理器系统800是点到点互连系统,并且包括经由点到点互连850进行耦合的第一处理器870和第二处理器880。处理器870和880中的每一个可以是处理器600的某一版本。在本发明的一个实施例中,处理器870和880分别是处理器710和715,而协处理器838是协处理器745。在另一实施例中,处理器870和880分别是处理器710和协处理器745。
处理器870和880被示为分别包括集成存储器控制器(IMC)单元872和882。处理器870还包括作为其总线控制器单元的一部分的点到点(P-P)接口876和878;类似地,第二处理器880包括P-P接口886和888。处理器870、880可以使用P-P接口电路878、888经由点到点(P-P)接口850交换信息。如图8中所示,IMC 872和882将处理器耦合到相应的存储器、即存储器832和存储器834,其可以是本地附连到相应处理器的主存储器的部分。
处理器870、880可以各自使用点到点接口电路876、894、886、898经由各个P-P接口852、854与芯片集890交换信息。芯片集890可以可选地经由高性能接口839与协处理器838交换信息。在一个实施例中,协处理器838是专用处理器,诸如例如,高吞吐量MIC处理器、网络或通信处理器、压缩引擎、图形处理器、GPGPU、嵌入式处理器等等。
共享高速缓存(未示出)可以被包括在任一处理器中或者在两个处理器外部,又或者经由P-P互连与处理器连接,使得如果处理器被置于低功率模式中则任一或两个处理器的本地高速缓存信息可以被存储在共享高速缓存中。
芯片集890可以经由接口896被耦合到第一总线816。在一个实施例中,第一总线816可以是外围组件互连(PCI)总线,或者是诸如PCI快速总线或另一第三代I/O互连总线之类的总线,但是本发明的范围不被如此限制。
如图8中所示,各种I/O设备814可以被耦合到第一总线816以及总线桥818,该总线桥818将第一总线816耦合到第二总线820。在一个实施例中,诸如协处理器、高吞吐量MIC处理器、GPGPU、加速器(诸如例如,图形加速器或数字信号处理(DSP)单元)、现场可编程门阵列或任何其它处理器之类的一个或多个附加处理器815被耦合到第一总线816。在一个实施例中,第二总线820可以是低引脚数(LPC)总线。各种设备可以被耦合到第二总线820,所述设备包括例如,键盘和/或鼠标822、通信设备827以及诸如盘驱动器或其它大容量存储设备之类的存储单元828,其在一个实施例中可以包括指令/代码和/或数据830。此外,音频I/O824可以被耦合到第二总线820。注意,其它架构也是可能的。例如,作为图8的点到点架构的替代,系统可以实现多点分支总线或其它此类架构。
现在参考图9,示出了根据本发明的实施例的第二更具体的示例性系统900的框图。图8和9中的相似元件具有相似的参考标号,并且已经从图9中省略了图8的某些方面以便避免使图9的其它方面变晦涩。
图9图示出处理器870、880可以分别包括集成存储器和I/O控制逻辑(“CL”)872和882。因此,CL 872、882包括集成存储器控制器单元并且包括I/O控制逻辑。图9图示出不仅存储器832、834被耦合到CL 872、882,还有I/O设备914也被耦合到控制逻辑872、882。旧有I/O设备915被耦合到芯片集890。
现在参考图10,示出了根据本发明的实施例的SoC 1000的框图。图6中的类似元件带有相似的参考标号。而且,虚线框是更高级的SoC上的可选特征。在图10中,(一个或多个)互连单元1002被耦合到:应用处理器1010,其包括一组一个或多个核心202A-N和(一个或多个)共享高速缓存单元606;系统代理单元610;(一个或多个)总线控制器单元616;(一个或多个)集成存储器控制器单元614;一组一个或多个协处理器1020,其可以包括集成图形逻辑、图像处理器、音频处理器和视频处理器;静态随机存取存储器(SRAM)单元1030;直接存储器访问(DMA)单元1032;以及用于耦合到一个或多个外部显示器的显示单元1040。在一个实施例中,(一个或多个)协处理器1020包括专用处理器,诸如例如,网络或通信处理器、压缩引擎、GPGPU、高吞吐量MIC处理器、嵌入式处理器等等。
可以以硬件、软件、固件或此类实现方法的组合来实现本文中公开的机制的实施例。本发明的实施例可以被实现为计算机程序或程序代码,其在包括至少一个处理器、存储系统(包括易失性和非易失性存储器和/或存储元件)、至少一个输入设备以及至少一个输出设备的可编程系统上执行。
可以应用诸如图8中图示出的代码830之类的程序代码来输入指令以实行本文中描述的功能并生成输出信息。可以以已知方式将输出信息应用于一个或多个输出设备。出于本申请的目的,处理系统包括具有处理器的任何系统,处理器诸如例如:数字信号处理器(DSP)、微控制器、专用集成电路(ASIC)或微处理器。
可以以高级程序语言或面向对象的编程语言来实现程序代码以与处理系统通信。如果期望的话,也可以以汇编语言或机器语言来实现程序代码。事实上,本文中描述的机制在范围上不限于任何特定的编程语言。在任何情况下,语言可以是编译语言或解释语言。
可以通过存储在机器可读介质上的表示处理器内的各种逻辑的代表性指令来实现至少一个实施例的一个或多个方面,所述指令当被机器读取时促使所述机器制作逻辑以实行本文中描述的技术。称为“IP核心”的这样的表示可以被存储在有形的机器可读介质上并被供应给各种客户或制造设施来加载到实际上制造逻辑或处理器的制作机器中。
这样的机器可读存储介质可以在没有限制的情况下包括由机器或设备制造或形成的非暂时性有形的制品布置,包括诸如硬盘的存储介质、任何其它类型的盘(包括软盘、光盘、紧凑盘只读存储器(CD-ROM)、紧凑盘可重写设备(CD-RW)以及磁光盘)、半导体设备(诸如只读存储器(ROM)、随机存取存储器(RAM)(诸如动态随机存取存储器(DRAM)、静态随机存取存储器(SRAM))、可擦可编程只读存储器(EPROM)、闪速存储器、电可擦可编程只读存储器(EEPROM)、相变存储器(PCM))、磁卡或光卡、或者适合于存储电子指令的任何其它类型的介质。
相应地,本发明的实施例还包括包含指令或包含设计数据(诸如硬件描述语言(HDL))的非暂时性有形机器可读介质,所述设计数据定义本文中描述的结构、电路、装置、处理器和/或系统特征。这样的实施例也可以称为程序产品。
在一些情况下,可以使用指令转换器来将指令从源指令集转换成目标指令集。例如,指令转换器可以将指令转译(例如,使用静态二进制转译、包括动态编译的动态二进制转译)、变形、仿真或以其它方式转换成要由核心处理的一个或多个其它指令。可以以软件、硬件、固件或其组合来实现指令转换器。指令转换器可以是在处理器上、处理器外、或者部分在处理器上而部分在处理器外。
图11是根据本发明的实施例的对照用以将源指令集中的二进制指令转换成目标指令集中的二进制指令的软件指令转换器的使用的框图。在所图示的实施例中,指令转换器是软件指令转换器,但是替换地,指令转换器可以以软件、固件、硬件和其各种组合来实现。图11示出以高级语言1102的程序可以通过使用x86编译器1104来编译,以生成x86二进制代码1106,该x86二进制代码1106可以原生地由具有至少一个x86指令集核心的处理器1116来执行。具有至少一个x86指令集核心的处理器1116表示基本上可以通过兼容地执行或以其它方式处理以下内容来实行与具有至少一个x86指令集核心的英特尔处理器相同的功能的任何处理器:(1)英特尔x86指令集核心的指令集的实质部分或者(2)目标为在具有至少一个x86指令集核心的英特尔处理器上运行的应用或其它软件的目标代码版本,以便基本上实现与具有至少一个x86指令集核心的英特尔处理器相同的结果。x86编译器1104表示可操作用于生成x86二进制代码1106(例如,目标代码)的编译器,所述二进制代码1106可以在具有附加链接处理或没有附加链接处理的情况下在具有至少一个x86指令集核心的处理器1116上执行。类似地,图11示出以高级语言1102的程序可以使用替换指令集编译器1108来编译,以生成替换指令集二进制代码1110,该替换指令集二进制代码1110可以原生地由不具有至少一个x86指令集核心的处理器1114(例如,具有执行加州桑尼维尔的MIPS技术公司的MIPS指令集和/或执行加州桑尼维尔的ARM控股公司的ARM指令集的核心的处理器)来执行。使用指令转换器1112来将x86二进制代码1106转换成可以原生地由不具有x86指令集核心的处理器1114来执行的代码。该经转换的代码很可能不与替换指令集二进制代码1110相同,因为能够这样做的指令转换器难以制造;然而,经转换的代码将完成一般运算并且由来自替换指令集的指令构成。因此,指令转换器1112表示通过仿真、模拟或任何其它过程而允许不具有x86指令集处理器或核心的处理器或其它电子设备执行x86二进制代码1106的软件、固件、硬件或其组合。
用于压缩掩码值的方法和装置
下面描述一组掩码压缩指令,其将掩码寄存器中的已设置位塌缩(collapse)到目的地掩码寄存器的一侧(例如,最低有效位(LSB))。通过这些指令实现的功能在许多位操纵例程中是有用的。在一个特定实施例中,指令采取KCOLLAPSE{B/W/D/Q}的形式,其压缩字节(B)、字(W)、二倍字(D)和四倍字(Q)掩码值上的掩码位。
使用现存的指令,该功能要求下述各项的指令序列:将寄存器转换成向量寄存器、对向量寄存器执行压缩以及然后将其转换回掩码目的地寄存器。相比之下,本文中描述的本发明的实施例在一个指令中实现了该功能。
如图12中所图示的,可以在其上实现本发明的实施例的示例性处理器1255包括一组通用寄存器(GPR)1205、一组向量寄存器1206以及一组掩码寄存器1207。在一个实施例中,可以将多个向量数据元素打包到每个向量寄存器1206中,该向量寄存器1206可以具有512位宽以用于存储两个256位值、四个128位值、八个64位值、16个32位值等等。然而,本发明的根本原理不限于任何特定的向量数据尺寸/类型。在一个实施例中,掩码寄存器1207包括用于对存储在向量寄存器1206中的值实行位掩蔽运算的八个64位运算元掩码寄存器(例如,被实现为上文所述的掩码寄存器k0-k7)。然而,本发明的根本原理不限于任何特定的掩码寄存器尺寸/类型。
为了简便性在图12中图示出单个处理器核心(“核心0”)的细节。然而,将理解的是,图12中示出的每个核心可以具有与核心0相同的一组逻辑。例如,每个核心可以包括专用1级(L1)高速缓存1212和2级(L2)高速缓存1211以用于根据指定的高速缓存管理策略来高速缓存指令和数据。L1高速缓存1212包括用于存储指令的单独的指令高速缓存1220和用于存储数据的单独的数据高速缓存1221。以可以是固定尺寸(例如,在长度上是64、128、512字节)的高速缓存线的粒度来管理存储在各种处理器高速缓存内的指令和数据。该示例性实施例的每个核心具有用于从主存储器1200和/或共享3级(L3)高速缓存1216提取指令的指令提取单元1210;用于解码指令(例如,将程序指令解码成微运算或“uops”)的解码单元1220;用于执行指令的执行单元1240;以及用于引退指令并写回结果的写回单元1250。
指令提取单元1210包括各种公知的组件,包括用于存储要从存储器1200(或高速缓存中的一个)中提取的下一指令的地址的下一指令指针1203;用于存储最近使用的虚拟到物理指令地址的映射以改进地址转译的速度的指令转译后备缓冲器(ITLB)1204;用于推测性地预测指令分支地址的分支预测单元1202;以及用于存储分支地址和目标地址的分支目标缓冲器(BTB)1201。一旦被提取,然后就可以将指令流式传输至包括解码单元1230、执行单元1240以及写回单元1250的指令流水线的其余阶段。本领域普通技术人员很好地理解这些单元中的每一个的结构和功能,并且将不在本文对其进行详细描述,以避免使本发明的不同实施例的相关方面变晦涩。
在一个实施例中,解码单元1230包括掩码压缩解码逻辑1231以用于解码本文中描述的掩码压缩指令(例如,在一个实施例中将其解码成微运算序列),并且执行单元1240包括掩码压缩执行逻辑1241以用于执行所述指令。如所提及的,在一个实施例中,掩码压缩指令将掩码寄存器中的已设置位(例如,设置成值1的位)塌缩到目的地掩码寄存器的一个部分(例如,最低有效位(LSB))。
图13图示出其中掩码压缩逻辑1300将已设置位从64位源掩码寄存器KSRC 1391压缩到64位目的地掩码寄存器KDST 1302的一侧的本发明的示例性实施例。虽然在图13中源掩码寄存器和目的地掩码寄存器二者都包括64位掩码寄存器,但是本发明的根本原理可以利用具有各种不同尺寸(包括但不限于8位、16位和32位)的掩码寄存器来实现。
在一个实施例中,掩码压缩逻辑读取KSRC 1301的每个位,并且如果该位未被设置(即,值0)则忽视它。然而,如果该位已被设置(即,值1),那么将其拷贝到目的地掩码寄存器1302中的下一可用的最低有效位位置。
在图13中所示的特定示例中,来自源掩码寄存器1301的位b0和b1因为其未被设置而被忽视。第一个被设置的位是位b2。照此,将来自b2的已设置位拷贝到d0,其是目的地掩码寄存器1302的最低有效位位置。下一源位b3未被设置并且因此被忽视,但是将都被设置的位b4和b5拷贝到接下来的可用最低有效位位置d1和d2。该过程如所述的那样继续,从而将来自源掩码寄存器1301的每个已设置位拷贝到目的地掩码寄存器1302中的最低有效可用位位置,直到拷贝了全部的位(例如,在所图示的示例中的b63)为止。最终结果是将全部的已设置位压缩到目的地掩码寄存器KDST 1302的一侧(即,具有最低有效位位置的一侧)。
在一个实施例中,掩码压缩逻辑1300被实现为被已设置位和/或未设置位的位置控制的一组一个或多个多路复用器。基于来自已设置位/未设置位的控制输入,(一个或多个)多路复用器从源掩码寄存器1301选择已设置位并将它们提供给目的地掩码寄存器1302内的适当的位位置。当然,根据本发明的根本原理的各种不同实现方式也是可能的。例如,在一个实施例中,可以使用计数器来对源掩码寄存器1301内的位数进行计数,并且填充逻辑然后可以根据计数值来用已设置位填充目的地掩码寄存器1302的最低有效位(例如,针对计数值10,设置目的地掩码寄存器1302的10个LSB)。
图14图示出利用8位源掩码寄存器1401和8位目的地掩码寄存器1402的另一实施例。可以对此实施例应用相同的根本原理。即,掩码压缩逻辑1300将第一已设置位b2拷贝到目的地寄存器1402中的第一最低有效位位置d0。掩码压缩逻辑1300然后将位位置b4、b5和b7中的每个接连的已设置位从源掩码寄存器1401分别拷贝到目的地掩码寄存器1402的最低有效位位置d1、d2和d3。
图15图示出根据本发明的一个实施例的用于压缩掩码寄存器的方法。所述方法可以被实现在上文描述的架构的情境内,但是不限于任何特定架构。
在1501处,从存储器提取或者从高速缓存(例如,L1、L2或L3高速缓存)读取掩码压缩指令。在1502处,响应于对掩码压缩指令的解码/执行,将包含要压缩的输入掩码数据的第一运算元存储在源掩码寄存器中。如所提及的,在一个实施例中,存储在源掩码寄存器中的输入掩码数据可以包括8位掩码、16位掩码、32位掩码、64位掩码或任何其它尺寸的任何掩码。本发明的根本原理不限于任何特定的掩码尺寸。
在1503处,读取来自源掩码寄存器的位,并将已设置位拷贝出到目的地掩码寄存器中的可用最低有效位位置。如所提及的,这可以利用不同类型的逻辑(包括被已设置位(1)和/或未设置位(0)控制的一组多路复用器)来实现。
一旦所有的位都已经被压缩在目的地掩码寄存器内,就可以在1504处将压缩结果用于一个或多个随后的操作(例如,位操纵例程)。
在一个实施例中,第一源运算元和目的地运算元是上文提及的掩码寄存器k0-k7。掩码压缩指令可以采取以下形式,其中,KSRC是目的地掩码寄存器,SRC2包括包含控制数据的源,并且SRC3包括包含要对其进行混洗(shuffle)的数据的源:
KCOLLAPSE[B/W/D/Q] KDEST, KSRC
以下伪代码提供了根据本发明的一个实施例实行的操作的表示:
numbits指示将多少个位用于源运算元和目的地运算元,其在上面的伪代码中包括8、16、32和64位的选项。变量i从0增量至numbits以读取源掩码寄存器KSRC中的每个值。针对已设置位(通过“if ( ksrc.bit[i] )”来识别),用1来更新最低有效可用KDEST位。然后对j的值进行增量。针对未设置的位(等于0),没有值被写入到KDEST并且不对j进行增量。
在前述说明书中,参考其具体示例性实施例描述了本发明的实施例。然而,将显而易见的是,可以对其进行各种修改和改变而不脱离如在随附的权利要求中阐述的本发明的较广的精神和范围。相应地,将以说明性而不是限制性意义来看待说明书和附图。
本发明的实施例可以包括上文已描述的各种步骤。所述步骤可以体现在可以用于使通用或专用处理器实行所述步骤的机器可执行指令中。替换地,可以通过包含用于实行所述步骤的硬接线逻辑的特定硬件组件或通过经编程的计算机组件和自定义硬件组件的任何组合来实行这些步骤。
如本文中描述的,指令可以指代诸如专用集成电路(ASIC)之类的被配置成实行某些操作或具有预定功能的硬件或者存储在以非暂时性计算机可读介质来体现的存储器中的软件指令的特定配置。因此,可以使用在一个或多个电子设备(例如,终端站、网络元件等)上存储和执行的代码和数据来实现附图中所示的技术。这样的电子设备通过使用计算机机器可读介质来存储和(内部地和/或与网络上的其它电子设备)传送代码和数据,所述计算机机器可读介质诸如是非暂时性计算机机器可读存储介质(例如,磁盘、光盘、随机存取存储器、只读存储器、闪速存储器设备、相变存储器)以及暂时性计算机机器可读通信介质(例如,电、光、声或其它形式的传播信号——诸如载波、红外信号、数字信号等)。此外,此类电子设备通常包括一组一个或多个处理器,其被耦合到一个或多个其它组件,诸如一个或多个存储设备(非暂时性机器可读存储介质)、用户输入/输出设备(例如,键盘、触摸屏和/或显示器)以及网络连接。该组处理器与其它组件的耦合通常是通过一个或多个总线和桥(也称为总线控制器)。存储设备和承载网络通信量的信号分别表示一个或多个机器可读存储介质和机器可读通信介质。因此,给定电子设备的存储设备通常存储代码和/或数据以用于在该电子设备的该组一个或多个处理器上执行。当然,可以使用软件、固件和/或硬件的不同组合来实现本发明的实施例的一个或多个部分。遍及本详细描述,出于解释的目的,阐述众多具体细节以便提供对本发明的透彻理解。然而,对于本领域技术人员来说将会显而易见的是,可以在没有这些具体细节中的某些的情况下实践本发明。在某些情况下,没有详尽地描述公知的结构和功能,以便避免使本发明的主题变晦涩。因而,应按照随附的权利要求来评判本发明的范围和精神。
Claims (21)
1.一种处理器,包括:
源掩码寄存器,用以存储包括多个已设置位和多个未设置的位的多个掩码位;
目的地掩码寄存器,用以存储从所述源掩码寄存器中读取的已设置位;以及
掩码压缩逻辑,用以从所述源掩码寄存器中读取所述已设置位中的每一个并且用以将所述已设置位存储在所述目的地掩码寄存器的一侧上的连续的位位置中。
2.根据权利要求1所述的处理器,其中,所述目的地掩码寄存器的一侧包括用以存储所述目的地掩码寄存器的最低有效位的一侧。
3.根据权利要求2所述的处理器,其中,所述掩码压缩逻辑用以将所述已设置位在所述目的地掩码寄存器内以一定顺序来存储,所述顺序与所述已设置位在所述源掩码寄存器内被存储的顺序相对应。
4.根据权利要求1所述的处理器,其中,所述掩码压缩逻辑包括一组一个或多个多路复用器,其被所述源掩码寄存器内的所述多个已设置位和/或未设置的位的位置控制。
5.根据权利要求1所述的处理器,其中,所述源掩码寄存器是8位、16位、32位或64位掩码寄存器。
6.根据权利要求5所述的处理器,其中,所述目的地掩码寄存器是8位、16位、32位或64位掩码寄存器。
7.根据权利要求6所述的处理器,其中,所述目的地掩码寄存器和源掩码寄存器是相同的尺寸。
8.一种方法,包括:
将包括多个已设置位和多个未设置的位的多个掩码位存储在源掩码寄存器内;
从所述源掩码寄存器中读取所述已设置位中的每一个;以及
将所述已设置位存储在目的地掩码寄存器的一侧上的连续的位位置中。
9.根据权利要求8所述的方法,其中,所述目的地掩码寄存器的所述一侧包括用以存储所述目的地掩码寄存器的最低有效位的一侧。
10.根据权利要求9所述的方法,还包括:
将所述已设置位在所述目的地掩码寄存器内以一定顺序来存储,所述顺序与所述已设置位在所述源掩码寄存器内被存储的顺序相对应。
11.根据权利要求8所述的方法,还包括:
使用所述源掩码寄存器内的所述多个已设置位和/或未设置的位的位置来控制一组一个或多个多路复用器,所述多路复用器分别从所述源掩码寄存器读取所述已设置位并将所述已设置位存储在所述目的地掩码寄存器中。
12.根据权利要求8所述的方法,其中,所述源掩码寄存器是8位、16位、32位或64位掩码寄存器。
13.根据权利要求12所述的方法,其中,所述目的地掩码寄存器是8位、16位、32位或64位掩码寄存器。
14.根据权利要求13所述的方法,其中,所述目的地掩码寄存器和源掩码寄存器是相同的尺寸。
15.一种系统,包括:
存储器,用以存储程序代码和数据;
高速缓存层级,包括多个高速缓存级,其用以根据指定的高速缓存管理策略来高速缓存所述程序代码和数据;
输入设备,用以从用户接收输入;
处理器,用以响应于来自所述用户的输入而执行所述程序代码并处理所述数据,所述处理器包括:
源掩码寄存器,用以存储包括多个已设置位和多个未设置的位的多个掩码位;
目的地掩码寄存器,用以存储从所述源掩码寄存器中读取的已设置位;以及
掩码压缩逻辑,用以从所述源掩码寄存器中读取所述已设置位中的每一个并且用以将所述已设置位存储在所述目的地掩码寄存器的一侧上的连续的位位置中。
16.根据权利要求15所述的系统,其中,所述目的地掩码寄存器的所述一侧包括用以存储所述目的地掩码寄存器的最低有效位的一侧。
17.根据权利要求16所述的系统,其中,所述掩码压缩逻辑用以将所述已设置位在所述目的地掩码寄存器内以一定顺序来存储,所述顺序与所述已设置位在所述源掩码寄存器内被存储的顺序相对应。
18.根据权利要求15所述的系统,其中,所述掩码压缩逻辑包括一组一个或多个多路复用器,其被所述源掩码寄存器内的所述多个已设置位和/或未设置的位的位置控制。
19.根据权利要求15所述的系统,其中,所述源掩码寄存器是8位、16位、32位或64位掩码寄存器。
20.根据权利要求19所述的系统,其中,所述目的地掩码寄存器是8位、16位、32位或64位掩码寄存器。
21.根据权利要求20所述的系统,其中,所述目的地掩码寄存器和源掩码寄存器是相同的尺寸。
Applications Claiming Priority (3)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| US14/583,647 US20160188333A1 (en) | 2014-12-27 | 2014-12-27 | Method and apparatus for compressing a mask value |
| US14/583647 | 2014-12-27 | ||
| PCT/US2015/062567 WO2016105822A1 (en) | 2014-12-27 | 2015-11-25 | Method and apparatus for compressing a mask value |
Publications (1)
| Publication Number | Publication Date |
|---|---|
| CN107003851A true CN107003851A (zh) | 2017-08-01 |
Family
ID=56151355
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| CN201580064602.6A Pending CN107003851A (zh) | 2014-12-27 | 2015-11-25 | 用于压缩掩码值的方法和装置 |
Country Status (7)
| Country | Link |
|---|---|
| US (1) | US20160188333A1 (zh) |
| EP (1) | EP3238037A4 (zh) |
| JP (1) | JP2018500665A (zh) |
| KR (1) | KR20170099864A (zh) |
| CN (1) | CN107003851A (zh) |
| TW (1) | TWI610234B (zh) |
| WO (1) | WO2016105822A1 (zh) |
Cited By (2)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| CN113517893A (zh) * | 2020-04-10 | 2021-10-19 | 苹果公司 | 通信总线上的数据启用掩模压缩 |
| WO2024020761A1 (en) * | 2022-07-26 | 2024-02-01 | Huawei Technologies Co., Ltd. | Register to predicate deposit |
Families Citing this family (1)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| CN114416180B (zh) * | 2022-03-28 | 2022-07-15 | 腾讯科技(深圳)有限公司 | 向量数据的压缩方法、向量数据的解压方法、装置及设备 |
Citations (16)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US4881168A (en) * | 1986-04-04 | 1989-11-14 | Hitachi, Ltd. | Vector processor with vector data compression/expansion capability |
| US5155820A (en) * | 1989-02-21 | 1992-10-13 | Gibson Glenn A | Instruction format with designations for operand lengths of byte, half word, word, or double word encoded in address bits |
| US20020035678A1 (en) * | 2000-03-08 | 2002-03-21 | Rice Daniel S. | Processing architecture having field swapping capability |
| US6611211B2 (en) * | 2001-05-04 | 2003-08-26 | International Business Machines Corporation | Data mask coding |
| US20040073838A1 (en) * | 2002-03-26 | 2004-04-15 | Kabushiki Kaisha Toshiba | Trace data compression system and trace data compression method and microcomputer implemented with a built-in trace data compression circuit |
| US20090019269A1 (en) * | 2001-11-01 | 2009-01-15 | Altera Corporation | Methods and Apparatus for a Bit Rake Instruction |
| US20110016296A1 (en) * | 2009-07-15 | 2011-01-20 | Via Technologies, Inc | Apparatus and method for executing fast bit scan forward/reverse (bsr/bsf) instructions |
| 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 |
| US20130103730A1 (en) * | 2007-05-23 | 2013-04-25 | Teleputers, Llc | Microprocessor Shifter Circuits Utilizing Butterfly and Inverse Butterfly Routing Circuits, and Control Circuits Therefor |
| WO2013101227A1 (en) * | 2011-12-30 | 2013-07-04 | Intel Corporation | Vector frequency compress instruction |
| US20140019714A1 (en) * | 2011-12-30 | 2014-01-16 | Elmoustapha Ould-Ahmed-Vall | Vector frequency expand instruction |
| US20140019732A1 (en) * | 2011-12-23 | 2014-01-16 | Bret L. Toll | Systems, apparatuses, and methods for performing mask bit compression |
| CN103793201A (zh) * | 2012-10-30 | 2014-05-14 | 英特尔公司 | 提供向量压缩和旋转功能的指令和逻辑 |
| CN104025040A (zh) * | 2011-12-23 | 2014-09-03 | 英特尔公司 | 用于混洗浮点或整数值的装置和方法 |
| US20140281396A1 (en) * | 2013-03-15 | 2014-09-18 | Ashish Jha | Processors, methods, systems, and instructions to consolidate unmasked elements of operation masks |
| CN104137054A (zh) * | 2011-12-23 | 2014-11-05 | 英特尔公司 | 用于执行从索引值列表向掩码值的转换的系统、装置和方法 |
Family Cites Families (2)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| KR20140003020A (ko) * | 2012-06-28 | 2014-01-09 | 삼성전기주식회사 | 발광 다이오드 구동 장치 |
| US9715385B2 (en) * | 2013-01-23 | 2017-07-25 | International Business Machines Corporation | Vector exception code |
-
2014
- 2014-12-27 US US14/583,647 patent/US20160188333A1/en not_active Abandoned
-
2015
- 2015-11-25 CN CN201580064602.6A patent/CN107003851A/zh active Pending
- 2015-11-25 JP JP2017528212A patent/JP2018500665A/ja not_active Abandoned
- 2015-11-25 EP EP15874026.6A patent/EP3238037A4/en not_active Withdrawn
- 2015-11-25 WO PCT/US2015/062567 patent/WO2016105822A1/en not_active Ceased
- 2015-11-25 KR KR1020177014133A patent/KR20170099864A/ko not_active Withdrawn
- 2015-11-27 TW TW104139714A patent/TWI610234B/zh not_active IP Right Cessation
Patent Citations (17)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US4881168A (en) * | 1986-04-04 | 1989-11-14 | Hitachi, Ltd. | Vector processor with vector data compression/expansion capability |
| US5155820A (en) * | 1989-02-21 | 1992-10-13 | Gibson Glenn A | Instruction format with designations for operand lengths of byte, half word, word, or double word encoded in address bits |
| US20020035678A1 (en) * | 2000-03-08 | 2002-03-21 | Rice Daniel S. | Processing architecture having field swapping capability |
| US6611211B2 (en) * | 2001-05-04 | 2003-08-26 | International Business Machines Corporation | Data mask coding |
| US20090019269A1 (en) * | 2001-11-01 | 2009-01-15 | Altera Corporation | Methods and Apparatus for a Bit Rake Instruction |
| US20040073838A1 (en) * | 2002-03-26 | 2004-04-15 | Kabushiki Kaisha Toshiba | Trace data compression system and trace data compression method and microcomputer implemented with a built-in trace data compression circuit |
| US20130103730A1 (en) * | 2007-05-23 | 2013-04-25 | Teleputers, Llc | Microprocessor Shifter Circuits Utilizing Butterfly and Inverse Butterfly Routing Circuits, and Control Circuits Therefor |
| US20110016296A1 (en) * | 2009-07-15 | 2011-01-20 | Via Technologies, Inc | Apparatus and method for executing fast bit scan forward/reverse (bsr/bsf) instructions |
| 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 |
| US20140019732A1 (en) * | 2011-12-23 | 2014-01-16 | Bret L. Toll | Systems, apparatuses, and methods for performing mask bit compression |
| CN104025020A (zh) * | 2011-12-23 | 2014-09-03 | 英特尔公司 | 用于执行掩码位压缩的系统、装置以及方法 |
| CN104025040A (zh) * | 2011-12-23 | 2014-09-03 | 英特尔公司 | 用于混洗浮点或整数值的装置和方法 |
| CN104137054A (zh) * | 2011-12-23 | 2014-11-05 | 英特尔公司 | 用于执行从索引值列表向掩码值的转换的系统、装置和方法 |
| WO2013101227A1 (en) * | 2011-12-30 | 2013-07-04 | Intel Corporation | Vector frequency compress instruction |
| US20140019714A1 (en) * | 2011-12-30 | 2014-01-16 | Elmoustapha Ould-Ahmed-Vall | Vector frequency expand instruction |
| CN103793201A (zh) * | 2012-10-30 | 2014-05-14 | 英特尔公司 | 提供向量压缩和旋转功能的指令和逻辑 |
| US20140281396A1 (en) * | 2013-03-15 | 2014-09-18 | Ashish Jha | Processors, methods, systems, and instructions to consolidate unmasked elements of operation masks |
Cited By (4)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| CN113517893A (zh) * | 2020-04-10 | 2021-10-19 | 苹果公司 | 通信总线上的数据启用掩模压缩 |
| US11303478B2 (en) | 2020-04-10 | 2022-04-12 | Apple Inc. | Data-enable mask compression on a communication bus |
| CN113517893B (zh) * | 2020-04-10 | 2022-09-06 | 苹果公司 | 通信总线上的数据启用掩模压缩 |
| WO2024020761A1 (en) * | 2022-07-26 | 2024-02-01 | Huawei Technologies Co., Ltd. | Register to predicate deposit |
Also Published As
| Publication number | Publication date |
|---|---|
| JP2018500665A (ja) | 2018-01-11 |
| TW201643708A (zh) | 2016-12-16 |
| WO2016105822A1 (en) | 2016-06-30 |
| EP3238037A4 (en) | 2018-08-08 |
| EP3238037A1 (en) | 2017-11-01 |
| TWI610234B (zh) | 2018-01-01 |
| US20160188333A1 (en) | 2016-06-30 |
| KR20170099864A (ko) | 2017-09-01 |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| CN104951401B (zh) | 排序加速处理器、方法、系统和指令 | |
| KR102463858B1 (ko) | 벡터 인덱스 로드 및 저장을 위한 방법 및 장치 | |
| CN104011647B (zh) | 浮点舍入处理器、方法、系统和指令 | |
| TWI603208B (zh) | 利用索引和立即數執行向量排列的方法和設備 | |
| CN104011652B (zh) | 打包选择处理器、方法、系统和指令 | |
| CN107003844A (zh) | 用于矢量广播和xorand逻辑指令的装置和方法 | |
| KR102462174B1 (ko) | 벡터 비트 셔플을 수행하기 위한 방법 및 장치 | |
| JP6741006B2 (ja) | マスクレジスタとベクトルレジスタとの間で可変に拡張するための方法および装置 | |
| CN104126166A (zh) | 用于执行使用掩码的向量打包一元编码的系统、装置和方法 | |
| CN114942786A (zh) | 用于复数乘法和累加的装置和方法 | |
| CN104040482A (zh) | 用于在打包数据元素上执行增量解码的系统、装置和方法 | |
| CN104137054A (zh) | 用于执行从索引值列表向掩码值的转换的系统、装置和方法 | |
| CN114791795A (zh) | 用于复数乘法的装置和方法 | |
| CN107077332A (zh) | 执行矢量饱和双字/四倍字长加法的指令和逻辑 | |
| CN109582365B (zh) | 用于执行紧缩数据元素的双有符号和无符号乘法的装置和方法 | |
| CN107077330A (zh) | 用于执行矢量位反转和交叉的方法和装置 | |
| CN106030514A (zh) | 采用到被屏蔽结果元素的传播将源元素存储到对应未屏蔽结果元素的处理器、方法、系统和指令 | |
| CN107003847A (zh) | 用于将掩码扩展为掩码值向量的方法和装置 | |
| CN110007963A (zh) | 用于无符号双字的矢量乘法和累加的设备和方法 | |
| CN109947471A (zh) | 用于将多组紧缩字节相乘、求和以及累加的装置和方法 | |
| CN107077331A (zh) | 用于执行矢量位反转的方法和装置 | |
| CN109947478A (zh) | 用于有符号双字的向量乘法和累加的装置和方法 | |
| CN107077333B (zh) | 用于实行向量位聚集的方法和装置 | |
| CN104025025B (zh) | 用于对打包数据元素执行增量编码的系统、装置和方法 | |
| CN108292223A (zh) | 用于得到偶数数据元素和奇数数据元素的系统、设备和方法 |
Legal Events
| Date | Code | Title | Description |
|---|---|---|---|
| PB01 | Publication | ||
| PB01 | Publication | ||
| SE01 | Entry into force of request for substantive examination | ||
| SE01 | Entry into force of request for substantive examination | ||
| WD01 | Invention patent application deemed withdrawn after publication | ||
| WD01 | Invention patent application deemed withdrawn after publication |
Application publication date: 20170801 |