CN112148368A - 用于修改与卸载的指令关联的地址、数据或程序代码的设备和方法 - Google Patents
用于修改与卸载的指令关联的地址、数据或程序代码的设备和方法 Download PDFInfo
- Publication number
- CN112148368A CN112148368A CN202010218226.4A CN202010218226A CN112148368A CN 112148368 A CN112148368 A CN 112148368A CN 202010218226 A CN202010218226 A CN 202010218226A CN 112148368 A CN112148368 A CN 112148368A
- Authority
- CN
- China
- Prior art keywords
- core
- instruction
- offload
- cores
- work
- 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
Images
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/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/30003—Arrangements for executing specific machine instructions
- G06F9/3005—Arrangements for executing specific machine instructions to perform operations for flow control
-
- 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/30069—Instruction skipping instructions, e.g. SKIP
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/38—Information transfer, e.g. on bus
- G06F13/40—Bus structure
- G06F13/4004—Coupling between buses
- G06F13/4027—Coupling between buses using bus bridges
-
- 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/30025—Format conversion instructions, e.g. Floating-Point to Integer, decimal conversion
-
- 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
-
- 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/3017—Runtime instruction translation, e.g. macros
-
- 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/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5027—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/50—Indexing scheme relating to G06F9/50
- G06F2209/509—Offload
Abstract
用于修改与卸载的指令关联的地址、数据或程序代码的设备和方法。处理器的一个实施例包括:多个核;耦合该多个核的互连;以及卸载电路,所述卸载电路用来在没有操作系统(OS)干预的情况下将工作从该多个核中的第一核转移到该多个核中的第二核,该工作包括多个指令;第二核包括转译器,所述转译器用来将与该多个指令中的第一指令关联的信息从在第一核上可使用的第一格式转译成在第二核上可使用的第二格式;第二核的获取、解码和执行电路用来获取、解码和/或执行使用第二格式的第一指令。
Description
技术领域
本发明一般涉及计算机处理器和软件的领域。更特别地,本发明涉及用于在包括同构处理单元和异构处理单元的处理单元之间卸载工作的方法和设备。
背景技术
有时核或其它类型的处理元件不是完全计算受限的(compute-constrained)或存储器受限的(memory-constrained)。也就是说,核或处理元件具有能够处理额外的工作的可用处理资源。在这些情况中,处理周期经常被浪费。另外,在一些实例中,通过第一类型的处理元件(例如,CPU核)而不是第二类型的处理元件(例如,GPU计算引擎)来完成工作可以是更具功率效率的。
附图说明
结合以下附图从以下详细描述中能够获得本发明的更好理解,附图中:
图1A和1B是图示了根据本发明的实施例的通用向量友好指令格式及其指令模板的框图;
图2A-C是图示了根据本发明的实施例的示例性VEX指令格式的框图;
图3是根据本发明的一个实施例的寄存器架构的框图;以及
图4A是图示了根据本发明的实施例的示例性有序获取(fetch)、解码、引退(retire)流水线以及示例性寄存器重命名、乱序发布(issue)/执行流水线两者的框图;
图4B是图示了根据本发明的实施例的要被包括在处理器中的示例性寄存器重命名、乱序发布/执行架构核以及有序获取、解码、引退核的示例性实施例两者的框图;
图5A是单个处理器核连同它到管芯上互连网络的连接的框图;
图5B图示了根据本发明的实施例的图5A中的处理器核的一部分的扩展视图;
图6是根据本发明的实施例的带有集成存储器控制器和图形元件(graphics)的多核处理器以及单核处理器的框图;
图7图示了根据本发明的一个实施例的系统的框图;
图8图示了根据本发明的实施例的第二系统的框图;
图9图示了根据本发明的实施例的第三系统的框图;
图10图示了根据本发明的实施例的芯片上系统(SoC)的框图;
图11图示了根据本发明的实施例对照使用软件指令转换器来将源指令集中的二进制指令转换成目标指令集中的二进制指令的框图;
图12A-D图示了卸载指令的不同实现;
图13图示了本发明的实施例的可在其上被实现的示例处理器架构;
图14A图示了用于插入提示的架构的一个实施例;
图14B图示了用于确定是否和在何处插入卸载提示的方法的一个实施例;
图15A图示了用于实现探听指令(snoop instruction)的方法的一个实施例;
图15B图示了用于实现通告指令(advertisement instruction)的方法的一个实施例;
图16图示了用于实现开始卸载指令的方法的一个实施例;
图17图示了用于处置故障状态的本发明的一个实施例;
图18图示了在本发明的一个实施例中用于处置故障状态的方法;
图19图示了用于将卸载通知工作操作系统的设备的一个实施例;
图20图示了根据本发明的一个实施例的用于通知操作系统的方法;
图21图示了在其中修改程序代码或地址的某些部分的一个实施例;
图22图示了用于修改指令、地址或上下文数据的方法;
图23图示了用于保存和恢复状态的设备的一个实施例;以及
图24图示了根据本发明的一个实施例的用于保存状态的方法。
具体实施方式
在以下描述中,出于解释的目的,阐述众多具体细节以便提供对下面所描述的本发明的实施例的透彻理解。然而,本领域的技术人员将明白,可以在没有这些具体细节中的一些具体细节的情况下实践本发明的实施例。在其它实例中,以框图形式示出公知的结构和装置,以避免混淆本发明的实施例的根本原理。
示例性处理器架构、指令格式和数据类型
指令集包括一个或多个指令格式。给定指令格式定义各种字段(位的数量、位的位置)以除了其它事物之外还指定要执行的操作(操作码)和将对其执行该操作的(一个或多个)操作数。一些指令格式通过定义指令模板(或子格式)被进一步分解。例如,给定指令格式的指令模板可被定义成具有指令格式的字段的不同子集(所包括的字段通常是按相同顺序的,但由于有更少字段被包括,至少一些字段具有不同的位的位置),和/或被定义成具有不同地解释的给定字段。因此,ISA的每个指令使用给定指令格式(并且如果已定义,则以该指令格式的指令模板中的给定的一个指令模板)来被表述,并且包括用于指定操作和操作数的字段。例如,示例性ADD指令具有特定操作码和指令格式,所述指令格式包括用来指定该操作码的操作码字段和用来选择操作数(源1/目的地和源2)的操作数字段;并且指令流中此ADD指令的出现将在选择特定操作数的操作数字段中具有特定内容。
可以以不同格式体现本文中所描述的(一个或多个)指令的实施例。另外,下面详细描述了示例性系统、架构和流水线。(一个或多个)指令的实施例可在此类系统、架构和流水线上被执行,但不被限于所详细描述的那些。
通用向量友好指令格式
向量友好指令格式是适合用于向量指令的指令格式(例如,存在特定于向量操作的某些字段)。尽管描述了在其中通过向量友好指令格式支持向量和标量操作两者的实施例,但备选实施例仅使用向量友好指令格式的向量操作。
图1A-1B是图示了根据本发明的实施例的通用向量友好指令格式及其指令模板的框图。图1A是图示了根据本发明的实施例的通用向量友好指令格式及其类别A指令模板的框图;而图1B是图示了根据本发明的实施例的通用向量友好指令格式及其类别B指令模板的框图。具体地,对于通用向量友好指令格式100,定义了类别A和类别B指令模板,类别A和类别B指令模板两者包括无存储器访问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指令模板内示出有存储器访问、暂时性(temporal)125指令模板和存储器访问、非暂时性130指令模板。图1B中的类别B指令模板包括:1)在无存储器访问105指令模板内示出有无存储器访问、写掩码(write mask)控制、部分舍入控制类型操作112指令模板和无存储器访问、写掩码控制、vsize类型操作117指令模板;以及2)在存储器访问120指令模板内示出有存储器访问、写掩码控制127指令模板。
通用向量友好指令格式100包括图1A-1B中所图示的下面按顺序列出的以下字段。
格式字段140 - 此字段中的特定值(指令格式标识符值)唯一地标识向量友好指令格式,并且由此标识指令流中采用向量友好指令格式的指令的出现。因此,此字段在它对于仅具有通用向量友好指令格式的指令集不被需要的意义上是可选的。
基础操作字段142 - 它的内容区分不同的基础操作。
寄存器索引字段144 - 它的内容直接或者通过地址生成来指定源或目的地操作数的位置,它们在寄存器中或者在存储器中。这些包括用来从PxQ(例如,32x512、16x128、32x1024、64x1024)寄存器堆中选择N个寄存器的足够数量的位。尽管在一个实施例中N可以是多至三个源和一个目的地寄存器,但备选实施例可以支持更多或更少的源和目的地寄存器(例如,可以支持多至两个源,其中这些源之一也充当目的地;可以支持多至三个源,其中这些源之一还充当目的地;可以支持多至两个源和一个目的地)。
修饰符(modifier)字段146 - 它的内容区分指定存储器访问的采用通用向量指令格式的指令与不指定存储器访问的那些指令的出现;也就是说,在无存储器访问105指令模板与存储器访问120指令模板之间进行区分。存储器访问操作对存储器层级进行读取和/或写入(在使用寄存器中的值来指定源和/或目的地地址的一些情况中),而非存储器访问操作不进行(例如,源和/或目的地是寄存器)。尽管在一个实施例中,此字段还在用来执行存储器地址计算的三个不同方式之间进行选择,但备选实施例可以支持用来执行存储器地址计算的更多、更少或不同方式。
扩增(augmentation)操作字段150 - 它的内容区分除了基础操作外还要执行多种不同操作中的哪一个。此字段是上下文特定的。在本发明的一个实施例中,此字段被分成类别字段168、alpha字段152和beta字段154。扩增操作字段150允许操作的通用群组在单个指令而不是2、3或4个指令中被执行。
缩放(scale)字段160 - 它的内容允许索引字段的内容的缩放以用于存储器地址生成(例如,用于使用2缩放*索引+基础(2scale * index + base)的地址生成)。
位移(displacement)字段162A - 它的内容被用作存储器地址生成的一部分(例如,用于使用2缩放*索引+基础+位移(2scale * index + base + displacement)的地址生成)。
位移因子字段162B(注意,位移字段162A直接在位移因子字段162B之上的并置指示一个或另一个被使用) - 它的内容被用作地址生成的部分;它指定要通过存储器访问的大小(N)来缩放的位移因子 - 其中N是存储器访问中的字节的数量(例如,用于使用2缩放*索引+基础+经缩放的位移(2scale * index + base + scaled displacement)的地址生成)。冗余低顺序位被忽略,并且因此,位移因子字段的内容被乘以存储器操作数总大小(N)以便生成在计算有效地址时要被使用的最终位移。N的值由处理器硬件在运行时间基于完整操作码字段174(本文中稍后所描述的)和数据操纵字段154C来确定。位移字段162A和位移因子字段162B在它们不被用于无存储器访问105指令模板和/或不同实施例可以实现二者中的仅一个或不实现这二者的意义上是可选的。
数据元素宽度字段164 - 它的内容区分多个数据元素宽度中的哪一个要被使用(在一些实施例中,对于所有指令;在其它实施例中,对于指令的仅一些指令)。在如果仅一个数据元素宽度被支持和/或使用操作码的一些方面来支持数据元素宽度则不需要此字段的意义上,此字段是可选的。
写掩码字段170 - 它的内容在每数据元素位置的基础上控制目的地向量操作数中的该数据元素位置是否反映基础操作和扩增操作的结果。类别A指令模板支持合并写屏蔽(merging-writemasking),而类别B指令模板支持合并-写屏蔽和归零-写屏蔽(zeroing-writemasking)两者。在合并时,向量掩码允许目的地中的元素的任何集合被保护免于在任何操作(由基础操作和扩增操作所指定的)的执行期间更新;在另外一个实施例中,保存其中对应掩码位具有0的目的地的每个元素的旧值。相比之下,在归零时,向量掩码允许目的地中的元素的任何集合在任何操作(由基础操作和扩增操作所指定的)的执行期间被归零;在一个实施例中,在对应掩码位具有0值时,目的地的元素被设置成0。此功能性的子集是用来控制正被执行的操作的向量长度(也就是说,正被修改的元素的跨度,从第一个到最后一个)的能力;然而,被修改的元素不必是连续的。因此,写掩码字段170允许部分向量操作,包括加载、存储、算术、逻辑等。尽管描述了本发明的实施例,其中写掩码字段170的内容选择多个写掩码寄存器中含有要被使用的写掩码的一个写掩码寄存器(并且因此写掩码字段170的内容间接标识要被执行的屏蔽),但备选实施例替代地或另外允许掩码写字段170的内容直接指定要被执行的屏蔽。
立即数字段172 - 它的内容允许指定立即数。在此字段在不支持立即数的通用向量友好格式的实现中不存在和此字段在不使用立即数的指令中不存在的意义上,此字段是可选的。
类别字段168 - 它的内容在指令的不同类别之间进行区分。参考图1A-B,此字段的内容在类别A与类别B指令之间进行选择。在图1A-B中,圆角方形被用来指示特定值存在于字段中(例如,分别在图1A-B中对于类别字段168为类别A 168A和类别B 168B)。
类别A的指令模板
在类别A的非存储器访问105的指令模板的情况中,alpha字段152被解释为RS字段152A,其内容区分不同扩增操作类型中的哪一个要被执行(例如,对于无存储器访问、舍入类型操作110和无存储器访问、数据变换类型操作115指令模板分别指定舍入152A.1和数据变换152A.2),而beta字段154区分所指定类型的操作中的哪一个要被执行。在无存储器访问105指令模板中,缩放字段160、位移字段162A以及位移缩放字段162B不存在。
无存储器访问指令模板 - 完全舍入控制类型操作
在无存储器访问完全舍入控制类型操作110指令模板中,beta字段154被解释为舍入控制字段154A,其(一个或多个)内容提供静态舍入。尽管在本发明的所描述的实施例中,舍入控制字段154A包括抑制所有浮点异常(SAE)字段156和舍入操作控制字段158,但备选实施例可以支持、可以将这两个概念编码成相同字段,或仅具有这些概念/字段的一个或另一个(例如,可具有仅舍入操作控制字段158)。
SAE字段156 - 它的内容区分是否禁用异常事件报告;在SAE字段156的内容指示抑制被启用时,给定的指令不报告任何种类的浮点异常标志并且不引发任何浮点异常处置程序(handler)。
舍入操作控制字段158 - 它的内容区分要执行一组舍入操作中的哪一个(例如,上舍入、下舍入、向零舍入和向最近舍入)。因此,舍入操作控制字段158允许在每指令的基础上改变舍入模式。在本发明的一个实施例中,其中处理器包括用于指定舍入模式的控制寄存器,舍入操作控制字段150的内容覆盖(override)该寄存器值。
无存储器访问指令模板 - 数据变换类型操作
在无存储器访问数据变换类型操作115指令模板中,beta字段154被解释为数据变换字段154B,其内容区分要执行多个数据变换中的哪一个(例如,无数据变换、拌和(swizzle)、广播)。
在类别A的存储器访问120指令模板的情况中,alpha字段152被解释为驱逐提示字段152B,其内容区分要使用驱逐提示中的哪一个(在图1A中,对于存储器访问、暂时性125指令模板和存储器访问、非暂时性130指令模板分别指定了暂时性152B.1和非暂时性152B.2),而beta字段154被解释为数据操纵字段154C,其内容区分要执行多个数据操纵操作(也称为基元(primitive))中的哪一个(例如,无操纵;广播;源的上转换;以及目的地的下转换)。存储器访问120指令模板包括缩放字段160,并且可选地包括位移字段162A或位移缩放字段162B。
向量存储器指令利用转换支持来执行从存储器的向量加载和向存储器的向量存储。如同常规向量指令那样,向量存储器指令以逐数据元素的方式从/向存储器传递数据,其中实际被传递的元素由被选为写掩码的向量掩码的内容来指示。
存储器访问指令模板 - 暂时性
暂时性数据是可能将足够快地被重用以受益于高速缓存的数据。然而,这是提示,并且不同的处理器可以用不同的方式来实现它,包括完全忽略该提示。
存储器访问指令模板 - 非暂时性
非暂时性数据是不太可能被足够快地被重用以受益于在第1级高速缓存中进行高速缓存的数据并且应被给与驱逐优先权。然而,这是提示,并且不同的处理器可以用不同的方式来实现它,包括完全忽略该提示。
类别B的指令模板
在类别B的指令模板的情况中,alpha字段152被解释为写掩码控制(Z)字段152C,其内容区分由写掩码字段170控制的写屏蔽应是合并还是归零。
在类别B的非存储器访问105指令模板的情况中,beta字段154的部分被解释为RL字段157A,其内容区分要执行不同扩增操作类型中的哪一个(例如,对于无存储器访问、写掩码控制、部分舍入控制类型操作112指令模板和无存储器访问、写掩码控制、VSIZE类型操作117指令模板分别指定舍入157A.1和向量长度(VSIZE)157A.2),而beta字段154的剩余部分区分要执行所指定类型的操作中的哪个。在无存储器访问105指令模板中,缩放字段160、位移字段162A以及位移缩放字段162B不存在。
在无存储器访问、写掩码控制、部分舍入控制类型操作110指令模板中,beta字段154的剩余部分被解释为舍入操作字段159A,并且异常事件报告被禁用(给定指令不报告任何种类的浮点异常标志并且不引发任何浮点异常处置程序)。
舍入操作控制字段159A - 正如舍入操作控制字段158,它的内容区分要执行一组舍入操作中的哪一个(例如,上舍入、下舍入、向零舍入和向最近舍入)。因此,舍入操作控制字段159A允许在每指令的基础上的改变舍入模式。在本发明的一个实施例中,其中处理器包括用于指定舍入模式的控制寄存器,舍入操作控制字段150的内容覆盖该寄存器值。
在无存储器访问、写掩码控制、VSIZE类型操作117指令模板中,beta字段154的剩余部分被解释为向量长度字段159B,其内容区分要对多个数据向量长度中的哪一个(例如,128、256或512字节)执行。
在类别B的存储器访问120指令模板的情况中,beta字段154的部分被解释为广播字段157B,其内容区分是否要执行广播类型数据操纵操作,而beta字段154的剩余部分被解释为向量长度字段159B。存储器访问120指令模板包括缩放字段160,并且可选地包括位移字段162A或位移缩放字段162B。
关于通用向量友好指令格式100,示出了完整操作码字段174,其包括格式字段140、基础操作字段142和数据元素宽度字段164。尽管示出一个实施例,其中完整操作码字段174包括所有这些字段的,但在并非支持所有这些字段的实施例中,完整操作码字段174包括少于所有这些字段。完整操作码字段174提供操作代码(操作码)。
扩增操作字段150、数据元素宽度字段164和写掩码字段170允许在通用向量友好指令格式中在每指令的基础上指定这些特征。
写掩码字段和数据元素宽度字段的组合创建类型化(typed)指令,因为它们允许基于不同的数据元素宽度来应用掩码。
在类别A和类别B内找到的各种指令模板在不同的情形中是有益的。在本发明的一些实施例中,不同处理器或者处理器内的不同核可以仅支持类别A、仅支持类别B、或者支持两个类别。例如,打算用于通用计算的高性能通用乱序核可以仅支持类别B,打算主要用于图形和/或科学(吞吐量)计算的核可以仅支持类别A,并且打算用于两者的核可以支持两个类别(当然,具有来自两个类别的模板和指令的某种混合、但不是来自两个类别的所有模板和指令的核在本发明的范围之内)。同样,单个处理器可以包括多个核,所有这些核支持相同类别或其中不同核支持不同类别。例如,在带有单独的图形核和通用核的处理器中,打算主要用于图形和/或科学计算的图形核之一可以仅支持类别A,而通用核中的一个或多个可以是仅支持类别B的、打算用于通用计算的、带有乱序执行和寄存器重命名的高性能通用核。不具有单独的图形核的另一个处理器可以包括支持类别A和类别B两者的一个或多个通用有序或乱序核。当然,在本发明的不同实施例中,来自一个类别的特征可还被实现于另一类别中。以高级语言编写的程序将被置于(例如,即时(just in time)编译或静态编译)多种不同可执行形式中,包括:1)仅具有由用于执行的目标处理器所支持的(一个或多个)类别的指令的形式;或2)具有使用所有类别的指令的不同组合来编写的备选例程并且具有控制流程代码的形式,所述控制流程代码基于由当前执行代码的处理器所支持的指令来选择要执行的例程。
VEX指令格式
VEX编码允许指令具有多于两个操作数,并且允许SIMD向量寄存器长于28位。VEX前缀的使用提供了三操作数(或更多)语法(syntax)。例如,先前的二操作数指令执行诸如A=A+B的操作,这覆写了源操作数。VEX前缀的使用使操作数能够执行非破坏性(nondestructive)操作,诸如A=B+C。
图2A图示了示例性AVX指令格式,包括VEX前缀202、实操作码字段230、Mod R/M字节240、SIB字节250、位移字段262及IMM8 272。图2B图示了来自图2A的哪些字段构成完整操作码字段274和基础操作字段241。图2C图示了来自图2A的哪些字段构成寄存器索引字段244。
VEX前缀(字节0-2)202以三字节形式被编码。第一字节是格式字段290(VEX字节0,位[7:0]),其含有显式C4字节值(用于区分C4指令格式的唯一值)。第二-第三字节(VEX字节1-2)包括提供特定能力的多个位字段。具体地,REX字段205(VEX字节1,位[7-5])由VEX.R位字段(VEX字节1,位[7]–R)、VEX.X位字段(VEX字节1,位[6]–X)和VEX.B位字段(VEX字节1,位[5]–B)组成。指令的其它字段对如本领域中已知的寄存器索引的较低的三个位(rrr、xxx和bbb)进行编码,使得可以通过添加VEX.R、VEX.X和VEX.B来形成Rrrr、Xxxx和Bbbb。操作码映射字段215(VEX字节1,位[4:0]–mmmmm)包括用来编码隐含的前导操作码字节的内容。W字段264(VEX字节2,位[7]–W)由记号VEX.W表示,并取决于指令提供不同的功能。VEX.vvvv 220(VEX字节2,位[6:3]-vvvv)的职能可以包括以下各项:1)VEX.vvvv编码以反转(1的补码(1scomplement))形式所指定的第一源寄存器操作数,并且对具有2个或多于2个源操作数的指令是有效的;2)VEX.vvvv编码以1的补码形式为某些向量移位指定的目的地寄存器操作数;或者3)VEX.vvvv不编码任何操作数,该字段被预留并且应含有1111b。如果VEX.L 268大小字段(VEX字节2,位[2]-L)=0,则它指示28位向量;如果VEX.L=1,则它指示256位向量。前缀编码字段225(VEX字节2,位[1:0]-pp)为基础操作字段241提供另外的位。
实操作码字段230(字节3)还被称为操作码字节。在此字段中指定操作码的部分。
MOD R/M字段240(字节4)包括MOD字段242(位[7-6])、Reg字段244(位[5-3])和R/M字段246(位[2-0])。Reg字段244的职能可以包括以下各项:对目的地寄存器操作数或源寄存器操作数(rrr或Rrrr)进行编码,或被对待为操作码扩展而并不被用于对任何指令操作数进行编码。R/M字段246的职能可以包括以下各项:对引用存储器地址的指令操作数进行编码,或对目的地寄存器操作数或源寄存器操作数进行编码。
缩放、索引、基础(SIB)- 缩放字段250(字节5)的内容包括SS252(位[7-6]),其被用于存储器地址生成。SIB.xxx 254(位[5-3])和SIB.bbb 256(位[2-0])的内容之前已关于寄存器索引Xxxx和Bbbb被提及。
位移字段262和立即数字段(IMM8)272含有数据。
示例性寄存器架构
图3是根据本发明的一个实施例的寄存器架构300的框图。在所图示的实施例中,存在512位宽的32个向量寄存器310;这些寄存器被引用为zmm0直到zmm31。较低的6个zmm寄存器的较低阶256位被叠加(overlay)在寄存器ymm0-15上。较低的6个zmm寄存器的较低阶128位(ymm寄存器的较低阶128位)被叠加在寄存器xmm0-15上。
通用寄存器325 - 在所图示的实施例中,存在十六个64-位通用寄存器,其连同现存的x86寻址模式被用于寻址存储器操作数。这些寄存器通过名称RAX、RBX、RCX、RDX、RBP、RSI、RDI、RSP和R8直到R15来被引用。
标量浮点栈寄存器堆(x87栈)345,在其上将MMX打包整数平寄存器堆350别名化(alias) - 在所图示的实施例中,x87栈是八元素栈,其用于使用x87指令集扩展来对32/64/80位浮点数据执行标量浮点操作的;而MMX寄存器用于对64位打包整数数据执行操作,以及用于为在MMX与XMM寄存器之间执行的一些操作保存操作数。
本发明的备选实施例可以使用更宽或更窄的寄存器。另外,本发明的备选实施例可使用更多、更少或不同的寄存器堆和寄存器。
示例性核架构、处理器和计算机架构
处理器核可以用不同方式、为不同目的并且在不同处理器中被实现。例如,此类核的实现可包括:1)打算用于通用计算的通用有序核;2)打算用于通用计算的高性能通用乱序核;3)打算主要用于图形和/或科学(吞吐量)计算的专用核。不同处理器的实现可以包括:1)包括打算用于通用计算的一个或多个通用有序核和/或打算用于通用计算的一个或多个通用乱序核的CPU;以及2)包括打算主要用于图形和/或科学(吞吐量)计算的一个或多个专用核的协处理器。此类不同处理器导致不同计算机系统架构,其可以包括:1)在与CPU分离的芯片上的协处理器;2)在与CPU相同的封装中分离的管芯上的协处理器;3)在与CPU相同的管芯上的协处理器(在该情况中,这样的协处理器有时被称为专用逻辑,诸如集成图形和/或科学(吞吐量)逻辑,或被称为专用核);以及4)芯片上系统,其可以在相同管芯上包括所描述的CPU(有时被称为(一个或多个)应用核或(一个或多个)应用处理器)、上面所描述的协处理器和另外的功能性。接下来描述示例性核架构,接着描述示例性处理器和计算机架构。本文中详细描述的是包括示例性核、处理器等的电路(单元)。
示例性核架构
图4A是图示了根据本发明的实施例的示例性有序流水线和示例性寄存器重命名、乱序发布/执行流水线两者的框图。图4B是图示了根据本发明的实施例的要被包括在处理器中的有序架构核的示例性实施例和示例性寄存器重命名、乱序发布/执行架构核两者的框图。图4A-4B中的实线框图示了有序流水线和有序核,而虚线框的可选添加图示了寄存器重命名、乱序发布/执行流水线和核。考虑到有序方面是乱序方面的子集,将描述乱序方面。
在图4A中,处理器流水线400包括获取级402、长度解码级404、解码级406、分配级408、重命名级410、调度(也称为分派或发布)级412、寄存器读取/存储器读取级414、执行级416、写回/存储器写入级418、异常处置级422和提交级424。
图4B示出处理器核490,其包括耦合到执行引擎单元450的前端单元430,并且所述执行引擎单元450和前端单元430两者被耦合到存储器单元470。核490可以是简化指令集计算(RISC)核、复杂指令集计算(CISC)核、超长指令字(VLIM)核、或者混合或备选核类型。作为又一个选项,核490可以是专用核,诸如例如网络或通信核、压缩引擎、协处理器核、通用计算图形处理单元(GPGPU)核、图形核等等。
前端单元430包括耦合到指令高速缓存单元434的分支预测单元432,该指令高速缓存单元434被耦合到指令转译后备缓冲器(TLB)436,该指令转译后备缓冲器(TLB)436被耦合到指令获取单元438,该指令获取单元被耦合到解码单元440。解码单元440(或解码器)可以解码指令,并生成作为输出的一个或多个微操作、微代码条目点、微指令、其它指令或其它控制信号,以上这些解码自原始指令,或以其它方式反映原始指令,或从原始指令导出。可以使用各种不同机制来实现解码单元440。适合的机制的示例包括但不仅限于查找表、硬件实现、可编程逻辑阵列(PLA)、微代码只读存储器(ROM)等。在一个实施例中,核490包括存储用于某些宏指令的微代码的微代码ROM或其它介质(例如,在解码单元440中或以别的方式在前端单元430内)。解码单元440被耦合到执行引擎单元450中的重命名/分配器单元452。
执行引擎单元450包括耦合到引退单元454和一组一个或多个调度器单元456的重命名/分配器单元452。(一个或多个)调度器单元456代表任何数量的不同调度器,包括预留站(reservations station)、中央指令窗等。(一个或多个)调度器单元456被耦合到(一个或多个)物理寄存器堆单元458。(一个或多个)物理寄存器堆单元458中的每个物理寄存器堆单元代表一个或多个物理寄存器堆,其中的不同的物理寄存器堆存储一个或多个不同数据类型,诸如标量整数、标量浮点、打包整数、打包浮点、向量整数、向量浮点、状态(例如,作为要被执行的下一指令的地址的指令指针)等。在一个实施例中,(一个或多个)物理寄存器堆单元458包括向量寄存器单元和标量寄存器单元。这些寄存器单元可提供架构向量寄存器、向量掩码寄存器和通用寄存器。(一个或多个)物理寄存器堆单元458被引退单元454重叠,以图示可以以其实现寄存器重命名和乱序执行的各种方式(例如,使用(一个或多个)重排序缓冲器和(一个或多个)引退寄存器堆;使用(一个或多个)未来堆、(一个或多个)历史缓冲器和(一个或多个)引退寄存器堆;使用寄存器映射和寄存器池;等等)。引退单元454和(一个或多个)物理寄存器堆单元458被耦合到(一个或多个)执行集群460。(一个或多个)执行集群460包括一组一个或多个执行单元462和一组一个或多个存储器访问单元464。执行单元462可以执行各种操作(例如,移位、加法、减法、乘法)以及对各种类型的数据(例如,标量浮点、打包整数、打包浮点、向量整数、向量浮点)执行。虽然一些实施例可以包括专用于特定功能或功能集合的多个执行单元,但其它实施例可以包括仅一个执行单元或全部执行所有功能的多个执行单元。(一个或多个)调度器单元456、(一个或多个)物理寄存器堆单元458和(一个或多个)执行集群460被示为可能是复数的,因为某些实施例为某些类型的数据/操作创建单独的流水线(例如,标量整数流水线、标量浮点/打包整数/打包浮点/向量整数/向量浮点流水线和/或存储器访问流水线,其各自具有它们自己的调度器单元、(一个或多个)物理寄存器堆单元和/或执行集群——并且在单独的存储器访问流水线的情况中,实现某些实施例,其中仅此流水线的执行集群具有(一个或多个)存储器访问单元464)。还应理解的是,在单独的流水线被使用的情况中,这些流水线中的一个或多个可以是乱序发布/执行并且剩余的是有序的。
存储器访问单元464的集合被耦合到存储器单元470,所述存储器单元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 Technologies的MIPS指令集、加利福尼亚州森尼韦尔的ARM Holdings的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高速缓存被划分成单独的本地子集,每处理器核一个。每个处理器核具有到它自己的L2高速缓存的本地子集504的直接访问路径。由处理器核读取的数据被存储在它的L2高速缓存子集504中并能够被快速地访问,这并行于其它处理器核访问它们自己的本地L2高速缓存子集。由处理器核所写的数据被存储在它自己的L2高速缓存子集504中并且如果必要则从其它子集中清除该数据。环形网络确保共享数据的一致性。环形网络是双向的,以允许诸如处理器核、L2高速缓存和其它逻辑块之类的代理在芯片内与彼此通信。在一些实施例中,每个环形数据路径每个方向是1024位宽。
图5B是根据本发明的实施例的图5A中处理器核的部分的扩展视图。图5B包括L1高速缓存504的L1数据高速缓存506A部分以及关于向量单元510和向量寄存器514的更多细节。具体地,向量单元510是6宽向量处理单元(VPU)(参见16宽ALU 528),其执行整数、单精度浮点、双精度浮点指令中的一个或多个。VPU支持利用拌和单元520来拌和寄存器输入,利用数值转换单元522A-B的数值转换,以及利用复制单元524的对存储器输入的复制。
带有集成存储器控制器和图形元件的处理器
图6是根据本发明的实施例的可以具有多于一个核、可以具有集成存储器控制器并且可以具有集成图形元件的处理器600的框图。图6中的实线框图示了带有单个核602A、系统代理610、一组一个或多个总线控制器单元616的处理器600,而虚线框的可选添加图示了带有多个核602A-N、系统代理单元610中的一组一个或多个集成存储器控制器单元614及专用逻辑608的备选处理器600。
因而,处理器600的不同实现方式可以包括:1)具有专用逻辑608和核602A-N的CPU,所述专用逻辑608是集成的图形和/或科学(吞吐量)逻辑(其可以包括一个或多个核),所述核602A-N是一个或多个通用核(例如,通用有序核、通用无序核、二者的组合);2)具有核602A-N的协处理器,所述核602A-N是大量打算主要用于图形和/或科学(吞吐量)的专用核;以及3)具有核602A-N的协处理器,所述核602A-N是大量通用有序核。因而,处理器600可以是通用处理器、协处理器或专用处理器,诸如例如网络或通信处理器、压缩引擎、图形处理器、GPGPU(通用图形处理单元)、高吞吐量集成众核(MIC)协处理器(包括30个或多于30个核)、嵌入式处理器等等。处理器可以实现在一个或多个芯片上。处理器600可以是一个或多个衬底的一部分和/或可以使用多种工艺技术(诸如例如BiCMOS、CMOS、或NMOS)中的任何工艺技术来被实现在一个或多个衬底上。
存储器层级包括在核604A-N内的一个或多个级别的高速缓存、一组或者一个或多个共享高速缓存单元606和耦合到一组一个或多个集成存储器控制器单元614的外部存储器(未示出)。一组共享高速缓存单元606可以包括一个或多个中级高速缓存(诸如2级(L2)、3级(L3)、4级(L4)或其它级别的高速缓存)、末级高速缓存(LLC)和/或其组合。尽管在一个实施例中,基于环的互连单元612将集成图形逻辑608、一组共享高速缓存单元606和系统代理单元610/(一个或多个)集成存储器控制器单元614互连,但备选实施例可以使用用于将此类单元互连的任何数量的公知的技术。在一个实施例中,在一个或多个高速缓存单元606与核602A-N之间维持一致性。
在一些实施例中,核602A-N中的一个或多个核能够进行多线程。系统代理610包括协调和操作核602A-N的那些组件。系统代理610可以包括功率控制单元(PCU)和显示单元。PCU可以是或包括对于调节核602A-N和集成图形逻辑608的功率状态所需要的逻辑和组件。显示单元用于驱动一个或多个外部连接的显示器。
核602A-N可以在架构指令集方面是同构或异构的;也就是说,核602A-N中的两个或多于两个核可以能够执行相同指令集,而其它核可以能够执行该指令集的仅子集或不同指令集
示例性计算机架构
图7-10是示例性计算机架构的框图。本领域中已知用于膝上型电脑、台式电脑、手持式PC、个人数字助理、工程工作站、服务器、网络装置、网络集线器、交换机、嵌入式处理器、数字信号处理器(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。
附加处理器715的可选性质在图7中用断线来指代。每个处理器710、715可以包括本文中所描述的处理核中的一个或多个,并且可以是处理器600的某个版本。
存储器740可以是例如动态随机存取存储器(DARAM)、相变存储器(PCM)或所述两者的组合。对于至少一个实施例,控制器集线器720经由诸如前侧总线(FSB)的多点分支总线(multi-drop bus)、点对点接口或类似连接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。使用P-P接口电路878和888,处理器870、880可以经由点对点(P-P)接口850交换信息。如图8中所示出的,IMC 872和882将处理器耦合到相应存储器(即,存储器832和存储器834),这些存储器可以是本地附连到相应处理器的主存储器的部分。
处理器870、880可以各自使用点对点接口电路876、894、886、898经由各个P-P接口852、854与芯片集890交换信息。芯片集890可以可选地经由高性能接口892与协处理器838交换信息。在一个实施例中,协处理器838是专用处理器,诸如例如高吞吐量MIC处理器、网络或通信处理器、压缩引擎、图形处理器、GPGPU、嵌入式处理器等等。
共享高速缓存(未示出)可以被包括在任一处理器中或在两个处理器之外,还经由P-P互连与处理器连接,使得如果处理器被置于低功率模式中,则任一或两个处理器的本地高速缓存信息可被存储在共享高速缓存中。
芯片集890可以经由接口896被耦合到第一总线816。在一个实施例中,第一总线816可以是外围组件互连(PCI)总线,或诸如PCI快速总线或另一I/O互连总线的总线,尽管本发明的范围未被如此限制。
如图8中所示出的,各种I/O装置814可以连同总线桥818被耦合到第一总线816,所述总线桥818将第一总线816耦合到第二总线820。在一个实施例中,一个或多个附加处理器815(诸如协处理器、高吞吐量MIC处理器、GPGPU、加速器(诸如,例如图形加速器和数字信号处理(DSP)单元)、现场可编程门阵列或任何其它处理器)被耦合到第一总线816。在一个实施例中,第二总线820可以是低引脚计数(LPC)总线。各种装置可以被耦合到第二总线820,包括例如键盘和/或鼠标822、通信装置827和诸如盘驱动器或其它大容量存储装置的存储单元828,所述存储单元828在一个实施例中可包括指令/代码和数据830,。此外,音频I/O824可以被耦合到第二总线816。注意,其它架构是可能的。例如,替代图8的点对点架构,系统可以实现多点分支总线或其它此类架构。
现在参考图9,所示出的是根据本发明的实施例的第二更特定的示例性系统900的框图。图8和9中相似的元件标有相似参考标号,并且图8的某些方面已从图9中省略以便避免混淆图9的其它方面。
图9图示了处理器870、880可以分别包括集成存储器和I/O控制逻辑(“CL”)972和982。因此,CL 972、982包括集成存储器控制器单元并且包括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,其包括一组一个或多个核102A-N、高速缓存单元604A-N和(一个或多个)共享高速缓存单元606;系统代理单元610;(一个或多个)总线控制器单元616;(一个或多个)集成存储器控制器单元614;一组或者一个或多个协处理器1020,其可包括集成图形逻辑、图像处理器、音频处理器和视频处理器;静态随机存取存储器(SRAM)单元1030;直接存储器存取(DMA)单元1032;以及用于耦合到一个或多个外部显示器的显示单元1040。在一个实施例中,(一个或多个)协处理器1020包括专用处理器,诸如例如网络或通信处理器、压缩引擎、GPGPU、高吞吐量MIC处理器、嵌入式处理器等等。
可以用硬件、软件、固件或此类实现途径的组合来实现本文中所公开的机制的实施例。本发明的实施例可以被实现为在可编程系统上执行的计算机程序或程序代码,所述可编程系统包括至少一个处理器、存储系统(包括易失性和非易失性存储器和/或存储元件)、至少一个输入装置和至少一个输出装置。
诸如图8中所图示的代码830的程序代码可以被应用于输入指令以执行本文中所描述的功能并且生成输出信息。输出信息可以用已知方式被应用于一个或多个输出装置。为了此应用的目的,处理系统包括具有处理器的任何系统,所述处理器诸如例如数字信号处理器(DSP)、微控制器、专用集成电路(ASIC)或微处理器。
可以用高级过程编程语言或面向对象的编程语言来实现程序代码以与处理系统进行通信。如果期望的话,还可以用汇编或机器语言来实现程序代码。事实上,本文中所描述的机制在范围上不被限于任何特定编程语言。在任何情况中,语言可以是经编译或解释的语言。
至少一个实施例的一个或多个方面可以由存储在机器可读介质上的代表性指令来实现,所述代表性指令表示处理器内的各种逻辑,其在由机器读取时,促使机器制作用来执行本文中所描述的技术的逻辑。此类表示(称为“IP核”)可以被存储在有形的、机器可读介质上,并被供应到各种客户或制造设施以加载到实际做出逻辑或处理器的制作机器。
此类机器可读存储介质可以没有限制地包括由机器或装置制造或形成的物品的非暂态、有形布置,包括存储介质,诸如硬盘、任何其它类型的盘(包括软盘、光盘、紧致盘只读存储器(CD-ROM)、可重写紧致盘(CD-RW)和磁光盘))、半导体装置(诸如只读存储器(ROM)、诸如动态随机存取存储器(DRAM)、静态随机存取存储器(SRAM)的随机存取存储器(RAM)、可擦除可编程只读存储器(EPROM)、闪速存储器、电可擦除可编程只读存储器(EEPROM)、相变存储器(PCM))、磁卡或光卡、或适合于存储电子指令的任何其它类型的介质。
因此,本发明的实施例还包括非暂态、有形机器可读介质,该非暂态、有形机器可读介质含有指令或含有设计数据,诸如硬件描述语言(HDL),其定义本文中所描述的结构、电路、设备、处理器和/或系统特征。此类实施例可还被称为程序产品。
仿真(包括二进制转译、代码变形(code morphing)等)
在一些情况中,指令转换器可以用于将指令从源指令集转换到目标指令集。例如,指令转换器可以将指令转译(例如,使用静态二进制转译、包括动态编译的动态二进制转译)、变形、仿真或以其他方式转换成一个或多个其他指令来由核处理。可以用软件、硬件、固件或其组合来实现指令转换器。指令转换器可以在处理器上、离开处理器、或部分在处理器上并且部分离开处理器。
图11是根据本发明的实施例对照使用软件指令转换器来将源指令集中的二进制指令转换成目标指令集中的二进制指令的框图。在所图示的实施例中,指令转换器是软件指令转换器,尽管备选地,可以用软件、固件、硬件或其各种组合来实现指令转换器。图11示出可使用第一编译器1104来编译采用高级语言1102的程序以生成第一二进制代码(例如,x86)1106,所述第一二进制代码1106可以由带有至少一个第一指令集核的处理器1116来本机执行。在一些实施例中,带有至少一个第一指令集核的处理器1116表示能够通过以下操作来执行与带有至少一个x86指令集核的Intel处理器大体上相同的功能的任何处理器:兼容地执行或以其它方式处理(1)Intel x86指令集核的指令集的大部分或(2)目标为在带有至少一个x86指令集核的Intel处理器上运行的应用或其它软件的对象代码版本,以便实现与带有至少一个x86指令集核的Intel处理器大体上相同的结果。第一编译器1104表示可操作以生成第一指令集的二进制代码1106(例如,对象代码)的编译器,所述第一指令集的二进制代码1106能够在具有或不具有另外链接处理的情况下在带有至少一个第一指令集核的处理器1116上被执行。类似地,图11示出可以使用备选指令集编译器1108来编译采用高级语言1102的程序以生成备选指令集二进制代码1110,所述备选指令集二进制代码1110可由不带有至少一个第一指令集核的处理器1114(例如,带有执行加利福尼亚州森尼韦尔的MIPS Technologies的MIPS指令集和/或执行加利福尼亚州森尼韦尔的ARM Holdings的ARM指令集的核的处理器)来本机执行。指令转换器1112被用来将第一二进制代码1106转换成可由不带有第一指令集核的处理器1114本机执行的代码。这种经转换的代码不太可能与备选指令集二进制代码1110相同,因为能够这样做的指令转换器难以制造;然而,经转换的代码将完成一般操作并且由来自备选指令集的指令构成。因此,指令转换器1112表示软件、固件、硬件或其组合,其通过仿真、模拟或任何其它过程而允许不具有第一指令集处理器或核的处理器或其它电子装置执行第一二进制代码1106。
用于在处理单元之间高效地卸载工作的方法和设备
描述了用于一个或多个任务的核对核卸载的方法、设备、系统和非暂态计算机可读存储介质的各种实施例。特别地,曾要在第一核上执行的任务(例如,代码的某一适当子集,诸如循环的子部分、循环等)改为在作为助手核(helper core)的至少第二核上被执行(换而言之,被从第一核卸载到至少第二核)。该第二核执行任务并且使结果对于第一核是可用的,以便第一核在随后的处理中使用。
因为有时处理器核不是完全计算、存储器和/或输入/输出(I/O)受限的,在没有核对核卸载的情况下,可能存在被丢弃的该核的周期。在上面的情形中,第二核不是完全受限的,并且能处置额外的工作,并且第一核能够使用一些帮助以使工作(在时间和/或能量方面)更高效地完成。另外,一些方案在中央处理单元(CPU)核中的核陷入瓶颈时或者因为这是传统类型的卸载而将工作推出到图形处理单元(GPU)。这不太可能是具功率效率的,因为GPU倾向于使用甚至比完全负载的CPU显著更多的功率。
如在背景技术中所记述的,传统迁移涉及共享代码到诸如GPU的加速器或到异构核的卸载。在任一情况中,在该卸载中涉及操作系统。各个核不知道它们是否能处置来自其它核的工作并且依赖于操作系统(OS)。在卸载中涉及OS意味着任何卸载不得不解决来自OS的核准的低效率。
本文中详细描述的实施例提供用于此类卸载而不要求涉及操作系统的一种或多种机制。这样,核本身知道它们能够和不能够处置什么工作。通常,不将此卸载通知OS。然而,在一些实施例中,核可告知操作系统调度器在它正充当助手核时延缓调度新工作,OS不告知核它不能发送工作到另一个核。在不涉及OS的情况下,本文中所描述的核对核卸载更高效。
本发明的一个实施例包括带有用于将工作从第一处理元件卸载到第二处理元件以改进性能和/或功率使用的电路和/或逻辑的处理器。如本文中使用的,“处理元件”(PE)可以是能够独立处理指令的任何分立电路,包括但不限于CPU核、GPU核、数字信号处理(DSP)核以及诸如矩阵或张量处理单元的加速器。因此,尽管下面在CPU核的上下文中描述一些实施例,但本发明的基本原理不被限于此实现。
另外,尽管下面在同构核上描述某些实施例,但可利用异构核来实现本发明的基本原理。例如,异构核可以包括不同微架构(例如,“大”或高性能核和“小”或低性能核的组合)但可以被配置成处理相同指令集架构(ISA)。备选地,异构核可以支持不同指令集架构(ISA)。在此实现中,第一核可以卸载来自第一ISA的指令,并且第二核可以响应性地执行来自第二ISA的对应指令。这可以通过将来自第一ISA的指令映射到第二ISA的指令和/或通过执行二进制转译操作以将(一个或多个)指令(例如,由编译器静态地和/或在运行时间动态地)从第一ISA转译到第二ISA来完成。为简单起见,下面所描述的实施例中的核将被假设成支持相同ISA。
在先前系统中,共享代码的任何“卸载”是到诸如GPU的加速器或诸如在“大”/“小”布置中的另一个核。在这些系统中,在卸载过程中总是涉及操作系统(OS),导致与OS核准和协调关联的显著低效率。然而,这些现有系统不允许核在没有OS干预的情况下动态地传递和卸载工作以改进性能。
本发明的一个实施例包括用于对OS透明地管理卸载操作的新指令集合。这些包括但不限于用来生成核间探听消息以标识能够处置卸载的核的探听指令。如本文中使用的,请求卸载的核被称为“父(parent)”核,并且执行所卸载的操作的核被称为“助手”核。响应于由父核生成的探听消息,具有足够可用带宽的一个或多个助手核能够以肯定的确认消息作出响应。
另外,在一个实施例中,预期的助手核执行通告指令以经由核间通告消息向其它核通告它的当前可用性。这可以包括用来指示在该核上的当前负载的值(例如,百分比或其它数字)或者简单地包括该预期的助手核可用的指示。
一旦已由父核标识助手核以处置卸载操作,“开始卸载”指令便生成核间消息以促使助手核开始处理卸载操作。一旦卸载工作完成,助手核便可以执行“结束卸载”指令并且传送“卸载结束”消息以通知父核卸载操作完成。
在任何上述实现中,核可以使用系统存储器中的指定区来共享卸载操作的结果。例如,“开始卸载”指令和消息可以包括指向相关数据和程序代码所在的存储器中的区的指针。在该存储器区中存储的一个或多个工作描述符可以指定要由卸载操作完成的工作。类似地,一旦卸载操作完成,结束卸载指令和消息便可以包括父核可以使用来访问卸载的结果的指针。工作描述符可以使用任何适合的格式并且可以指定单个作业或可以含有指向作业的队列的指针。在后一情况中,工作描述符包括指向应用的地址空间中的作业请求队列的指针。
图12A-12D图示了带有父核1201B和两个预期的助手核1201A、1201C的特定示例。每个核1201A-C基于它的状态跟踪器(phase tracker)1207A-C来确定它是否能够接受卸载工作,所述状态跟踪器1207A-C提供关于该核当前是否已接受来自另一个核的工作的指示。性能监测电路1210A、1210C包括用来跟踪与指令执行有关的统计(诸如每时间周期执行/引退的指令的数量和高速缓存命中率)的计数器。在一个实施例中,性能监测电路1210A、1210C的计数器被读取以确定核1201A、1201C是否具有足够带宽来处置卸载请求。
在核正在运行时,它的性能监测电路1210A、1210C监测每个相应核的性能。核在给定时间点如何表现影响它是否能够充当助手核。例如,如果核正在连续地引退指令,则它可能是计算绑定的,并且不应被考虑用于计算密集型任务。类似地,如果核已经正在经历显著的高速缓存未命中(并且因此经历存储器访问),则添加存储器密集型任务将是不可行的。在一个实施例中,核间卸载电路1205A、1205C分别评估来自性能监测电路1210A、1210C的数据以作出它的确定。
每个核1201A-C的核间卸载电路1205A-C分别通过互连组构1206传送和接收本文中所描述的消息。核间卸载电路1205A-C可以与每个单独核1210A-C的执行电路关联或集成在每个单独核1210A-C的执行电路内,并且可以响应于本文中所描述的各种指令来生成消息。在一个实施例中,核间卸载电路1205A-C包括带有核间卸载状态和状态之间的转变的指定集合的有限状态机(FSM)。然而,本发明的基本原理不被限于FSM实现。
互连组构1206可以包括交叉开关(crossbar)、环形互连或任何其它高速、芯片上通信结构。在一个实施例中,互连组构1206包括由核使用的相同高速缓存一致性互连以确保高速缓存一致性(即在内部L1、L2高速缓存及共享L3、L4高速缓存之间)。
在图12A中所示出的示例中,核1201B执行包括在当前指令流1250中的探听请求指令。作为响应,核间卸载电路1205B将探听请求传送到核1201A、1201C。核间卸载电路1205A、1205C在接收到探听请求时,确定每个相应核1201A、1201C是否能够接受卸载工作。如果是,则相应核间卸载电路1205A、1205C将确认消息传送到核间卸载电路1205B以将核1201A、1201C是否能够执行卸载工作通知核1201B。
图12B图示了一个实施例,其中核间卸载电路1205A、1205C将通告消息主动传送到核间卸载电路1205B,将相应核1201A、1201C的可用性通知核1201B。在一个实施例中,响应于在核1201A、1201C的处理流水线内执行的通告指令而传送通告消息。通告消息可以包括布尔指示符(即,单个位),其将核1201A、1201C的可用性通知核1201B(例如,1 = 可用;0 =不可用)。备选地或另外,通告消息可以包括在指定范围内(例如,在0与3之间、在0与7之间等)的值,该值指示可用带宽的水平。例如,如果核1201A的50%的执行资源当前正在被使用,则在通告消息中传送的值可以反映此负载。
核1201B可以然后基于当前负载值来选择将工作卸载到核1201A、1201C之一。例如,它可以选择带有最小当前负载的核,或者它可以选择带有现有负载但带有足够带宽以处置卸载请求的核(即,使得处于非活跃或低功率状态中的核不需要被重新激活,由此节省功率)。
图12C图示了其中将卸载请求从核1201B的核间卸载电路1205B传送到核1201C的核间卸载电路的示例。在此示例中,核1201C传送确认消息以通知核1201B它正在接受工作并且还可以更新它的状态跟踪器1207C以示出它已接受此额外的工作。如所提及的,在一个实施例中,卸载请求包括指向共享存储器中的区的指针,核1201C能够从该共享存储器中的区开始获取指令并且处理数据(例如,根据存储在共享存储器区中的工作描述符)。
如在图12D中所指示的,在核1201C已完成卸载工作时,核间卸载电路1205C将卸载结束消息传送到核间卸载电路1205B以将工作完成通知核1201B。卸载结束消息可以包括指向结果的指针,或结果的位置可以是核1201B已知的(即,在卸载消息中被指定)。核1201C可以然后更新它的状态跟踪器1207C以指示它不再执行卸载工作。在一个实施例中,不允许卸载结束消息执行,直到能够确认卸载工作已开始(即,除非卸载在进行中,否则不应允许卸载结束)。
如所提及的,在所有以上实现中,核间卸载电路1205A-C可以被集成在每个相应核1201A-C的执行电路内,可响应于卸载指令的执行而操作。
在图13中,示出了核1201C的执行级1308内的卸载执行电路1308A,包括核间卸载电路1205A。类似地,示出了核1201B的执行级1328内的卸载执行电路1328A,包括核间卸载电路1205B。如所指示的,响应于由卸载电路1308A和1328A对卸载指令的执行,相应核间卸载电路1205A和1205B通过组构接口1206交换消息。
图13图示了一个实施例的另外的细节,包括带有共享3级高速缓存1380的集成存储器控制器(IMC)1330,所述集成存储器控制器(IMC)1330通过一致性组构1206而耦合到核1201A-C并且提供对系统存储器1360的访问。
在一个实施例中,核1201A-C中的每个包括用于执行指令流的同时、乱序(或有序)执行的指令流水线,所述指令流水线包括分别从系统存储器1360或L1指令高速缓存1310、1320获取指令的指令获取电路1317、1327。解码电路1338、1348解码指令并且执行电路1308、1328执行指令。如所图示的,解码电路1338和1348分别包括电路1338A和1348A以支持本文中所描述的新卸载指令(例如,以解析/转译本文中所描述的卸载指令操作码和操作数并且标识执行电路1308A、1328A内的执行资源的集合)。
其它所图示的组件包括用来存储当前指令指针地址的指令指针寄存器1312、1313,所述当前指令指针地址标识要获取、解码和执行的下一指令。可以从系统存储器1360和/或诸如L3高速缓存1380的一个或多个共享高速缓存级别获取或预获取指令。所图示的TLB 1311、1321存储之前从页表读取并由获取、解码和执行电路用来从系统存储器1360访问指令和数据的虚拟到物理地址转译。用于指令和数据的TLB到物理地址转译由解码电路1309和执行电路1308处理。
在一个实施例中,高速缓存管理器1303、1323对高速缓存行执行状态管理操作以实现处理器的高速缓存一致性协议。这些高速缓存一致性协议确保数据在系统存储器1360、L3高速缓存1380和核高速缓存1319、1329、1310、1320、1312、1322之间被维持在一致性状态中。例如,响应于读取/写入请求,高速缓存管理器1303、1323可以允许、不允许某些高速缓存行和/或使某些高速缓存行无效以确保一致的数据集合。
在此实施例中,每个卸载指令可以包括指定要被执行的操作的指令操作码以及指定要被用来执行操作码的值/寄存器的一个或多个操作数。例如,第一操作数可以指定操作是要被定向到特定助手核(例如,核ID 0、核ID 1等)还是被定向到所有助手核(例如,核ID$,其中$包括通配符值)。第二操作数(或相同操作数)可以标识父核(即,请求的源)。第三操作数(或相同操作数)可以指定指令指针,所述指令指针标识要被获取以执行卸载操作的下一指令,并且第三操作数可以指定用于访问数据和存储与指令有关的状态信息和/或结果的地址(或要从中访问状态信息的地址)。
在一个实施例中,上面提及的状态跟踪器1207A-C包括与正被执行的当前卸载操作有关的信息。例如,助手核的状态跟踪器可以包括一个或多个父核的身份(例如,核ID)并且父核的状态跟踪器可以包括一个或多个当前助手核的身份(即,当前帮助进行卸载的那些核的核ID)。另外,状态跟踪器1207A-C可以包括完成模式的指示,诸如将由卸载产生的数据保存在何处(例如,寄存器、存储器位置等)和/或将数据发送到何处(例如,在数据能够被直接传送到父核的情况中)。
关于核是否应请求或执行卸载的确定可以被静态地(例如,由编译器在运行时间前)或动态地(例如,基于指令流的动态评估)确定。在任一情况中,评估程序代码以确定其对并行化的顺应程度。例如,如果在指令流1250中的指令之间存在相当大数量的依赖性,则卸载工作可能不改进性能或者可能甚至降低性能。相比之下,如果指令流要求大量的独立操作(例如,诸如数据并行操作),则卸载将倾向于改进性能。
在一个实施例中,如本文中所描述的,在运行时间期间动态地指定卸载操作和/或经由由编译器插入的指令“提示”指定卸载操作。父核可以然后评估潜在地与其它变量(例如,在潜在助手核上的工作负载、潜在并行化的量等)组合的这些提示以作出卸载判定。
在一个实施例中,可以使用卸载操作来执行程序代码并且还可以在没有卸载操作的情况下执行程序代码,以确定对于给定线程、进程或应用是否允许卸载。例如,线程/应用追踪技术可被用来确定是否使用卸载(例如,通过测量不同代码块的执行时间)。如果卸载被使用,则可标识程序代码的特定部分以用于卸载(例如,没有显著依赖性的那些)。这可以例如通过将卸载探听指令、开始卸载指令和结束卸载指令插入到程序代码中(例如,插入到通过工作描述符标识的指令流1250和程序代码中)而被完成。在任何情况中,一旦卸载指令被插入到程序代码中,便在没有OS干预的情况下执行本文中所描述的卸载操作。
在一个实施例中,各种核1201A-C的控制寄存器被用来跟踪卸载的进度。例如,诸如MXCSR寄存器的控制寄存器可以被更新有针对每个循环迭代的值(例如,针对50次迭代的值50)并且在每个单独迭代被递减。当控制寄存器中的值达到0时,则卸载完成。“结束卸载”指令可以然后被执行以将结果提供给父核。
在这些实施例中的任何实施例中,可以在助手核侧动态地插入如本文中所描述的卸载指令(例如,以确保助手核在适当的时间生成结束卸载指令)。如所提及的,可以在运行时间期间动态地或由编译器静态地进行指令插入。
图14A图示了一个实施例,其中编译器或执行运行时间1401将指令“提示”插入程序代码1400中。特别地,使用在程序代码1400的先前执行期间收集的执行数据1406来执行卸载分析1405。如所提及的,卸载分析1405可以评估要并行执行的程序代码1400的能力(例如,基于指令和/或资源之间的依赖性)。
基于分析,执行提示插入1410以生成带有卸载提示1450的程序代码。父核1201B然后执行程序代码1450,基于提示如本文中所描述地将工作卸载到其它核1201C。
图14B中图示了根据本发明的一个实施例的用于插入卸载指令的方法。方法可以在上述架构的上下文内被实现,但不被限于任何特定系统架构。
在1401,针对并行化评估指令序列。例如,可以评估诸如数据依赖性和/或资源依赖性的指令依赖性以确定指令序列的部分能够被并行执行的程度。如果在1402确定指令序列不包括足够水平的并行化,则在1403,不将卸载指令插入到指令序列中,并且在1406,在父核(即,当前核)上执行未修改的指令序列。
假设检测到足够的潜在并行化,则在1404将本文中所描述的卸载指令中的一个或多个卸载指令选择性地插入到指令序列以将工作从父核卸载到一个或多个助手核。例如,根据检测到的指令依赖性,如果确定程序代码的特定区具有并行化潜力,则可以将程序代码的该区的部分卸载到助手核。在1405,执行包括插入的卸载指令的经修改的指令序列。因此,指令的至少一部分可以响应于如本文中所描述的开始卸载指令而被卸载。
图15A图示了用于执行探听操作的方法的一个实施例。在1501,在第一核上解码探听指令。如所提及的,探听指令可以包括标识一个或多个其它核的操作数。在1502,执行探听指令,并且在1503,将一个或多个探听请求从第一核响应性地传送到一个或多个其它核。具有可用带宽的那些核可以将指示它们能够处理卸载工作的响应传送回第一核。因此,在1504,第一核从至少第二核接收指示卸载操作可用(即,第二核能够处置额外的工作)的确认消息。在一个实施例中,第一核在1505解码并且执行卸载开始指令。
图15B图示了用于通告核的资源的可用性的方法。如所提及的,核可以将向其它核通告它的处置卸载工作的能力。这里所描述的通告技术可以与上述卸载探听操作被组合使用。例如,无论何时核具有可用处理资源,便可以在周期性或半周期性的基础上传送通告消息。同时,如果另一个核要求卸载工作,则它可以广播探听消息以主动确定其它核的可用性。因此,负载重的核可以倾向于传送探听请求消息,而负载更少的核可以倾向于传送通告消息。
在1551,在第一核上解码通告指令,并且在1552,执行通告指令。在一个实施例中,通告指令的执行促使第一核在传送通告消息前检查它的状态。例如,核的控制/状态寄存器可以指示核有多忙。因此,核可以响应于通告指令而读取这些寄存器以确定是否通告它的可用性。如果在1552确定考虑到当前核状态,卸载工作是可行的,则在1553,向一个或多个其它核广播通告消息。通告消息可以包括第一核通常有多忙和/或它在忙于处理的工作的特定类型(例如,存储器密集型操作、具有高的高速缓存命中率的独立并行操作等)的指示。在1554,响应于通告消息,第一核从第二核接收卸载请求。如果第一核接受工作,则它将确认消息传送到第二核。在1555,第一核开始获取、解码和执行与卸载的工作关联的指令。如所提及的,它可以开始从由第二核(即,在卸载请求中)指定的存储器位置获取指令。
图16图示了用于开始卸载操作的方法的一个实施例。在1601,在第一核上解码开始卸载指令。如所提及的,开始卸载指令可以(在1602)标识用来处理卸载的工作的一个或多个其它核(例如,第二核)和/或其它核能够使用以标识工作的指针或其它标识符(例如,指向存储器或高速缓存中的工作描述符或其它结构的地址指针)。在1603,将卸载消息与此信息一起传送到第二核。如果程序代码是高度并行的,则第一核可以经由另外的卸载消息将不同工作项传送到其它核。
在1604,第一核从第二核(以及潜在地从另外的核)接收确认,并且在1605,第二核(和另外的核)处理额外的工作以生成结果。一旦完成,第二核(和可选的另外的核)便将指示工作已被完成的结束卸载消息传送到第一核。如所提及的,在一个实施例中,结束卸载消息响应于结束卸载指令的执行而被传送,并且可以包括结果的位置的指示(例如,指向寄存器或存储器/高速缓存中的区的指针)。在1606,第一核响应性地访问结果。
本发明的一个实施例响应于故障状态而实现操作的指定序列,以确保故障或其它异常被适当地处置。在执行指令序列时,可遇到各种类型的故障状态和其它异常,包括(但不限于)一般保护故障、堆栈故障、页故障、精度异常、下溢异常、除以零异常、非规范化操作数异常及无效操作异常。处理器经常实现特定故障处置程序或异常处置程序以解决这些故障状态中的每个故障状态。尽管下面的讨论将特定地集中在故障状态上,但本发明的基本原理可适用于任何类型的异常状态。
图17图示了带有操作系统(OS)1707的示例实施例,所述操作系统(OS)1707执行一个或多个app/进程1727和调度器1723,所述调度器1723调度指令1250以便在核1201A-C上执行。在一个实现中,如果故障发生在助手核1201C上,而它正在执行卸载工作,则该助手核经由故障消息将控制提供回到父核1201B。在传送故障消息之前,助手核的故障管理电路1701可以将指示故障状态的原因(例如,页故障、堆栈故障等)的一个或多个故障代码写入到寄存器和/或存储器位置。助手核1201C的核间卸载电路1205C然后将故障消息与指向寄存器/存储器位置的指针一起传送到父核1201B。备选地,故障状态可以被存储在已知位置(例如,指定的故障寄存器)中,父核在接收到故障消息时自动读取该已知位置。在一个实施例中,在处理故障消息时,核间卸载电路1205B更新在父核1201B上的故障寄存器,父核将该故障寄存器用于故障处理(例如,通过执行故障处置程序)。
在一个实现中,父核1201B的故障管理电路1702评估故障状态,并且尝试解决故障或者将执行状态回滚到在故障状态之前的点。如果故障被解决(例如,经由故障处置程序),则父核1201B可以随后将新的卸载消息传送到助手核1201C以使用解决故障的数据(例如,正确的转译)来继续进行卸载的工作。在一些实例中,父核1201B可以指示助手核1201C来转储所执行的先前工作和/或可以在没有助手核的情况下完成工作。
在一个实现中,直接在助手核1201C上解决某些类型的故障(或所有故障)。例如,如果故障由缺乏可用信息而产生(例如,页转译故障),则助手核可以尝试确定该信息(例如,执行页遍历(page walk)以确定正确的虚拟到物理地址转译)。响应于故障的解决,助手核1201C继续处理卸载的工作。
在一个实施例中,执行故障处置程序1776以处置特定类型的故障。例如,不同故障处置程序1776可以被配置成管理每个不同的每种类型的故障。对于必须由父核1201B解决的故障,父核触发故障处置程序1776(例如,通过写入寄存器),而对于可以由助手核1201C处置的故障,助手核触发故障处置程序。在任一情况中,故障处置程序1776可以生成解决故障的结果(例如,执行页遍历以确定虚拟-物理地址转译),或者,如果故障无法被解决,则生成故障不可解决的指示。父核1201B(和/或助手核1201C)可以然后回滚到先前执行状态。
图18中图示了用于在核对核卸载环境中处置故障和其它异常的方法。在1801,在助手核上检测故障状态。如果在1802确定故障属于能够在本地被解决的类型,则在1803,助手核执行故障处置程序和/或访问故障电路/逻辑以解决故障状态。如果在1804被解决,则在1805核继续处理卸载工作。
如果故障不能被解决或不属于能在助手核上被解决的类型,则在1810,助手核将故障消息传送到父核。如所提及的,故障消息可以标识故障和关联的数据(例如,经由指向故障寄存器的指针或直接在消息的主体中)。在1811,父核执行故障处置程序和/或访问电路逻辑以解决故障。一旦被解决,父核便可以传送新的卸载消息以指示助手核继续。取决于故障,这可以要求助手核将执行回滚到在故障状态之前的点。
本文中所描述的实现的益处之一是不要求操作系统知道核对核卸载操作。从OS的角度而言,父核1201B处理如由OS调度器所调度的指令流1250,并且执行进度被维持并且仅从父核1201B报告给OS。
然而,在某些实施例中,可以为OS提供对本文中所描述的卸载操作的选择性可见性。图19图示了一实施例,其中由作为操作系统(OS)1901的组件运行的调度器1920来调度指令流1950。在图示的示例中,父核1201B如在先前实施例中一样在助手核1201C上启动卸载操作。然而,在此实现中,在助手核1201C上的OS通知器1940生成对OS 1901的通知1960以将其作为助手核的当前职能通知OS(即,它正在代表父核1201B处理程序代码)。可以用电路、软件、固件或其任何组合实现OS通知器。响应于通知1960,调度器1920可以使用此信息来避免在核1901C上调度新的指令流1951,直至它接收到在助手核1201C上的卸载处理完成的通知1960。
在其中OS 1901不知道卸载操作的实施例中,则助手核1201C可以拒绝来自调度器1920的处理新的指令流1951的请求。例如,助手核1201C可以设置控制寄存器以在接受由父核1201B作出的卸载请求时或在接收到卸载开始消息时指示它正忙或不可用。
助手核1201C可以还为OS 1901提供在接收卸载工作前它已完成的工作,以便OS能够适当地跟踪调度的指令流1951的当前执行状态。如果工作未完成,则OS可以将剩余工作迁移到另一个核,和/或助手核1201C可以执行回滚事项以将执行状态恢复到在卸载工作之前的点。如果循环的一部分完成,则它可以将剩余工作的指示连同要重新开始的总体循环的切片的指示发送回OS 1901。
在一个实施例中,助手核1201C可自己将工作卸载到另一助手核1201A,变成该另一助手核1201A的父核。在其中核1201A被配置成更高效地处理从核1201B卸载的工作但不能高效地处理由于核1201B进行的卸载而接受的工作的异构计算架构中,此实施例可以是特别有用的。在此实施例中,例如,核1201A可以是能够响应于单个指令或线程(例如,诸如在单指令多线程(SIMT)架构中)高效地执行大规模并行操作的图形处理器核或DSP核。在此类情况下,每个核1201A-C可以基于所要求的工作的类型来选择特定助手核(例如,将高度并行工作或顺序工作卸载到适于此类工作的那些核)。类似地,每个助手核1201A-C可以基于所请求的工作的类型来接受或拒绝工作(例如,仅接受它能够高效执行的工作)。当然,本发明的基本原理不被限于异构环境。
图20中图示了根据本发明的一个实施例的方法。方法可以在上述架构的上下文中被实现但不被限于任何特定架构。
在2001,助手核开始处理它已从父核接受的工作。在2002,助手核将忙通知提供给OS调度器。如所提及的,这可采用在寄存器中的位或位字段的形式来指示助手核的不可用性。当在2003确定卸载工作完成时,助手核生成卸载结束消息(例如,如之前所描述的),并且在2005,将“可用”通知提供给OS调度器。在一个实施例中,例如,更新该位或位字段以向OS指示该核不再忙。
本发明的一个实施例在指令被卸载到助手核时执行对地址、控制值和其它相关上下文信息的修改。例如,条件跳转指令(conditional jump instruction)将基于用于比较的一个或多个条件标志状态和值,跳转到在指定地址的指令序列。在将这些指令从父核移动到助手核时,跳转地址可改变。
这样,在一个实施例中,卸载开始指令包括地址偏移或指向地址偏移的指针,助手核然后使用该地址偏移或指向地址偏移的指针来执行条件跳转指令(例如,将偏移添加到原始跳转地址)。另外,必须将任何条件标志值和比较值提供给助手核。在一个实施例中,卸载开始指令包括状态/上下文操作数,所述状态/上下文操作数标识执行条件跳转指令所要求的上下文数据。例如,上下文数据可以被存储在存储器区中并且可以包括执行指令所需要的所有条件代码值和比较值。
图21图示了用于本发明的一个实施例的这些和其它细节。在核1201B执行指令流2150(或多个流)时,执行上下文或状态被连续更新。在一个实施例中,核1201B在将卸载开始消息传送到核1201C之前执行上下文保存操作以保存与要被卸载的工作相关的上下文数据2107。如所提及的,上下文可以包括存储在向量或标量寄存器中的数据、存储在控制寄存器中的标志数据和完成卸载工作的执行所需要的任何其它数据。
在图示的实施例中,卸载开始消息由工作者核(worker core)1201C的核间卸载电路1205C处理以标识要被执行的卸载程序代码2108和存储在共享上下文存储设备2120的区内的上下文数据2107。例如,卸载开始消息可以包括指向卸载程序代码2108的第一指针(即,指令指针)和指向上下文数据2107的第二指针。获取、解码和执行流水线2191取回上下文(2112)并且从卸载的程序代码2108获取指令。
在一个实施例中,上下文/指令转译器2190执行对由获取、解码和执行流水线2191进行的处理所要求的地址和/或上下文的任何必要修改。例如,如果条件跳转指令包括之前与核1201B关联的地址,则它可以修改此地址以指向对应存储器位置以便在核1201C上执行条件跳转指令(例如,通过添加偏移值)。上下文/指令转译器可以在指令解码器1338(例如,图13中示出的卸载电路1338A)和/或执行电路1308(例如,图13中示出的卸载电路1308A)内被实现以按照需要调整程序代码(例如,操作数、操作码)、地址或数据,使得卸载的工作能够被执行而在新核1201B上没有异常。
图22中图示了方法的一个实施例。方法可以在上述系统架构的上下文内被实现但不被限于任何特定系统架构。
在2201,助手核从父核接收卸载开始消息。在2202,基于卸载开始消息中的信息,助手核更新执行工作所需要的上下文数据和指令指针。如果在2203确定要求修改,则助手核在2204执行修改。例如,可以需要更新地址、指令和/或上下文数据,使得指令在助手核上执行而不生成异常。在2205,助手核如卸载开始消息所要求地执行卸载工作并且存储结果。在2206,助手核将卸载结束消息传送到父核,所述父核可以然后从指定存储器位置和/或寄存器访问结果。
如上所描述的,卸载结束指令的一个实施例将由助手核生成的结果和其它相关上下文数据保存到存储器中的特定区。助手核然后将工作完成通知父核。另外,在上述一些实施例中,从助手核传送的卸载结束消息指示其中保存了结果/上下文数据的位置。备选地,如所提及的,父核可以隐式地知道每个核的工作成果将被存储在何处(例如,存储位置可在系统引导序列期间被预确定或者可以在卸载开始消息中由父核指定)。
如果卸载处理完成时父核仅需要由助手核产生的所有状态中的有限部分,则保存由助手核产生的所有状态可以是不必要的,并且浪费处理器和存储器资源。因此,本发明的一个实施例包括新的上下文保存指令,其保存父核将需要以继续处理的卸载工作状态的所选择的组件。
如在图23中所图示的,保存卸载指令2390由助手核1201C的获取、解码和执行流水线2191获取、解码和执行以实现选择性保存操作。在下面所描述的一个实施例中,保存卸载指令2390包括新版本的x86 XSAVE指令(下文称为“XSAVEOFF”),其基于在操作数和/或寄存器中含有的位值来标识要被保存的状态的有限部分。然而,本发明的基本原理决不被限于x86实现。
在图23中,保存-恢复区2321包括用于存储卸载状态2315的选择的卸载状态组件2320的存储器中的指定区。在一个实施例中,卸载状态2315包括在获取、解码,执行和引退卸载程序代码2108时被修改的所有的向量寄存器数据、标量寄存器数据、控制/状态寄存器数据、标志数据和任何其它数据。所选择的卸载状态组件2320是由保存卸载指令特别标识的卸载状态数据2315的部分。在一个实施例中,这些特定组件由存储在寄存器或存储器位置中的位字段标识,并且保存卸载指令2390从一个或多个操作数标识该位字段。位字段可以被存储在各种不同类型的寄存器,包括但不限于控制/状态寄存器、机器状态寄存器、通用寄存器(GPR)和向量寄存器(例如,XMM、YMM、ZMM寄存器)。
备选地,保存卸载指令可在立即数值或操作数中自己编码位字段。然而,取决于可用于该位字段的立即数/操作数位的数量,此类实现可以要求状态组件以更粗的粒度被标识。
无论编码位字段所采用的特定方式如何,在一个实施例中,它标识要被存储的卸载状态2315的特定子集。例如,位字段的每个单独位可以被设置成1以标识将被保存的对应于该位的单个状态组件,并且可以被设置成0以指示将不被保存的单个状态组件。例如,第一位可以指示是否应保存所有SSE状态,第二位可以指示是否应保存所有AVX-512状态,等等。在一个实施例中,基于在卸载工作的执行期间是否修改和/或预期修改对应状态值来设置位掩码。例如,如果已知卸载工作将不修改任何SSE状态或任何AVX-512状态,则与这些状态组件关联的位值可以被设置成0(以指示不保存)。
在一个实施例中,可使用高粒度来设置位字段以标识在卸载工作期间修改的特定寄存器或寄存器组。例如,如果相对小的卸载仅修改一个ZMM寄存器,诸如ZMM0,则可以更新位字段以指示仅此数据需要由保存卸载指令保存。
备选地或另外地,位字段可以标识将不被保存的卸载状态2315的部分(例如,设置成1的每个位可以标识将不被保存到保存-恢复区2321的组件)。在其中除了几个特定组件大多数状态信息应被保存的配置中,此实现可以是有用的。在此类情况中,仅这些特定组件需要通过在位字段中设置值而被标识。未被修改的位字段的任何部分与要被保存的状态相关联。
返回到XSAVEOFF实现,现有XSAVE指令的集合对核的XSAVE管理的状态组件进行保存和恢复。XSAVE指令集包括XSAVE、XSAVEOPT、XSAVEC和XSAVES(用于保存);以及XRSTOR和XRSTORS(用于恢复)。处理器在称为XSAVE区域的存储器的区(例如,保存-恢复区2321)中组织状态组件。保存和恢复指令中的每个指令取得存储器操作数,该存储器操作数指定该指令在其上操作的XSAVE区域的64字节对齐基址。
在一个特定实现中,每个XSAVE区域具有包括传统区(legacy region)、XSAVE报头区和扩展区的格式。XSAVE区域的传统区包括在该区域的基址处开始的512字节。它被用来管理用于x87状态和SSE状态的状态组件。XSAVE区域的XSAVE报头包括在从该区域的基址偏移512字节处开始的64字节,并且扩展区在从该区域的基址偏移576字节处开始。它被用来管理与用于x87状态和SSE状态的那些状态组件不同的状态组件。在现有x86实现中,根据处理器支持哪些状态组件和在XCR0和IA32_XSS中已设置哪些位,确定扩展区的大小。
XSAVEOFF指令与XSAVE指令类似地操作,但也依赖如上所描述的位字段来标识要保存的特定状态组件(或不保存的特定组件)。因此,通过在寄存器、操作数或其它数据结构中设置位字段,仅保存那些状态组件2320,显著降低了用于仅影响小量的寄存器的卸载工作的存储器使用。
本发明的不同实施例可以依赖不同位字段编码和不同技术以便确保父核能恢复所保存的状态。如上面所提及的,数据被存储在的地址可以由父核或助手核显式地指定。在后一情况中,助手核将地址传送到父核。在任一情况中,位字段可以指定将不被保存的状态数据或可以指定将被保存的状态数据。另外,位字段可以在不同级别的粒度上进行其指定,所述不同级别的粒度包括各个寄存器(例如,特定ZMM寄存器)、寄存器的特定群组(例如,所有控制寄存器)或所有状态信息。
图24中示出了根据本发明的一个实施例的方法。在2401,助手核完成卸载工作,导致最终卸载执行状态。在2402,获取、解码和执行保存卸载指令。在2403,读取位字段以标识要被保存的最终卸载执行状态的一个或多个组件。
在2404,将最终卸载执行状态的将一个或多个组件保存到指定的保存-恢复存储器区。在2405,提取、解码和执行结束卸载指令以指示卸载的结束。在2406,父核从共享保存-恢复存储器区响应性地访问最终卸载执行状态的一个或多个组件。
在前述说明书中,本发明的实施例已参照其特定示例性实施例而被描述。然而,将明显的是,在不脱离如随附权利要求中所陈述的本发明的更广泛的精神和范围的情况下,可以对其进行各种修改和改变。因此,要以说明性而不是限制性的意义考虑说明书和附图。
示例
下面是本发明的不同实施例的示例实现。
示例1. 一种处理器,包括:多个核;耦合所述多个核的互连;以及卸载电路,所述卸载电路用来在没有操作系统(OS)干预的情况下将工作从所述多个核中的第一核转移到所述多个核中的第二核,所述工作包括多个指令;所述第二核包括转译器,所述转译器用来将与所述多个指令中的第一指令关联的信息从在所述第一核上可使用的第一格式转译成在所述第二核上可使用的第二格式;所述第二核的获取、解码和执行电路用来获取、解码和/或执行使用所述第二格式的所述第一指令。
示例2. 如示例1所述的处理器,其中所述信息包括在获取、解码和/或执行所述第一指令时要被使用的地址。
示例3. 如示例2所述的处理器,其中所述第一指令包括跳转指令。
示例4. 如示例3所述的处理器,其中所述跳转指令在所述第一核上被执行时包括带有到跳转代码序列的第一地址的条件跳转,其中在所述第二核上被执行时,所述转译器要将所述第一地址转译成第二地址以标识所述跳转代码序列。
示例5. 如示例1所述的处理器,其中所述信息包括在所述第二核上执行所述第一指令所要求的上下文数据的部分。
示例6. 如示例1所述的处理器,其中所述卸载电路要通过传送卸载开始消息来将工作从所述第一核转移到所述第二核,所述卸载开始消息包括用来标识第一存储器位置的第一地址指针,所述第一存储器位置要由所述第二核访问以执行所述卸载工作。
示例7. 如示例6所述的处理器,其中响应于完成所述卸载工作,所述第二核要将卸载结束消息传送到所述第一核并且将结果存储到存储器。
示例8. 如示例7所述的处理器,其中所述卸载结束消息包括用来标识第二存储器位置的第二地址指针,所述第二存储器位置要由所述第一核访问以访问所述结果。
示例9. 一种方法,包括:跨核间互连且在没有操作系统(OS)干预的情况下将工作从多个核中的第一核转移到所述多个核中的第二核,所述工作包括多个指令;所述第二核包括转译器,所述转译器用来将与所述多个指令中的第一指令关联的信息从在所述第一核上可使用的第一格式转译成在所述第二核上可使用的第二格式;以及获取、解码和/或执行使用所述第二格式的所述第一指令。
示例10. 如示例9所述的方法,其中所述信息包括在获取、解码和/或执行所述第一指令时要被使用的地址。
示例11. 如示例9所述的方法,其中所述第一指令包括跳转指令。
示例12. 如示例9所述的方法,其中所述跳转指令在所述第一核上被执行时包括带有到跳转代码序列的第一地址的条件跳转,其中在所述第二核上被执行时,所述转译器要将所述第一地址转译成第二地址以标识所述跳转代码序列。
示例13. 如示例11所述的方法,其中所述信息包括在所述第二核上执行所述第一指令所要求的上下文数据的部分。
示例14. 如示例11所述的方法,其中所述第一核要通过传送卸载开始消息来将工作转移到所述第二核,所述卸载开始消息包括用来标识第一存储器位置的第一地址指针,所述第一存储器位置要由所述第二核访问以执行所述卸载工作。
示例15. 如示例14所述的方法,其中响应于完成所述卸载工作,所述第二核要将卸载结束消息传送到所述第一核并且将结果存储到存储器。
示例16. 如示例15所述的方法,其中所述卸载结束消息包括用来标识第二存储器位置的第二地址指针,所述第二存储器位置要由所述第一核访问以访问所述结果。
示例17. 一种上面存储有程序代码的机器可读介质,所述程序代码在由机器执行时,促使所述机器执行以下操作:跨核间互连且在没有操作系统(OS)干预的情况下将工作从多个核中的第一核转移到所述多个核中的第二核,所述工作包括多个指令;所述第二核包括转译器,所述转译器用来将与所述多个指令中的第一指令关联的信息从在所述第一核上可使用的第一格式转译成在所述第二核上可使用的第二格式;以及获取、解码和/或执行使用所述第二格式的所述第一指令。
示例18. 如示例17所述的机器可读介质,其中所述信息包括在获取、解码和/或执行所述第一指令时要被使用的地址。
示例19. 如示例17所述的机器可读介质,其中所述第一指令包括跳转指令。
示例20. 如示例19所述的机器可读介质,其中所述跳转指令在所述第一核上被执行时包括带有到跳转代码序列的第一地址的条件跳转,其中在所述第二核上被执行时,所述转译器要将所述第一地址转译成第二地址以标识所述跳转代码序列。
示例21. 如示例20所述的机器可读介质,其中所述信息包括在所述第二核上执行所述第一指令所要求的上下文数据的部分。
示例22. 如示例24所述的机器可读介质,其中所述第一核要通过传送卸载开始消息来将工作转移到所述第二核,所述卸载开始消息包括用来标识第一存储器位置的第一地址指针,所述第一存储器位置要由所述第二核访问以执行所述卸载工作。
示例23. 如示例22所述的机器可读介质,其中响应于完成所述卸载工作,所述第二核要将卸载结束消息传送到所述第一核并且将结果存储到存储器。
示例24. 如示例23所述的机器可读介质,其中所述卸载结束消息包括用来标识第二存储器位置的第二地址指针,所述第二存储器位置要由所述第一核访问以访问所述结果。
本发明的实施例可以包括上面已描述的各种步骤。这些步骤可以被体现在机器可执行指令中,所述机器可执行指令可以被用来促使通用处理器或专用处理器执行步骤。备选地,这些步骤可以由含有用于执行步骤的硬连线逻辑的特定硬件组件执行,或由编程的计算机组件和定制硬件组件的任何组合执行。
如本文中所描述的,指令可指的是诸如配置成执行某些操作或具有预确定的功能性的专用集成电路(ASICs)的硬件的特定配置,或非暂态计算机可读介质中体现的存储器中存储的软件指令。因此,使用在一个或多个电子装置(例如,终端站、网络元件等)上存储和执行的代码和数据,能够实现附图中所示出的技术。此类电子装置使用计算机机器可读介质来存储并传递(在内部和/或通过网络与其它电子装置)代码和数据,所述计算机机器可读介质诸如非暂态计算机机器可读存储介质(例如,磁盘;光盘;随机存取存储器;只读存储器;闪速存储器装置;相变存储器)和暂态计算机机器可读通信介质(例如,电子、光、声或其它形式的传播信号—诸如载波、红外线信号、数字信号等等)。另外,此类电子装置通常包含耦合到一个或多个其它组件的一组一个或多个处理器,所述一个或多个其它组件诸如一个或多个存储装置(非暂态机器可读存储介质)、用户输入/输出装置(例如,键盘、触摸屏和/或显示器)和网络连接。一组处理器和其它组件的耦合通常通过一个或多个总线和桥(也被称为总线控制器)。存储装置携带和网络业务的信号分别表示一个或多个机器可读存储介质和机器可读通信介质。因此,给定的电子装置的存储装置通常存储用于在该电子装置的一组一个或多个处理器上执行的代码和/或数据。当然,使用软件、固件和/或硬件的不同组合,本发明的实施例的一个或多个部分可被实现。贯穿此详细描述,为了解释的目的,众多特定细节被阐明以便提供本发明的透彻理解。然而,将对本领域技术人员显而易见的是,本发明可被实践而不带有这些特定细节中的一些特定细节。在某些实例中,没有以详尽细节来描述公知结构和功能以便避免混淆本发明的主题。因此,应按照随附的权利要求来判断本发明的范围和精神。
Claims (25)
1.一种处理器,包括:
多个核;
耦合所述多个核的互连;以及
卸载电路,所述卸载电路用来在没有操作系统(OS)干预的情况下将工作从所述多个核中的第一核转移到所述多个核中的第二核,所述工作包括多个指令;
所述第二核包括转译器,所述转译器用来将与所述多个指令中的第一指令关联的信息从在所述第一核上可使用的第一格式转译成在所述第二核上可使用的第二格式;
所述第二核的获取、解码和执行电路用来获取、解码和/或执行使用所述第二格式的所述第一指令。
2.如权利要求1所述的处理器,其中所述信息包括在获取、解码和/或执行所述第一指令时要被使用的地址。
3.如权利要求1或2所述的处理器,其中所述第一指令包括跳转指令。
4.如权利要求3所述的处理器,其中所述跳转指令在所述第一核上被执行时包括带有到跳转代码序列的第一地址的条件跳转,其中在所述第二核上被执行时,所述转译器要将所述第一地址转译成第二地址以标识所述跳转代码序列。
5.如权利要求1或4所述的处理器,其中所述信息包括在所述第二核上执行所述第一指令所要求的上下文数据的部分。
6.如权利要求1或4所述的处理器,其中所述卸载电路要通过传送卸载开始消息来将工作从所述第一核转移到所述第二核,所述卸载开始消息包括用来标识第一存储器位置的第一地址指针,所述第一存储器位置要由所述第二核访问以执行所述卸载工作。
7.如权利要求6所述的处理器,其中响应于完成所述卸载工作,所述第二核要将卸载结束消息传送到所述第一核并且将结果存储到存储器。
8.如权利要求7所述的处理器,其中所述卸载结束消息包括用来标识第二存储器位置的第二地址指针,所述第二存储器位置要由所述第一核访问以访问所述结果。
9.一种方法,包括:
跨核间互连且在没有操作系统(OS)干预的情况下将工作从多个核中的第一核转移到所述多个核中的第二核,所述工作包括多个指令;
所述第二核包括转译器,所述转译器用来将与所述多个指令中的第一指令关联的信息从在所述第一核上可使用的第一格式转译成在所述第二核上可使用的第二格式;以及
获取、解码和/或执行使用所述第二格式的所述第一指令。
10.如权利要求9所述的方法,其中所述信息包括在获取、解码和/或执行所述第一指令时要被使用的地址。
11.如权利要求9或10所述的方法,其中所述第一指令包括跳转指令。
12.如权利要求11所述的方法,其中所述跳转指令在所述第一核上被执行时包括带有到跳转代码序列的第一地址的条件跳转,其中在所述第二核上被执行时,所述转译器要将所述第一地址转译成第二地址以标识所述跳转代码序列。
13.如权利要求11或12所述的方法,其中所述信息包括在所述第二核上执行所述第一指令所要求的上下文数据的部分。
14.如权利要求11或12所述的方法,其中所述第一核要通过传送卸载开始消息来将工作转移到所述第二核,所述卸载开始消息包括用来标识第一存储器位置的第一地址指针,所述第一存储器位置要由所述第二核访问以执行所述卸载工作。
15.如权利要求14所述的方法,其中响应于完成所述卸载工作,所述第二核要将卸载结束消息传送到所述第一核并且将结果存储到存储器。
16.如权利要求15所述的方法,其中所述卸载结束消息包括用来标识第二存储器位置的第二地址指针,所述第二存储器位置要由所述第一核访问以访问所述结果。
17.一种上面存储有程序代码的机器可读介质,所述程序代码在由机器执行时,促使所述机器执行以下操作:
跨核间互连且在没有操作系统(OS)干预的情况下将工作从多个核中的第一核转移到所述多个核中的第二核,所述工作包括多个指令;
所述第二核包括转译器,所述转译器用来将与所述多个指令中的第一指令关联的信息从在所述第一核上可使用的第一格式转译成在所述第二核上可使用的第二格式;以及
获取、解码和/或执行使用所述第二格式的所述第一指令。
18.如权利要求17所述的机器可读介质,其中所述信息包括在获取、解码和/或执行所述第一指令时要被使用的地址。
19.如权利要求18所述的机器可读介质,其中所述第一指令包括跳转指令。
20.如权利要求19所述的机器可读介质,其中所述跳转指令在所述第一核上被执行时包括带有到跳转代码序列的第一地址的条件跳转,其中在所述第二核上被执行时,所述转译器要将所述第一地址转译成第二地址以标识所述跳转代码序列。
21.如权利要求20所述的机器可读介质,其中所述信息包括在所述第二核上执行所述第一指令所要求的上下文数据的部分。
22.如权利要求17或21所述的机器可读介质,其中所述第一核要通过传送卸载开始消息来将工作转移到所述第二核,所述卸载开始消息包括用来标识第一存储器位置的第一地址指针,所述第一存储器位置要由所述第二核访问以执行所述卸载工作。
23.如权利要求22所述的机器可读介质,其中响应于完成所述卸载工作,所述第二核要将卸载结束消息传送到所述第一核并且将结果存储到存储器。
24.如权利要求23所述的机器可读介质,其中所述卸载结束消息包括用来标识第二存储器位置的第二地址指针,所述第二存储器位置要由所述第一核访问以访问所述结果。
25.一种设备,包括:
用于跨核间互连且在没有操作系统(OS)干预的情况下将工作从多个核中的第一核转移到所述多个核中的第二核的部件,所述工作包括多个指令;
将与所述多个指令中的第一指令关联的信息从在所述第一核上可使用的第一格式转译成在所述第二核上可使用的第二格式;以及
获取、解码和/或执行使用所述第二格式的所述第一指令。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US16/458040 | 2019-06-29 | ||
US16/458,040 US10929129B2 (en) | 2019-06-29 | 2019-06-29 | Apparatus and method for modifying addresses, data, or program code associated with offloaded instructions |
Publications (1)
Publication Number | Publication Date |
---|---|
CN112148368A true CN112148368A (zh) | 2020-12-29 |
Family
ID=70224218
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010218226.4A Pending CN112148368A (zh) | 2019-06-29 | 2020-03-25 | 用于修改与卸载的指令关联的地址、数据或程序代码的设备和方法 |
Country Status (3)
Country | Link |
---|---|
US (1) | US10929129B2 (zh) |
EP (1) | EP3757765A1 (zh) |
CN (1) | CN112148368A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115951936A (zh) * | 2023-01-17 | 2023-04-11 | 上海燧原科技有限公司 | 向量化编译程序的芯片适配方法、装置、设备及介质 |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11113059B1 (en) * | 2021-02-10 | 2021-09-07 | Next Silicon Ltd | Dynamic allocation of executable code for multi-architecture heterogeneous computing |
Family Cites Families (45)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5497497A (en) | 1989-11-03 | 1996-03-05 | Compaq Computer Corp. | Method and apparatus for resetting multiple processors using a common ROM |
US5095526A (en) | 1990-01-26 | 1992-03-10 | Apple Computer, Inc. | Microprocessor with improved interrupt response with interrupt data saving dependent upon processor status |
US5752071A (en) | 1995-07-17 | 1998-05-12 | Intel Corporation | Function coprocessor |
US5828875A (en) * | 1997-05-29 | 1998-10-27 | Telefonaktiebolaget Lm Ericsson | Unroll of instructions in a micro-controller |
US6247109B1 (en) | 1998-06-10 | 2001-06-12 | Compaq Computer Corp. | Dynamically assigning CPUs to different partitions each having an operation system instance in a shared memory space |
US7873814B1 (en) * | 2000-12-22 | 2011-01-18 | Lsi Corporation | Microcode based hardware translator to support a multitude of processors |
US6996548B2 (en) | 2001-05-11 | 2006-02-07 | Hemisphere Ii Investment Lp | Method and apparatus for providing a reward for the use of a processor in a parallel processing environment |
US20060218556A1 (en) | 2001-09-28 | 2006-09-28 | Nemirovsky Mario D | Mechanism for managing resource locking in a multi-threaded environment |
US6825843B2 (en) * | 2002-07-18 | 2004-11-30 | Nvidia Corporation | Method and apparatus for loop and branch instructions in a programmable graphics pipeline |
US7395410B2 (en) * | 2004-07-06 | 2008-07-01 | Matsushita Electric Industrial Co., Ltd. | Processor system with an improved instruction decode control unit that controls data transfer between processor and coprocessor |
US8713574B2 (en) | 2006-06-05 | 2014-04-29 | International Business Machines Corporation | Soft co-processors to provide a software service function off-load architecture in a multi-core processing environment |
US8161482B1 (en) | 2007-04-13 | 2012-04-17 | Marvell International Ltd. | Power optimization for multi-core devices |
US8615647B2 (en) * | 2008-02-29 | 2013-12-24 | Intel Corporation | Migrating execution of thread between cores of different instruction set architecture in multi-core processor and transitioning each core to respective on / off power state |
US8276142B2 (en) | 2009-10-09 | 2012-09-25 | Intel Corporation | Hardware support for thread scheduling on multi-core processors |
JP5935105B2 (ja) * | 2010-05-28 | 2016-06-15 | 国立大学法人東北大学 | 非同期プロトコル変換装置 |
US20110320766A1 (en) | 2010-06-29 | 2011-12-29 | Youfeng Wu | Apparatus, method, and system for improving power, performance efficiency by coupling a first core type with a second core type |
US8438306B2 (en) * | 2010-11-02 | 2013-05-07 | Sonics, Inc. | Apparatus and methods for on layer concurrency in an integrated circuit |
US9317288B2 (en) | 2011-04-07 | 2016-04-19 | Via Technologies, Inc. | Multi-core microprocessor that performs x86 ISA and ARM ISA machine language program instructions by hardware translation into microinstructions executed by common execution pipeline |
US9720730B2 (en) * | 2011-12-30 | 2017-08-01 | Intel Corporation | Providing an asymmetric multicore processor system transparently to an operating system |
US9135741B2 (en) | 2012-01-23 | 2015-09-15 | Nec Laboratories America, Inc. | Interference-driven resource management for GPU-based heterogeneous clusters |
WO2013154539A1 (en) * | 2012-04-10 | 2013-10-17 | Empire Technology Development Llc | Balanced processing using heterogeneous cores |
US9361116B2 (en) | 2012-12-28 | 2016-06-07 | Intel Corporation | Apparatus and method for low-latency invocation of accelerators |
JP6321325B2 (ja) | 2013-04-03 | 2018-05-09 | ルネサスエレクトロニクス株式会社 | 情報処理装置および情報処理方法 |
US20150007196A1 (en) * | 2013-06-28 | 2015-01-01 | Intel Corporation | Processors having heterogeneous cores with different instructions and/or architecural features that are presented to software as homogeneous virtual cores |
US9495001B2 (en) | 2013-08-21 | 2016-11-15 | Intel Corporation | Forcing core low power states in a processor |
IN2013CH04831A (zh) * | 2013-10-28 | 2015-08-07 | Empire Technology Dev Llc | |
US9652247B2 (en) | 2014-01-24 | 2017-05-16 | Nec Corporation | Capturing snapshots of offload applications on many-core coprocessors |
CN105589829A (zh) * | 2014-09-15 | 2016-05-18 | 华为技术有限公司 | 基于多核处理器芯片的数据处理方法、装置以及系统 |
US10089197B2 (en) | 2014-12-16 | 2018-10-02 | Intel Corporation | Leverage offload programming model for local checkpoints |
US9870339B2 (en) | 2015-06-26 | 2018-01-16 | Intel Corporation | Hardware processors and methods for tightly-coupled heterogeneous computing |
US10360063B2 (en) | 2015-09-23 | 2019-07-23 | Qualcomm Incorporated | Proactive resource management for parallel work-stealing processing systems |
US10372493B2 (en) | 2015-12-22 | 2019-08-06 | Intel Corporation | Thread and/or virtual machine scheduling for cores with diverse capabilities |
US10387154B2 (en) | 2016-03-14 | 2019-08-20 | International Business Machines Corporation | Thread migration using a microcode engine of a multi-slice processor |
US20170286122A1 (en) | 2016-04-01 | 2017-10-05 | Intel Corporation | Instruction, Circuits, and Logic for Graph Analytics Acceleration |
US10831620B2 (en) * | 2016-06-15 | 2020-11-10 | International Business Machines Corporation | Core pairing in multicore systems |
US10157142B2 (en) | 2016-09-29 | 2018-12-18 | Intel Corporation | Offload data transfer engine for a block data transfer interface |
CN106406814B (zh) * | 2016-09-30 | 2019-06-14 | 上海兆芯集成电路有限公司 | 处理器和将架构指令转译成微指令的方法 |
US10310897B2 (en) * | 2016-09-30 | 2019-06-04 | Intel Corporation | Hardware accelerators and methods for offload operations |
US10037267B2 (en) | 2016-10-21 | 2018-07-31 | Advanced Micro Devices, Inc. | Instruction set architecture and software support for register state migration |
US10684984B2 (en) * | 2016-12-21 | 2020-06-16 | Intel Corporation | Computing devices and server systems with processing cores having different instruction set architectures |
US10552207B2 (en) * | 2016-12-21 | 2020-02-04 | Intel Corporation | Systems and methods for multi-architecture computing including program stack translation |
US20180173530A1 (en) * | 2016-12-21 | 2018-06-21 | Intel Corporation | Systems and methods for multi-architecture computing |
WO2018125250A1 (en) | 2016-12-31 | 2018-07-05 | Intel Corporation | Systems, methods, and apparatuses for heterogeneous computing |
US20180365022A1 (en) | 2017-06-16 | 2018-12-20 | Intel Corporation | Dynamic offlining and onlining of processor cores |
KR102387977B1 (ko) | 2017-11-29 | 2022-04-19 | 삼성전자주식회사 | 적어도 두 개의 채널들을 통해 시스템 온 칩과 통신하는 메모리 장치, 이를 포함하는 전자 장치, 그리고 전자 장치의 동작 방법 |
-
2019
- 2019-06-29 US US16/458,040 patent/US10929129B2/en active Active
-
2020
- 2020-03-21 EP EP20164747.6A patent/EP3757765A1/en active Pending
- 2020-03-25 CN CN202010218226.4A patent/CN112148368A/zh active Pending
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115951936A (zh) * | 2023-01-17 | 2023-04-11 | 上海燧原科技有限公司 | 向量化编译程序的芯片适配方法、装置、设备及介质 |
Also Published As
Publication number | Publication date |
---|---|
US20200409697A1 (en) | 2020-12-31 |
EP3757765A1 (en) | 2020-12-30 |
US10929129B2 (en) | 2021-02-23 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11494194B2 (en) | Processor having multiple cores, shared core extension logic, and shared core extension utilization instructions | |
US11379236B2 (en) | Coherency tracking apparatus and method for an attached coprocessor or accelerator | |
CN106708753B (zh) | 在使用共享虚拟存储器的处理器中加速操作的装置和方法 | |
US11921574B2 (en) | Apparatus and method for fault handling of an offload transaction | |
US20170177361A1 (en) | Apparatus and method for accelerating graph analytics | |
CN109661656B (zh) | 用于利用条件所有权请求的智能存储操作的方法和装置 | |
EP3757765A1 (en) | Apparatus and method for modifying addresses, data, or program code associated with offloaded instructions | |
US10684858B2 (en) | Indirect memory fetcher | |
US11016766B2 (en) | Apparatus and method for compiler hints for inter-core offload | |
US10310978B2 (en) | Apparatus and method for multi-level cache request tracking | |
US11422809B2 (en) | Apparatus and method for multicasting a cache line update using delayed refetch messages | |
US10754782B1 (en) | Apparatuses, methods, and systems to accelerate store processing | |
EP4020225A1 (en) | Adaptive remote atomics | |
US20200409698A1 (en) | Apparatus and method for operating system notification of inter-core work offload | |
US10719442B2 (en) | Apparatus and method for prioritized quality of service processing for transactional memory | |
CN114691316A (zh) | 基于软件优先级提示的自主且可扩展的资源控制 | |
US11321144B2 (en) | Method and apparatus for efficiently managing offload work between processing units | |
CN112579160A (zh) | 用于具有减少的硬件要求的存储配对的装置和方法 | |
CN112148473A (zh) | 核-核“监听”指令变体 | |
US20170286299A1 (en) | Sharing aware snoop filter apparatus and method |
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 |