CN106922186A - 用于执行自旋‑循环跳转的装置和方法 - Google Patents
用于执行自旋‑循环跳转的装置和方法 Download PDFInfo
- Publication number
- CN106922186A CN106922186A CN201480083502.3A CN201480083502A CN106922186A CN 106922186 A CN106922186 A CN 106922186A CN 201480083502 A CN201480083502 A CN 201480083502A CN 106922186 A CN106922186 A CN 106922186A
- Authority
- CN
- China
- Prior art keywords
- instruction
- test
- value
- field
- processor
- 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
- 238000000034 method Methods 0.000 title claims abstract description 32
- 238000009987 spinning Methods 0.000 title abstract description 6
- 238000012544 monitoring process Methods 0.000 claims abstract description 24
- 238000012360 testing method Methods 0.000 claims abstract description 19
- 230000004044 response Effects 0.000 claims abstract 4
- 238000003860 storage Methods 0.000 claims description 40
- 239000013598 vector Substances 0.000 description 97
- VOXZDWNPVJITMN-ZBRFXRBCSA-N 17β-estradiol Chemical compound OC1=CC=C2[C@H]3CC[C@](C)([C@H](CC4)O)[C@@H]4[C@@H]3CCC2=C1 VOXZDWNPVJITMN-ZBRFXRBCSA-N 0.000 description 73
- 238000010586 diagram Methods 0.000 description 42
- 238000006073 displacement reaction Methods 0.000 description 34
- 238000005538 encapsulation Methods 0.000 description 13
- 210000004027 cell Anatomy 0.000 description 12
- 238000004891 communication Methods 0.000 description 12
- 230000008569 process Effects 0.000 description 12
- 230000006870 function Effects 0.000 description 11
- 230000003321 amplification Effects 0.000 description 10
- 238000006243 chemical reaction Methods 0.000 description 10
- 238000003199 nucleic acid amplification method Methods 0.000 description 10
- 238000012545 processing Methods 0.000 description 9
- 238000005516 engineering process Methods 0.000 description 8
- 230000006835 compression Effects 0.000 description 7
- 238000007906 compression Methods 0.000 description 7
- 239000003795 chemical substances by application Substances 0.000 description 6
- 210000004940 nucleus Anatomy 0.000 description 6
- 230000003068 static effect Effects 0.000 description 5
- 230000001052 transient effect Effects 0.000 description 5
- 238000013519 translation Methods 0.000 description 5
- 108700012361 REG2 Proteins 0.000 description 4
- 101150108637 REG2 gene Proteins 0.000 description 4
- 101100120298 Rattus norvegicus Flot1 gene Proteins 0.000 description 4
- 101100412403 Rattus norvegicus Reg3b gene Proteins 0.000 description 4
- 230000008859 change Effects 0.000 description 4
- 230000000295 complement effect Effects 0.000 description 4
- 238000013461 design Methods 0.000 description 4
- 230000007246 mechanism Effects 0.000 description 4
- 102100023882 Endoribonuclease ZC3H12A Human genes 0.000 description 3
- 101710112715 Endoribonuclease ZC3H12A Proteins 0.000 description 3
- 230000005856 abnormality Effects 0.000 description 3
- 238000000429 assembly Methods 0.000 description 3
- 230000000712 assembly Effects 0.000 description 3
- 230000006399 behavior Effects 0.000 description 3
- 230000008901 benefit Effects 0.000 description 3
- 238000007667 floating Methods 0.000 description 3
- 238000004519 manufacturing process Methods 0.000 description 3
- 238000013507 mapping Methods 0.000 description 3
- 230000004048 modification Effects 0.000 description 3
- 238000012986 modification Methods 0.000 description 3
- QGVYYLZOAMMKAH-UHFFFAOYSA-N pegnivacogin Chemical compound COCCOC(=O)NCCCCC(NC(=O)OCCOC)C(=O)NCCCCCCOP(=O)(O)O QGVYYLZOAMMKAH-UHFFFAOYSA-N 0.000 description 3
- 230000009467 reduction Effects 0.000 description 3
- 239000007787 solid Substances 0.000 description 3
- 230000007704 transition Effects 0.000 description 3
- 108010022579 ATP dependent 26S protease Proteins 0.000 description 2
- 230000009471 action Effects 0.000 description 2
- 230000033228 biological regulation Effects 0.000 description 2
- 238000009826 distribution Methods 0.000 description 2
- 235000013399 edible fruits Nutrition 0.000 description 2
- 238000002156 mixing Methods 0.000 description 2
- 230000000717 retained effect Effects 0.000 description 2
- 239000000758 substrate Substances 0.000 description 2
- 238000012546 transfer Methods 0.000 description 2
- 241001269238 Data Species 0.000 description 1
- 230000003190 augmentative effect Effects 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 229910002056 binary alloy Inorganic materials 0.000 description 1
- 238000004422 calculation algorithm Methods 0.000 description 1
- 238000004364 calculation method Methods 0.000 description 1
- 238000004590 computer program Methods 0.000 description 1
- 230000008878 coupling Effects 0.000 description 1
- 238000010168 coupling process Methods 0.000 description 1
- 238000005859 coupling reaction Methods 0.000 description 1
- 238000013506 data mapping Methods 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 230000003247 decreasing effect Effects 0.000 description 1
- 230000001934 delay Effects 0.000 description 1
- 238000000151 deposition Methods 0.000 description 1
- 238000001514 detection method Methods 0.000 description 1
- 230000004069 differentiation Effects 0.000 description 1
- 238000003780 insertion Methods 0.000 description 1
- 230000037431 insertion Effects 0.000 description 1
- 238000007726 management method Methods 0.000 description 1
- 230000000873 masking effect Effects 0.000 description 1
- 239000003607 modifier Substances 0.000 description 1
- 229910052754 neon Inorganic materials 0.000 description 1
- GKAOGPIIYCISHV-UHFFFAOYSA-N neon atom Chemical compound [Ne] GKAOGPIIYCISHV-UHFFFAOYSA-N 0.000 description 1
- 230000006911 nucleation Effects 0.000 description 1
- 238000010899 nucleation Methods 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 230000002441 reversible effect Effects 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 238000004088 simulation Methods 0.000 description 1
- 241000894007 species Species 0.000 description 1
- 238000003756 stirring Methods 0.000 description 1
- 230000001629 suppression Effects 0.000 description 1
- XLYOFNOQVPJJNP-UHFFFAOYSA-N water Substances O XLYOFNOQVPJJNP-UHFFFAOYSA-N 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- 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/3005—Arrangements for executing specific machine instructions to perform operations for flow control
- G06F9/30065—Loop control instructions; iterative instructions, e.g. LOOP, REPEAT
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/3001—Arithmetic instructions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30021—Compare instructions, e.g. Greater-Than, Equal-To, MINMAX
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/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; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30076—Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30145—Instruction analysis, e.g. decoding, instruction word fields
Abstract
一种用于执行自旋‑循环跳转的装置和方法。处理器的一个实施例包括:跳转‑暂停执行逻辑,其执行跳转‑暂停指令,所述跳转‑暂停指令指定条件并且标识目的地指令;其中响应于跳转‑暂停指令的执行,跳转‑暂停执行逻辑要提供跳转‑暂停指令和目的地指令之间的循环包括自旋‑等待循环的提示,以及测试所述条件,如果满足所述条件,则所述跳转‑暂停执行逻辑在跳转到目的地指令之前按指定量延迟执行。处理器的第二实施例包括测试‑减法执行逻辑,其执行测试‑减法指令,所述测试‑减法执行逻辑使第二源寄存器中的计数器值递减,所述测试‑减法执行逻辑还测试第一源寄存器或存储器中的监视值和第二源寄存器中的计数器值,其中如果监视值具有指示退出条件的值或者如果计数器值等于零,则所述测试‑减法执行逻辑要退出自旋‑等待循环。
Description
技术领域
本发明一般涉及计算机处理器的领域。更特别地,本发明涉及用于执行自旋-循环(spin-loop)跳转的方法和装置。
背景技术
指令集或指令集架构(ISA)是与编程相关的计算机架构的部分,其包括原生数据类型、指令、寄存器架构、寻址模式、存储器架构、中断和异常处理、以及外部输入和输出(I/O)。应注意的是,术语“指令”在本文中一般是指宏指令(即被提供给处理器以供执行的指令),与微指令或微操作(micro-op)(即处理器的解码器解码宏指令的结果)相对。微指令或微操作可以被配置成指示处理器上的执行单元来实行操作以实现与宏指令关联的逻辑。
ISA与微架构不同,所述微架构是用于实现指令集的处理器设计技术的集合。具有不同微架构的处理器可以共享公共指令集。例如,Intel®奔腾4处理器、Intel®CoreTM处理器和来自加利福尼亚州桑尼维尔的高级微设备公司的处理器实现几乎相同的版本的x86指令集(具有已经添加有较新版本的一些扩展),但具有不同的内部设计。例如,ISA的相同寄存器架构可以使用公知的技术在不同的微架构中以不同的方式实现,包括专用物理寄存器、使用寄存器重命名机制(例如,使用寄存器别名表(RAT)、重排序缓冲器(ROB)和退役寄存器文件)的一个或多个动态分配的物理寄存器。除非以其他方式指定,否则短语寄存器架构、寄存器文件和寄存器在本文中用于指代对软件/编程器可见的那个以及指令以其指定寄存器的方式。在需要区别的情况下,形容词“逻辑的”、“架构的”或“软件可见的”将用于指示寄存器架构中的寄存器/文件,而不同形容词将用于指定给定微架构中的寄存器(例如,物理寄存器、重排序缓冲器、退役寄存器、寄存器池)。
指令集包括一个或多个指令格式。给定指令格式定义各种字段(位的数量、位的位置)以除了其他之外尤其指定将执行的操作和该操作将在其上执行的(一个或多个)操作数。某些指令格式通过指令模板(或者子格式)的定义被进一步分解。例如,给定指令格式的指令模板可以被定义为具有指令格式的字段的不同子集(所包括的字段典型地以相同的次序,但是至少某些具有不同的位的位置,因为包括更少的字段)和/或被定义为具有不同地解释的给定字段。给定指令使用给定指令格式(并且,如果被定义,以该指令格式的指令模板中的给定的一个)来表达并指定操作和操作数。指令流是指令的特定序列,其中序列中的每个指令是以指令格式(并且,如果被定义,该指令格式的指令模板中的给定的一个)的指令的出现。
附图说明
对本发明的更好的理解可以从以下详细描述结合附图来获得,其中:
图1A和1B是图示根据本发明的实施例的通用矢量友好的指令格式及其指令模板的框图;
图2A-D是图示根据本发明的实施例的示例性特定矢量友好的指令格式的框图;
图3是根据本发明的一个实施例的寄存器架构的框图;以及
图4A是图示根据本发明的实施例的示例性有序取出、解码、退役流水线和示例性寄存器重命名、无序发出/执行流水线二者的框图;
图4B是图示根据本发明的实施例的要被包括在处理器中的有序取出、解码、退役核的示例性实施例和示例性寄存器重命名、无序发出/执行架构核二者的框图;
图5A是单个处理器核、连同其到管芯上互连网络的连接的框图;
图5B图示根据本发明的实施例的图5A中的处理器核的部分的展开图。
图6是根据本发明的实施例的具有集成存储器控制器和图形的单核处理器和多核处理器的框图;
图7图示根据本发明的一个实施例的系统的框图;
图8图示根据本发明的实施例的第二系统的框图;
图9图示根据本发明的实施例的第三系统的框图;
图10图示根据本发明的实施例的片上系统(SoC)的框图;
图11图示根据本发明的实施例的对比使用软件指令转换器来将源指令集中的二进制指令转换成目标指令集中的二进制指令的框图;
图12图示可以在其上实现本发明的实施例的示例性处理器;
图13图示示出示例性自旋-循环的方法;
图14图示由跳转-暂停(jump-pause)指令的一个实施例执行的多个操作;
图15图示根据测试-减法(test-subtract)指令的一个实施例的方法。
具体实施方式
在以下描述中,为了解释的目的,阐述众多具体细节以便提供对以下描述的本发明的实施例的透彻理解。然而,对于本领域技术人员将明显的是,本发明的实施例可以在没有这些具体细节中的一些的情况下实践。在其他情况下,公知的结构和设备以框图的形式示出以避免使本发明的实施例的基础原理模糊。
示例性处理器架构和数据类型
指令集包括一个或多个指令格式。给定指令格式定义各种字段(位的数量、位的位置)以除了其他之外尤其指定将执行的操作(操作码(opcode))和该操作将在其上执行的(一个或多个)操作数。某些指令格式通过指令模板(或者子格式)的定义被进一步分解。例如,给定指令格式的指令模板可以被定义为具有指令格式的字段的不同子集(所包括的字段典型地以相同的次序,但是至少某些具有不同的位的位置,因为包括更少的字段)和/或被定义为具有不同地解释的给定字段。因此,ISA的每个指令使用给定指令格式(并且,如果被定义,以该指令格式的指令模板中的给定的一个)来表达并包括用于指定操作和操作数的字段。例如,示例性ADD指令具有特定操作码和指令格式,所述指令格式包括指定该操作码的操作码字段和选择操作数(源1(source1)/目的地和源2(source2))的操作数字段;并且在指令流中该ADD指令的出现将在选择特定操作数的操作数字段中具有特定的内容。称为高级矢量扩展(AVX)(AVX1和AVX2)并使用矢量扩展(VEX)编码方案的SIMD扩展的集合已经已经被发布和/或出版(例如,参见Intel®64和IA-32架构软件开发者手册,2011年10月;并且参见Intel®高级矢量扩展编程参考,2011年6月)。
示例性指令格式
本文描述的(一个或多个)指令的实施例可以以不同格式来体现。此外,下面详述了示例性的系统、架构和流水线。(一个或多个)指令的实施例可以在这样的系统、架构和流水线上执行,但并不限于所详述的那些。
A.通用矢量友好的指令格式
矢量友好的指令格式是适合于矢量指令的指令格式(例如,存在对矢量操作特定的某些字段)。虽然描述了其中通过矢量友好的指令格式支持矢量和标量操作两者的实施例,但可替换的实施例仅使用矢量友好的指令格式的矢量操作。
图1A-1B是图示了根据本发明的实施例的通用矢量友好的指令格式及其指令模板的框图。图1A是图示了根据本发明的实施例的通用矢量友好的指令格式及其A类指令模板的框图;而图1B是图示了根据本发明的实施例的通用矢量友好的指令格式及其B类指令模板的框图。具体地,针对通用矢量友好的指令格式100定义了A类和B类指令模板,其两者都包括非存储器访问105指令模板和存储器访问120指令模板。在矢量友好的指令格式的上下文中的术语通用是指该指令格式不被束缚于任何特定指令集。
虽然将描述其中矢量友好的指令格式支持下述内容的本发明的实施例:具有32位(4字节)或64位(8字节)数据元素宽度(或大小)的64字节矢量操作数长度(或大小)(并且因此,包括16个双字大小元素或可替换地8个四字大小元素的64字节矢量);具有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指令模板内示出非存储器访问、完全舍入控制类型操作110指令模板和非存储器访问、数据变换类型操作115指令模板;以及2)在存储器访问120指令模板内示出存储器访问、暂时125指令模板和存储器访问、非暂时130指令模板。图1B中的B类指令模板包括:1)在非存储器访问105指令模板内示出非存储器访问、写入掩蔽控制、部分舍入控制类型操作112指令模板和非存储器访问、写入掩蔽控制、vsize类型操作117指令模板;以及2)在存储器访问120指令模板内示出存储器访问、写入掩蔽控制127指令模板。
通用矢量友好的指令格式100包括以图1A-1B中图示的次序在下文列出的下述字段。
格式字段140——在该字段中的特定值(指令格式标识符值)唯一地标识矢量友好的指令格式,以及因此在指令流中以矢量友好的指令格式的指令的出现。这样,该字段是可选的,在该字段对于仅具有通用矢量友好的指令格式的指令集而言不是需要的意义上。
基础(base)操作字段142——其内容区分不同的基础操作。
寄存器索引字段144——其内容直接地或通过地址生成而指定源和目的地操作数的位置,它们在寄存器中或存储器中。这些包括足够的位数以从PxQ(例如,32x512、16x128、32x1024、64x1024)寄存器文件中选择N个寄存器。虽然在一个实施例中N可以多达三个源和一个目的地寄存器,但可替换实施例可以支持更多或更少的源和目的地寄存器(例如,可以支持多达两个源,其中这些源之一还用作目的地,可以支持多达三个源,其中这些源之一还用作目的地,可以支持多达两个源和一个目的地)。
修改器字段146——其内容区分指定存储器访问的以通用矢量指令格式的指令的出现与不指定存储器访问的那些;也就是说,将非存储器访问105指令模板与存储器访问120指令模板进行区分。存储器访问操作读取和/或写入至存储器层级(在某些情况下使用寄存器中的值指定源和/或目的地地址),而非存储器访问操作不这样做(例如,源和目的地是寄存器)。虽然在一个实施例中该字段还在三个不同的方式之间进行选择以执行存储器地址计算,但可替换实施例可以支持更多、更少或不同的方式以执行存储器地址计算。
扩增操作字段150——其内容区分除了基础操作之外还将执行的各种不同操作中的哪一个。该字段是上下文特定的。在本发明的一个实施例中,该字段被划分成类别字段168、阿尔法(alpha)字段152和贝塔(beta)字段154。扩增操作字段150允许普通操作组将在单个指令而不是2、3或4个指令中执行。
缩放(scale)字段160——其内容计及用于存储器地址生成的索引字段的内容的缩放(例如,对于使用2scale*索引+基础的地址生成)。
位移字段162A——其内容被用作存储器地址生成的部分(例如,对于使用2scale*索引+基础+位移的地址生成)。
位移因子字段162B(注意位移字段162A直接并置在位移因子字段162B之上指示使用一个或另一个)——其内容被用作地址生成的部分;它指定将按存储器访问的大小(N)缩放的位移因子——其中N是存储器访问中的字节数(例如,对于使用2scale*索引+基础+缩放的位移的地址生成)。冗余的低阶位被忽略,并因此,位移因子字段的内容与存储器操作数总大小(N)相乘以便生成将在计算有效地址中使用的最终位移。N的值由处理器硬件在运行时基于完全操作码字段174(本文稍后描述)和数据操纵字段154C确定。在它们并不用于非存储器访问105指令模板和/或不同的实施例可以实现二者中仅一个或二者都不实现的意义上,位移字段162A和位移因子字段162B是可选的。
数据元素宽度字段164——其内容区分多个数据元素宽度中的哪一个将被使用(在某些实施例中,针对所有指令;在其他实施例中,仅针对部分指令)。在仅支持一个数据元素宽度和/或使用操作码的某些方面支持多个数据元素宽度的情况下并不需要该字段的意义上,该字段是可选的。
写入掩蔽字段170——其内容在每个数据元素位置的基础上控制在目的地矢量操作数中的该数据元素位置是否反映基础操作和扩增操作的结果。A类指令模板支持合并写入掩蔽,而B类指令模板支持合并和归零写入掩蔽两者。当合并时,矢量掩蔽允许保护目的地中的任何元素集合在(由基础操作和扩增操作指定的)任何操作的执行期间免于被更新;在另一实施例中,保留其中对应掩蔽位具有0的目的地的每个元素的旧值。作为对照,当归零矢量掩蔽允许目的地中的任何元素集合在(由基础操作和扩增操作指定的)任何操作的执行期间归零时;在一个实施例中,当对应掩蔽位具有0值时,目的地的元素被设置成0。该功能的子集是控制正被执行的操作的矢量长度(也就是说,正被修改的元素的跨度,从第一个至最后一个)的能力;然而,被修改的元素是连续的并不是必要的。因此,写入掩蔽字段170计及部分矢量操作,包括加载、存储、算术、逻辑等等。虽然描述了其中写入掩蔽字段170的内容选择多个写入掩蔽寄存器中的包含将使用的写入掩蔽的一个(并且因此写入掩蔽字段170的内容间接标识将执行的掩蔽)的本发明的实施例,但可替换的实施例替换地或附加地允许掩蔽写入字段170的内容直接指定将执行的掩蔽。
立即数(immediate)字段172——其内容计及对立即数的规定。在该字段在不支持立即数的通用矢量友好的格式的实现中不存在并且在不使用立即数的指令中不存在的意义上,该字段是可选的。
类别字段168——其内容区分不同的指令类别。参考图1A-B,该字段的内容在A类和B类指令之间进行选择。在图1A-B中,圆角方形用于指示在字段中存在特定值(例如,对于类别字段168在图1A-B中分别为A类168A和B类168B)。
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的内容指示抑制被启用时,给定指令并不报告任何种类的浮点异常标记并且不引起任何浮点异常处理机(handler)。
舍入操作控制字段158——其内容区分要执行一组舍入操作中的哪一个(例如,向上舍入、向下舍入、向零舍入以及向最近舍入)。因此,舍入操作控制字段158计及在每个指令的基础上改变舍入模式。在其中处理器包括用于指定舍入模式的控制寄存器的本发明的一个实施例中,舍入操作控制字段150的内容超越(override)该寄存器值。
非存储器访问指令模板——数据变换类型操作
在非存储器访问数据变换类型操作115指令模板中,贝塔字段154被解释为数据变换字段154B,其内容区分多个数据变换中的哪一个将被执行(例如,无数据变换、拌和(swizzle)、广播)。
在A类的存储器访问120指令模板的情况下,阿尔法字段152被解释为逐出提示字段152B,其内容区分哪一个逐出提示将被使用(在图1A中,针对存储器访问、暂时125指令模板和存储器访问、非暂时130指令模板分别指定暂时152B.1和非暂时152B.2),而贝塔字段154被解释为数据操纵字段154C,其内容区分多个数据操纵操作(还称为基元(primitive))中的哪一个将被执行(例如,无操纵;广播;源的上转换;以及目的地的下转换)。存储器访问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,示出了包括格式字段140、基础操作字段142以及数据元素宽度字段164的完全操作码字段174。虽然示出了其中完全操作码字段174包括所有这些字段的一个实施例,但是在不支持它们所有的实施例中,完全操作码字段174包括少于所有这些字段。完全操作码字段174提供操作代码(操作码)。
扩增操作字段150、数据元素宽度字段164以及写入掩蔽字段170允许在通用矢量友好的指令格式中在每个指令的基础上指定这些特征。
写入掩蔽字段和数据元素宽度字段的组合创建类型化指令,因为它们允许基于不同的数据元素宽度而应用掩蔽。
在A类和B类内找到的各种指令模板有益于不同状况。在本发明的一些实施例中,不同处理器或处理器内的不同核可以支持仅A类、仅B类或者支持两类。例如,意图用于通用计算的高性能通用无序核可以仅支持B类,主要意图用于图形和/或科学(吞吐量)计算的核可以仅支持A类,并且意图用于两者的核可以支持两者(当然,具有来自两类的模板和指令的某种混合而并非来自两类的所有模板和指令的核在本发明的范围内)。而且,单个处理器可以包括多个核,其全部支持相同的类别或者其中不同的核支持不同的类别。例如,在具有单独的图形和通用核的处理器中,主要意图用于图形和/或科学计算的图形核中的一个可以仅支持A类,而通用核中的一个或多个可以为仅支持B类的意图用于通用计算的具有无序执行和寄存器重命名的高性能通用核。不具有单独的图形核的另一处理器可以包括支持A类和B类两者的一个多个通用有序或无序核。当然,在本发明的不同实施例中来自一个类别的特征还可以实现在另一类别中。以高级语言撰写的程序会被放入(例如,即时编译或静态编译)多种不同的可执行的形式,包括:1)仅具有由目标处理器支持以供执行的(一个或多个)类别的指令的形式;或者2)具有使用所有类别的指令的不同组合撰写的可替换的例程并具有基于由当前执行代码的处理器支持的指令而选择例程以执行的控制流代码的形式。
B. 示例性特定矢量友好的指令格式
图2是图示根据本发明的实施例的示例性特定矢量友好的指令格式的框图。图2示出了特定矢量友好的指令格式200,其在它指定了字段的位置、大小、解释和次序以及针对那些字段中某些的值的意义上而言是特定的。特定矢量友好的指令格式200可以用于扩展x86指令集,并因此某些字段与在现有x86指令集及其扩展(例如,AVX)中使用的那些相似或相同。此格式保持与具有扩展的现有x86指令集的前缀编码字段、实操作码字节(real opcodebyte)字段、MOD R/M字段、SIB字段、位移字段和立即数字段一致。图示了从图1的字段至图2的字段的映射。
应当理解,尽管为了说明的目的在通用矢量友好的指令格式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位字段相同的功能,并且使用1补码形式进行编码,即ZMM0被编码为1111B,ZMM15被编码为0000B。指令的其他字段对如本领域所已知的寄存器索引的较低三个位(rrr、xxx和bbb)进行编码,以使得Rrrr、Xxxx和Bbbb可以通过添加EVEX.R、EVEX.X以及EVEX.B形成。
REX’字段110——这是REX’字段110的第一部分并且是EVEX.R’位字段(EVEX字节1,位[4]-R’),其用于对扩展的32寄存器组的高16个或低16个进行编码。在本发明的一个实施例中,该位连同如下文指示的其他位一起以位反转的格式存储以与BOUND指令区分(在公知的x86 32位模式中),其实操作码字节为62,但在MOD R/M字段(在下文描述)中并不接受在MOD字段中的值11;本发明的可替换的实施例并不以反转格式存储该位和下面指示的其他位。值1被用于编码较低的16个寄存器。换句话说,通过组合EVEX.R’,EVEX.R以及来自其他字段的其他RRR形成R’Rrrr。
操作码映射字段215(EVEX字节1,位[3:0]-mmmm)——其内容对一个暗含的引导操作码字节(0F、0F38、或者0F3)进行编码。
数据元素宽度字段164(EVEX字节2,位[7]-W)——由注释EVEX.W表示。EVEX.W用于定义数据类型的粒度(大小)(32位数据元素或64位数据元素)。
EVEX.vvvv 220(EVEX字节2,位[6:3]-vvvv)——EVEX.vvvv的角色可以包括以下:1)EVEX.vvvv对第一源寄存器操作数进行编码,以反转(1补码)形式指定并且对于具有2个或更多源操作数的指令有效;2)EVEX.vvvv对目的地寄存器操作数进行编码,对于某些矢量移位以1补码形式指定;或者3)EVEX.vvvv并不对任何操作数进行编码,该字段被保留并应当包含1111b。因此,EVEX.vvvv字段220对以反转(1补码)形式存储的第一源寄存器说明符(specifier)的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前缀格式的传统SSE指令提供支持外,这还具有压缩SIMD前缀的益处(而不需要字节来表达SIMD前缀,EVEX前缀仅需要2位)。在一个实施例中,为了支持使用以传统格式和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.write mask control(写入掩蔽控制)以及EVEX.N;也用图示)——如前面所述,该字段是上下文特定的。
贝塔字段154(EVEX字节3,位[6:4]-SSS,还称为、、EVEX.rr1、EVEX.LL0、EVEX.LLB;也用图示)——如前面所述,该字段是上下文特定的。
REX’字段110——这是REX’字段的剩余部分并且是EVEX.V’位字段(EVEX字节3,位[3]-V’),其可用于对扩展的32寄存器组的较高16个或较低16个进行编码。该位以位反转的格式存储。值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位位移。因此,位移因子字段162B以与x86指令集8位位移相同的方式编码(因此在ModRM/SIB编码规则中没有改变),仅有例外是disp8被超载(overload)为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时(VSIZE157.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类指令模板在封装(packed)或标量单/双精度浮点数据和封装或标量整数数据上操作。标量操作是在zmm/ymm/xmm寄存器中的最低阶数据元素位置上执行的操作;较高阶的数据元素位置被保留为与它们在指令之前相同,或者被归零,取决于实施例。
写入掩蔽寄存器315——在图示的实施例中,存在8个写入掩蔽寄存器(k0至k7),每个在大小方面为64位。在可替换的实施例中,写入掩蔽寄存器315在大小方面为16位。如前面所描述的,在本发明的一个实施例中,矢量掩蔽寄存器k0不能被用作写入掩蔽;当通常指示k0的编码被用于写入掩蔽时,它选择0xFFFF的硬接线写入掩蔽,有效地禁用针对该指令的写入掩蔽。
通用寄存器325——在图示的实施例中,存在连同现有的x86寻址模式一起使用以对存储器操作数进行寻址的十六个64位通用寄存器。通过名称RAX、RBX、RCX、RDX、RBP、RSI、RDI、RSP以及R8至R15引用这些寄存器。
标量浮点栈寄存器文件(x87栈)345,其上是别名为MMX封装整数扁平寄存器文件350——在图示的实施例中, x87栈是用于在32/64/80位浮点数据上使用x87指令集扩展执行标量浮点操作的八元素栈;而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包括耦合到指令高速缓存单元434的分支预测单元432,所述指令高速缓存单元434耦合到指令转换后备缓冲器(TLB)436,所述指令转换后备缓冲器436耦合到指令取出单元438,所述指令取出单元438耦合到解码单元440。解码单元440(或解码器)可以解码指令,并且作为输出生成一个或多个微操作、微代码入口点、微指令、其他指令或其他控制信号,其从原始指令解码或者以其他方式反映原始指令或者从原始指令得到。解码单元440可以使用各种不同的机制来实现。适当的机制的示例包括但不限于,查找表、硬件实现、可编程逻辑阵列(PLA)、微代码只读存储器(ROM)等。在一个实施例中,核490包括微代码ROM或其他介质,其存储用于某些宏指令的微代码(例如,在解码单元440中或以其他方式在前端单元430内)。解码单元440被耦合到执行引擎单元450中的重命名/分配器单元452。
执行引擎单元450包括耦合到退役单元454和一个或多个调度器单元456的集合的重命名/分配器单元452。(一个或多个)调度器单元456表示任何数目的不同调度器,包括保留站、中央指令窗口等。(一个或多个)调度器单元456被耦合到(一个或多个)物理寄存器文件单元458。(一个或多个)物理寄存器文件单元458中的每一个表示一个或多个物理寄存器文件,其中的不同的物理寄存器文件存储一个或多个不同的数据类型,诸如标量整数、标量浮点、封装整数、封装浮点、矢量整数、矢量浮点、状态(例如,作为要执行的下一指令的地址的指令指针)等。在一个实施例中,(一个或多个)物理寄存器文件单元458包括矢量寄存器单元、写入掩蔽寄存器单元和标量寄存器单元。这些寄存器单元可以提供架构矢量寄存器、矢量掩蔽寄存器和通用寄存器。(一个或多个)物理寄存器文件单元458由退役单元454重叠,以说明其中寄存器重命名和无序执行可以被实现的各种方式(例如,使用(一个或多个)重排序缓冲器以及(一个或多个)退役寄存器文件;使用(一个或多个)未来文件、(一个或多个)历史缓冲器、以及(一个或多个)退役寄存器文件;使用寄存器映射和寄存器池等)。退役单元454和(一个或多个)物理寄存器文件单元458耦合到(一个或多个)执行群集460。(一个或多个)执行群集460包括一个或多个执行单元462的集合以及一个或多个存储器访问单元464的集合。执行单元462可以实行各种操作(例如,移位、加法、减法、乘法)并且在各种类型的数据(例如,标量浮点、封装整数、封装浮点、矢量整数、矢量浮点)上实行操作。虽然一些实施例可以包括专用于特定功能或功能集合的多个执行单元,但是其他实施例可以仅包括一个执行单元或所有实行所有功能的多个执行单元。(一个或多个)调度器单元456、(一个或多个)物理寄存器文件单元458和(一个或多个)执行群集460被示出为可能复数的,因为某些实施例创建用于某些类型的数据/操作的单独的流水线(例如,标量整数流水线、标量浮点/封装整数/封装浮点/矢量整数/矢量浮点流水线和/或存储器访问流水线,每个都具有其自己的调度器单元、(一个或多个)物理寄存器文件单元和/或执行群集——并且在单独的存储器访问流水线的情况下,实现其中仅该流水线的执行群集具有(一个或多个)存储器访问单元464的某些实施例)。还应当理解,在使用单独流水线的情况下,这些流水线中的一个或多个可以是无序发出/执行并且其余是有序的。
存储器访问单元464的集合可以耦合到存储器单元470,其包括耦合到数据高速缓存单元474的数据TLB单元472,所述数据高速缓存单元474耦合到2级(L2)高速缓存单元476。在一个示例性实施例中,存储器访问单元464可以包括加载单元、存储地址单元和存储数据单元,其中的每一个可以耦合到存储器单元470中的数据TLB单元472。指令高速缓存单元434进一步被耦合到存储器单元470中的2级(L2)高速缓存单元476。L2高速缓存单元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)的逻辑,从而允许被许多多媒体应用使用的操作使用封装数据来实行。
应当理解,核可以支持多线程(执行操作或线程的两个或更多个并行集合),并且可以以各种方式来这样做,包括时间分段多线程、同时多线程(其中单个物理核提供用于物理核同时多线程化的线程中的每一个的逻辑核)或其组合(例如,时间分段取出和解码以及此后的同时多线程,诸如在Intel®超线程技术中)。
虽然寄存器重命名在无序执行的上下文中进行描述,但是应当理解,寄存器重命名可以在有序架构中使用。虽然所示的处理器的实施例还包括单独的指令和数据高速缓存单元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中,并且从其他子集清除(flush),如果必要的话。环形网络确保共享数据的一致性。环形网络是双向的,以允许诸如处理器核、L2高速缓存或其他逻辑块之类的代理在芯片内与彼此进行通信。每个环形数据路径每个方向是1012位宽。
图5B是根据本发明的实施例的图5A中的处理器核的部分的展开图。图5B包括L1高速缓存504的L1数据高速缓存506A部分以及关于矢量单元510和矢量寄存器514的更多细节。具体地,矢量单元510是16宽矢量处理单元(VPU)(见16宽ALU 528),其执行整数、单精度浮点和双精度浮点指令中的一个或多个。VPU用拌和单元520支持对寄存器输入进行拌和、用数值转换单元522A-B支持数值转换、以及在存储器输入上用复制单元524支持复制。写入掩蔽寄存器526允许预测所得到的矢量写入。
图6是根据本发明的实施例的处理器600的框图,所述处理器600可以具有多于一个核、可以具有集成存储器控制器并且可以具有集成图形。图6中的实线框图示了具有单个核602A、系统代理610、一个或多个总线控制器单元616集合的处理器600,而虚线框的可选添加图示了具有多个核602A-N、系统代理单元610中的一个或多个集成存储器控制器单元614的集合以及专用逻辑608的替代处理器600。
因此,处理器600的不同实现可以包括:1)具有作为集成图形和/或科学(吞吐量)逻辑的专用逻辑608(其可以包括一个或多个核)以及作为一个或多个通用核(例如,通用有序核、通用无序核、二者的组合)的核602A-N的CPU;2)具有作为主要意图用于图形和/或科学(吞吐量)的大量专用核的核 602A-N的协处理器;以及3)具有作为大量通用有序核的核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、个人数字助理、工程工作站、服务器、网络设备、网络中心(hub)、交换机、嵌入式处理器、数字信号处理器(DSP)、图形设备、视频游戏设备、机顶盒、微控制器、蜂窝电话、便携式媒体播放器、手持设备和各种其他电子设备的其他系统设计和配置也是适当的。通常,如本文公开的能够包含处理器和/或其他执行逻辑的大量系统或电子设备通常是适当的。
现在参考图7,示出了根据本发明的一个实施例的系统700的框图。系统700可以包括耦合到控制器中心720的一个或多个处理器710、715。在一个实施例中,控制器中心720包括图形存储器控制器中心(GMCH)790和输入/输出中心(IOH)750(其可能在分离的芯片上);GMCH 790包括存储器740和协处理器745所耦合到的存储器和图形控制器;IOH 750将输入/输出(I/O)设备760耦合到GMCH 790。替代地,存储器和图形控制器中的一个或二者被集成在处理器内(如本文所述),存储器740和协处理器745被直接耦合到处理器710,以及在具有IOH 750的单个芯片中的控制器中心720。
在图7中用虚线表示附加处理器715的可选性质。每个处理器710、715可以包括本文描述的处理核中的一个或多个,并且可以是某个版本的处理器600。
存储器740可以是例如动态随机存取存储器(DRAM)、相变存储器(PCM)或者二者组合。对于至少一个实施例,控制器中心720经由多点总线与(一个或多个)处理器710、715进行通信,诸如前侧总线(FSB)、诸如QuickPath互连(QPI)之类的点对点接口或类似的连接795。
在一个实施例中,协处理器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可以均经由单独的P-P接口852、854使用点对点接口电路876、894、886、898来与芯片组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。在一个实施例中,一个或多个附加处理器815(诸如协处理器、高吞吐量MIC处理器、GPGPU、加速器(诸如例如,图形加速器或数字信号处理(DSP)单元)、现场可编程门阵列或任何其他处理器)被耦合到第一总线816。在一个实施例中,第二总线820可以是低引脚计数(LPC)总线。在一个实施例中,各种设备可以被耦合到第二总线820,包括例如键盘和/或鼠标822、通信设备827和可以包括指令/代码和数据830的存储单元828,诸如盘驱动器或其他大容量存储设备。此外,音频I/O 824可以被耦合到第二总线820。注意,其他架构可以是可能的。例如,代替图8的点对点架构,系统可以实现多点总线或其他这样的架构。
现在参考图9,示出了根据本发明的实施例的第二更具体的示例性系统900的框图。如在图8和图9中的元件承载类似的附图标记,并且图8的某些方面已经从图9中省略,以避免混淆图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指令集核1116的处理器原生执行的x86二进制代码1106。具有至少一个x86指令集核1116的处理器表示可以通过兼容地执行或以其他方式处理下述来实行与具有至少一个x86指令集核的英特尔处理器大体上相同功能的任何处理器:(1)英特尔x86指令集核的指令集的大部分或(2)目的在于在具有至少一个x86指令集核的英特尔处理器上运行的应用或其他软件的对象代码版本,以便于与具有至少一个x86指令集核的英特尔处理器实现大体上相同结果。x86编译器1104表示操作为生成x86二进制代码1106(例如,对象代码)的编译器,其可以具有或不具有附加链接处理的情况下在具有至少一个x86指令集核1116的处理器上被执行。类似地,图11示出了以高级语言1102的程序可以使用替代指令集编译器1108来编译,以生成替代指令集二进制代码1110,其可以由不具有至少一个x86指令集核1114的处理器来原生地执行(例如,具有执行加利福尼亚州桑尼维尔的MIPS科技的MIPS指令集和/或执行加利福尼亚州桑尼维尔的ARM控股公司的ARM指令集的核的处理器)。指令转换器1112用于将x86二进制码1106转换成可以由不具有x86指令集核1114的处理器原生地执行的代码。该转换的代码不太可能与替代指令集二进制代码1110相同,因为能够这样的指令转换器难以制作;然而,转换的代码将完成一般操作,并且由来自替代指令集的指令组成。因此,指令转换器1112表示软件、固件、硬件或其组合,其通过仿真、模拟或任何其他处理来允许不具有x86指令集处理器或核的处理器或其他电子设备执行x86二进制代码1106。
用于实现自旋-循环跳转的方法和装置
以下描述的本发明的实施例降低自旋-等待循环中的指令的总体数目。特别地,本发明的一个实施例包括跳转-暂停指令(JPAUSE(cc)DST),其暗示循环自旋-等待,并跳转(在特定延迟之后)到目的地指令(DST),如果满足条件的话(例如,基于条件代码(cc)值)。在一个实施例中,测试-减法指令(TESTSUB MEM/REG1,REG2)作为源而接受监视值(存储器位置或寄存器)和计数器(寄存器),将计数器降低1,测试监视值,并且针对零值而测试计数器。如以下所讨论的,这两个新指令二者都用于降低对于自旋-等待循环所需的指令的总体数目。
如图12中所示,本发明的实施例可以在其上实现的示例性处理器1255包括具有用于解码跳转-暂停指令的跳转-暂停(JPAUSE)解码逻辑1231和用于解码测试-减法指令的测试-减法(TESTSUB)解码逻辑1232的解码器1230。还图示了具有用于执行解码的跳转-暂停指令的跳转-暂停(JPAUSE)执行逻辑1232以及用于执行解码的测试-减法指令的测试-减法(TESTSUB)执行逻辑1242的执行逻辑1240。
现在将描述示例性处理器的附加细节。然而,应注意的是,本发明的基础原理不限于任何特定类型的处理器架构。
所图示的处理器架构包括通用寄存器(GPR)集合1205、矢量寄存器集合1206、和掩蔽寄存器集合1207。在一个实施例中,多个矢量数据元素被封装到每一个矢量寄存器1206中,所述矢量寄存器1206可以具有512位宽度以用于存储两个256位值、四个128位值、八个64位值、十六个32位值等。然而,本发明的基础原理不限于任何特定大小/类型的矢量数据。在一个实施例中,掩蔽寄存器1207包括八个64位操作数掩蔽寄存器,其用于在存储在矢量寄存器1206中的值上执行位掩蔽操作(例如,实现为上述掩蔽寄存器k0-k7)。然而,本发明的基础原理不限于任何特定掩蔽寄存器大小/类型。
为了简化在图12中图示了单个处理器核(“核0”)的细节。然而,将理解的是图12中示出的每一个核可以具有与核0相同的逻辑集合。例如,每个核可以包括专用1级(L1)高速缓存1212和2级(L2)高速缓存以用于根据指定高速缓存管理策略来高速缓存指令和数据。L1高速缓存1212包括用于存储指令的单独的指令高速缓存1220和用于存储数据的单独的数据高速缓存1221。存储在各种处理器高速缓存内的指令和数据以高速缓存行的粒度被管理,所述高速缓存行可以是固定大小(例如,在长度上64、128、512字节)。该示例性实施例的每个核具有用于从主存储器1200和/或共享3级(L3)高速缓存1216取出指令的指令取出单元1210;用于解码指令(例如,将程序指令解码成微操作或“uops”)的解码单元1220;用于执行指令的执行单元1240;和用于使指令退役并写回结果的写回单元1250。
指令取出单元1210包括各种公知的组件,其包括用于存储要从存储器1200(或高速缓存之一)取出的下一指令的地址的下一指令指针1230;用于存储最近使用的虚拟到物理指令地址的映射以改进地址转换的速度的指令转换后备缓冲器(ITLB)1204;用于推测地预测指令分支地址的分支预测单元1202;以及用于存储分支地址和目标地址的分支目标缓冲器(BTB)1201。一旦被取出,指令随后被流式传输到指令流水线的剩余级,其包括解码单元1230、执行单元1240和写回单元1250。这些单元中的每一个的结构和功能被本领域普通技术人员良好地理解,并在此将不详细描述以避免使本发明的不同实施例的有关方面模糊。
在图13中图示了示例性自旋-等待循环。在1301处,将监视值(例如,存储在指定存储器位置)与退出标记值比较。如果相等,则在1305处过程退出;如果不相等,则在1302处循环计数器递减。如果在1303处确定了查看计数器达到零,则过程在1305处退出。如果不是,则在1304处执行暂停(PAUSE)指令以向处理器提供改进自旋-等待循环的性能的提示。在一个实施例中,暂停指令包括在Intel®64和IA-32架构软件开发者手册(2014年9月)的部分11.4.4.4中描述的版本。
以下是与自旋-等待循环一起使用暂停指令的示例性指令序列:
此处,在[mem]处的监视值的序列退出等于exit_flag。如果减一操作(sub rcx,1)得到计数器值0,则序列也将退出。否则,执行暂停指令,并且过程跳转回到自旋循环的顶部。
如所提及的,本发明的实施例包括两个新指令来减少这些类型的自旋-等待循环中的指令的总体数目。在一个实施例中,JPAUSE(cc)DST指令在硬件指定的延迟之后将程序控制转移到目的地(DST)指令,如果用与指令关联的条件代码(cc)指定的条件被满足的话,并且提供提示,在该指令和目的地指令之间的循环是自旋-等待循环。在一个实施例中,如果不满足条件,则没有延迟。
以下示例示出可以如何根据本发明的一个实施例实现JPAUSE(cc)DST,并且假定将迭代通过I_MPI_SPIN_COUNT次的自旋循环:
在以上示例中,JPAUSENZ SPIN_LOOP使用“非零”的条件代码,其测试在RCX中是否存在非零值。如果是这样的话,则它引起到SPIN_LOOP的开始(即,cmp [mem], flag)的跳转。如果没有满足条件(即,零值),则没有延迟,并且循环退出。因而,与在使用暂停指令的以上示例中实现相同的结果,但执行更少的指令。
图14图示由跳转-暂停(jump-pause)指令的一个实施例实行的多个操作。在1400处,解码和/或执行跳转-暂停指令。在1401处,向处理器提供提示以指示跳转-暂停指令和目的地指令之间的循环包括自旋-等待循环(例如,以与暂停指令类似的方式)。如果在1403处确定满足由条件代码(cc)指定的条件,则实现指定延迟,之后是到目的地指令的跳转。例如,在以上代码中,jpausenz延迟达指定持续时间,并且然后跳转到自旋循环的开始(cmp[mem], flag)。如果没有满足条件,则过程在1405处退出。
测试-减法指令可以采取形式TESTSUB MEM/REG1, REG2,其从存储器位置(MEM)或寄存器(REG1)接受监视值作为第一源并且计数器作为第二源(REG2)。在一个实施例中,测试-减法指令使计数器递减1,并且测试监视值并且针对零值而测试计数器。
以下示例示出测试-减法指令如何针对跳转-暂停指令被添加到以上示出的程序代码:
因而,在以上示例中,TESTSUB RAX, RCX 使RCX中的计数器值递减1,测试RAX中的监视值(例如,退出标记)以确定是否退出,并且还针对零值测试计数器。图15图示根据测试-减法指令的一个实施例的方法。在1500处,解码和/或执行测试-减法指令。在1501处,第二源寄存器(例如,REG2)中的计数器值递减1。在1502处,测试监视值。在一个实施例中,这简单地通过确定监视值是否等于指定值(例如,0或指定退出标记值)来完成。此外,针对零值测试计数器值。
如果计数器值是零和/或如果监视值等于指定退出值,在1503处确定,则在1505处,过程退出。如果不是,则执行自旋循环(或其他指令序列)中的下一个指令(例如,诸如以上提供的示例中的跳转-暂停指令)。
以下示例提供使用测试-减法指令和跳转-暂停指令二者对以上程序代码序列的另一个修改。
当监视存储器位置[mem]中的值以等待值0(在通常情况下)时,可以使用该序列。因而,利用这些参数,仅需要2个指令,从而显著降低执行时间、降低可执行大小、降低应用大小和/或改进代码可读性。
在前述说明书中,已经参考其具体示例性实施例描述了本发明的实施例。然而,将明显的是,可以在不背离如随附权利要求中所阐述的本发明的较宽泛精神和范围的情况下对其做出各种修改和改变。因此,说明书和附图要以说明性而不是限制性含义来看待。
本发明的实施例可以包括以上已经描述的各种步骤。步骤可以以机器可执行指令来体现,所述机器可执行指令可以用于使通用或专用处理器实行步骤。可替代地,这些步骤可以通过包含用于实行步骤的硬接线逻辑的特定硬件组件或者通过编程的计算机组件和定制硬件组件的任何组合来实行。
如本文所述,指令可以是指硬件的特定配置,诸如专用集成电路(ASIC),其被配置成实行某些操作或具有存储在以非暂时性计算机可读介质体现的存储器中的软件指令或预定功能。因而,可以使用在一个或多个电子设备(例如,终端站、网络元件等)上存储和执行的代码和数据来实现附图中示出的技术。这样的电子设备使用计算机机器可读介质来存储和通信(内部地和/或通过网络与其他电子设备)代码和数据,所述计算机机器可读介质诸如非暂时性计算机机器可读存储介质(例如,磁盘;光盘;随机存取存储器;只读存储器;闪速存储器设备;相变存储器)和暂时性计算机机器可读通信介质(例如,电气、光学、声学或其他形式的传播信号——诸如载波、红外信号、数字信号等)。此外,这样的电子设备典型地包括耦合到一个或多个其他组件的一个或多个处理器的集合,所述一个或多个其他组件诸如一个或多个存储设备(非暂时性机器可读存储介质)、用户输入/输出设备(例如,键盘、触摸屏和/或显示器)和网络连接。处理器集合和其他组件的耦合典型地通过一个或多个总线和桥(也称为总线控制器)。存储设备和承载网络业务的信号分别表示一个或多个机器可读存储介质和机器可读通信介质。因而,给定电子设备的存储设备典型地存储代码和/或数据以供在该电子设备的一个或多个处理器集合上执行。当然,可以使用软件、固件和/或硬件的不同组合来实现本发明的实施例的一个或多个部分。贯穿该详细描述,为了解释的目的,阐述众多具体细节以便提供对本发明的透彻理解。然而,对于本领域技术人员将明显的是,本发明可以在没有这些具体细节中的一些的情况下实践。在某些情况下,不精细详细地描述公知的结构和功能以便避免使本发明的主题模糊。因此,应在以下权利要求的方面判断本发明的范围和精神。
Claims (20)
1.一种处理器,包括:
跳转-暂停执行逻辑,其执行跳转-暂停指令,所述跳转-暂停指令指定条件并且标识目的地指令;
其中响应于跳转-暂停指令的执行,跳转-暂停执行逻辑要提供跳转-暂停指令和目的地指令之间的循环包括自旋-等待循环的提示,以及测试所述条件,如果满足所述条件,则所述跳转-暂停执行逻辑在跳转到目的地指令之前按指定量延迟执行。
2.根据权利要求1所述的处理器,其中如果不满足所述条件,则所述跳转-暂停执行逻辑要退出自旋-等待循环。
3.根据权利要求1所述的处理器,其中所述指定量大于或等于零。
4.根据权利要求1所述的处理器,其中所述目的地指令包括自旋-等待循环中的指令。
5.根据权利要求1所述的处理器,还包括测试-减法执行逻辑,其执行测试-减法指令,所述测试-减法执行逻辑响应地使计数器值递减1、测试监视值和测试计数器值。
6.根据权利要求5所述的处理器,其中所述测试-减法执行逻辑要确定是否监视值指示退出条件以及是否计数器值具有零值,其中如果监视值指示退出条件或者计数器值具有零值,则所述测试-减法执行逻辑要退出自旋-等待循环。
7.根据权利要求6所述的处理器,其中如果监视值不指示退出条件或者计数器值不具有零值,则所述测试-减法执行逻辑要使自旋-等待循环中的下一个指令被执行。
8.一种处理器,包括:
第一源寄存器或存储器,其存储监视值;
第二源寄存器,其存储计数器值;以及
测试-减法执行逻辑,其执行测试-减法指令,所述测试-减法执行逻辑使第二源寄存器中的计数器值递减,所述测试-减法执行逻辑还测试第一源寄存器或存储器中的监视值和第二源寄存器中的计数器值,其中如果监视值具有指示退出条件的值或者如果计数器值等于零,则所述测试-减法执行逻辑要退出自旋-等待循环。
9.根据权利要求8所述的处理器,其中如果监视值不具有指示退出条件的值或者如果计数器值不等于零,则所述测试-减法执行逻辑要使自旋-等待循环中的下一个指令被执行。
10.根据权利要求9所述的处理器,其中自旋-等待循环中的下一个指令包括跳转-暂停指令,其中响应于跳转-暂停指令的执行,跳转-暂停执行逻辑要提供跳转-暂停指令和目的地指令之间的循环包括自旋-等待循环的提示,以及测试条件,如果满足所述条件,则所述跳转-暂停执行逻辑在跳转到目的地指令之前按指定量延迟执行。
11.根据权利要求10所述的处理器,其中如果不满足所述条件,则所述跳转-暂停执行逻辑要退出自旋-等待循环。
12.根据权利要求10所述的处理器,其中所述指定量大于或等于零。
13.根据权利要求10所述的处理器,其中所述目的地指令包括自旋-等待循环中的指令。
14.一种方法,包括:
由处理器执行跳转-暂停指令,所述跳转-暂停指令指定条件并且标识目的地指令;
提供跳转-暂停指令和目的地指令之间的循环包括自旋-等待循环的提示;
响应于跳转-暂停指令的执行而测试所述条件;以及
如果满足所述条件,则在跳转到目的地指令之前按指定量延迟执行。
15.根据权利要求14所述的方法,还包括:
如果不满足所述条件,则退出自旋-等待循环。
16.根据权利要求14所述的方法,其中所述指定量大于或等于零。
17.根据权利要求14所述的方法,其中所述目的地指令包括自旋-等待循环中的指令。
18.根据权利要求14所述的方法,还包括:
执行测试-减法指令以响应地使计数器值递减1,测试监视值和测试计数器值。
19.根据权利要求18所述的方法,还包括:
确定是否监视值指示退出条件以及是否计数器值具有零值;以及
如果监视值指示退出条件或者计数器值具有零值,则退出自旋-等待循环。
20.根据权利要求19所述的方法,还包括:
如果监视值不指示退出条件或者计数器值不具有零值,则使自旋-等待循环中的下一个指令被执行。
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
PCT/IB2014/002984 WO2016097782A1 (en) | 2014-12-17 | 2014-12-17 | Apparatus and method for performing a spin-loop jump |
Publications (1)
Publication Number | Publication Date |
---|---|
CN106922186A true CN106922186A (zh) | 2017-07-04 |
Family
ID=52450526
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201480083502.3A Pending CN106922186A (zh) | 2014-12-17 | 2014-12-17 | 用于执行自旋‑循环跳转的装置和方法 |
Country Status (7)
Country | Link |
---|---|
US (1) | US20170329609A1 (zh) |
EP (1) | EP3234765A1 (zh) |
JP (1) | JP2018503162A (zh) |
KR (1) | KR102321941B1 (zh) |
CN (1) | CN106922186A (zh) |
TW (1) | TWI617977B (zh) |
WO (1) | WO2016097782A1 (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
DE102016211386A1 (de) * | 2016-06-14 | 2017-12-14 | Robert Bosch Gmbh | Verfahren zum Betreiben einer Recheneinheit |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102968293A (zh) * | 2012-11-28 | 2013-03-13 | 中国人民解放军国防科学技术大学 | 基于指令队列的程序循环代码动态检测及执行方法 |
CN103207803A (zh) * | 2007-03-30 | 2013-07-17 | 英特尔公司 | 在虚拟机环境中检测自旋循环 |
CN103493023A (zh) * | 2011-04-26 | 2014-01-01 | 富士通株式会社 | 系统以及检测方法 |
US8806183B1 (en) * | 2006-02-01 | 2014-08-12 | Ixys Ch Gmbh | Blank bit and processor instructions employing the blank bit |
Family Cites Families (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2779032B2 (ja) * | 1990-01-23 | 1998-07-23 | 株式会社日立製作所 | 情報処理装置 |
JP3881763B2 (ja) * | 1998-02-09 | 2007-02-14 | 株式会社ルネサステクノロジ | データ処理装置 |
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 |
US10157061B2 (en) * | 2011-12-22 | 2018-12-18 | Intel Corporation | Instructions for storing in general purpose registers one of two scalar constants based on the contents of vector write masks |
WO2014105010A1 (en) * | 2012-12-26 | 2014-07-03 | Intel Corporation | Thread migration support for architectually different cores |
US20140281418A1 (en) * | 2013-03-14 | 2014-09-18 | Shihjong J. Kuo | Multiple Data Element-To-Multiple Data Element Comparison Processors, Methods, Systems, and Instructions |
-
2014
- 2014-12-17 JP JP2017526548A patent/JP2018503162A/ja not_active Ceased
- 2014-12-17 KR KR1020177013359A patent/KR102321941B1/ko active IP Right Grant
- 2014-12-17 US US15/528,079 patent/US20170329609A1/en not_active Abandoned
- 2014-12-17 EP EP14833595.3A patent/EP3234765A1/en not_active Withdrawn
- 2014-12-17 CN CN201480083502.3A patent/CN106922186A/zh active Pending
- 2014-12-17 WO PCT/IB2014/002984 patent/WO2016097782A1/en active Application Filing
-
2015
- 2015-11-17 TW TW104137895A patent/TWI617977B/zh not_active IP Right Cessation
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8806183B1 (en) * | 2006-02-01 | 2014-08-12 | Ixys Ch Gmbh | Blank bit and processor instructions employing the blank bit |
CN103207803A (zh) * | 2007-03-30 | 2013-07-17 | 英特尔公司 | 在虚拟机环境中检测自旋循环 |
CN103493023A (zh) * | 2011-04-26 | 2014-01-01 | 富士通株式会社 | 系统以及检测方法 |
CN102968293A (zh) * | 2012-11-28 | 2013-03-13 | 中国人民解放军国防科学技术大学 | 基于指令队列的程序循环代码动态检测及执行方法 |
Non-Patent Citations (2)
Title |
---|
INTEL CORPORATION: "Intel® 64 and IA-32 Architectures Software Developer’s Manual Volume 2A", 《HTTP://WWW.NAIC.EDU/~PHIL/SOFTWARE/INTEL/253666.PDF》 * |
INTEL CORPORATION: "Intel® 64 and IA-32 Architectures Software Developer’s Manual Volume 2B", 《HTTP://WWW.NAIC.EDU/~PHIL/SOFTWARE/INTEL/253667.PDF》 * |
Also Published As
Publication number | Publication date |
---|---|
WO2016097782A1 (en) | 2016-06-23 |
TWI617977B (zh) | 2018-03-11 |
TW201643692A (zh) | 2016-12-16 |
US20170329609A1 (en) | 2017-11-16 |
KR102321941B1 (ko) | 2021-11-05 |
JP2018503162A (ja) | 2018-02-01 |
KR20170094147A (ko) | 2017-08-17 |
EP3234765A1 (en) | 2017-10-25 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10223114B1 (en) | Fixed point to floating point conversion | |
CN109614076A (zh) | 浮点到定点转换 | |
CN104011649B (zh) | 用于在simd/向量执行中传播有条件估算值的装置和方法 | |
CN107003844A (zh) | 用于矢量广播和xorand逻辑指令的装置和方法 | |
CN109791488A (zh) | 用于执行用于复数的融合乘-加指令的系统和方法 | |
CN104011652B (zh) | 打包选择处理器、方法、系统和指令 | |
CN106293640A (zh) | 用于紧密耦合的异构计算的硬件处理器和方法 | |
CN107003843A (zh) | 用于对向量元素集合执行约减操作的方法和设备 | |
CN104011671B (zh) | 用于执行置换操作的设备和方法 | |
KR102462174B1 (ko) | 벡터 비트 셔플을 수행하기 위한 방법 및 장치 | |
CN109840068A (zh) | 用于复数乘法的装置和方法 | |
CN107003846A (zh) | 用于向量索引加载和存储的方法和装置 | |
CN108292224A (zh) | 用于聚合收集和跨步的系统、设备和方法 | |
CN107077321A (zh) | 用于执行融合的单个周期递增‑比较‑跳转的指令和逻辑 | |
CN104350461B (zh) | 具有不同的读和写掩码的多元素指令 | |
CN110321159A (zh) | 用于实现链式区块操作的系统和方法 | |
CN107077330A (zh) | 用于执行矢量位反转和交叉的方法和装置 | |
CN107003986A (zh) | 用于利用索引和立即数实行向量重组的方法和装置 | |
CN107003845A (zh) | 用于在掩码寄存器和向量寄存器之间可变地扩展的方法和装置 | |
CN107077331A (zh) | 用于执行矢量位反转的方法和装置 | |
CN107003849A (zh) | 用于执行冲突检测的方法和装置 | |
CN107003840A (zh) | 用于执行检查以优化指令流的装置和方法 | |
CN108292228A (zh) | 用于基于通道的步进收集的系统、设备和方法 | |
CN108268279B (zh) | 用于广播算术操作的系统、装置和方法 | |
CN107077332A (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 | ||
AD01 | Patent right deemed abandoned |
Effective date of abandoning: 20211001 |
|
AD01 | Patent right deemed abandoned |