CN114661349A - 用于代码预取的指令和逻辑 - Google Patents

用于代码预取的指令和逻辑 Download PDF

Info

Publication number
CN114661349A
CN114661349A CN202111435835.6A CN202111435835A CN114661349A CN 114661349 A CN114661349 A CN 114661349A CN 202111435835 A CN202111435835 A CN 202111435835A CN 114661349 A CN114661349 A CN 114661349A
Authority
CN
China
Prior art keywords
code
cache
processor
instruction
instructions
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
Application number
CN202111435835.6A
Other languages
English (en)
Inventor
W·海尔曼
S·艾尔曼
I·赫尔
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Intel Corp
Original Assignee
Intel Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Intel Corp filed Critical Intel Corp
Publication of CN114661349A publication Critical patent/CN114661349A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3802Instruction prefetching
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/3004Arrangements for executing specific machine instructions to perform operations on memory
    • G06F9/30047Prefetch instructions; cache control instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/34Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
    • G06F11/3409Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment for performance assessment
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0806Multiuser, multiprocessor or multiprocessing cache systems
    • G06F12/0811Multiuser, multiprocessor or multiprocessing cache systems with multilevel cache hierarchies
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0862Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with prefetch
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3818Decoding for concurrent execution
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3824Operand accessing
    • G06F9/383Operand prefetching
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/45Caching of specific data in cache memory
    • G06F2212/452Instruction code

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Power Sources (AREA)
  • Computing Systems (AREA)
  • Microelectronics & Electronic Packaging (AREA)

Abstract

本申请公开了用于代码预取的指令和逻辑。在实施例中,一种处理器包括:取出电路,该取出电路用于取出指令,这些指令包括代码预取指令;解码电路,该解码电路用于对代码预取指令进行解码并将经解码的代码预取指令提供至存储器电路,其中该存储器电路用于执行经解码的代码预取指令,以将第一代码块集合预取到第一高速缓存中并将第二代码块集合预取到第二高速缓存中。描述并要求保护其他实施例。

Description

用于代码预取的指令和逻辑
技术领域
实施例总体上涉及计算机处理器。更具体地,实施例涉及当由处理器或其他处理逻辑执行时执行代码预取的处理逻辑、微处理器和相关联的指令集架构。
背景技术
指令集或指令集架构(ISA)是计算机架构中与编程有关的部分,并且可包括原生数据类型、指令、寄存器架构、寻址模式、存储器架构、中断和异常处理以及外部输入和输出(I/O)。ISA与微架构不同,微架构是实现指令集的处理器的内部设计。具有不同微架构的处理器可共享共同的指令集。在一些示例中,ISA可包括用于存储器操作、算术操作、逻辑操作、控制操作等等的指令。
附图说明
图1是根据本发明的实施例的系统的部分的框图。
图2是根据本发明的实施例的处理器的框图。
图3是根据本发明的另一实施例的多域处理器的框图。
图4是包括多个核的处理器的实施例。
图5是根据本发明的一个实施例的处理器核的微架构的框图。
图6是根据另一实施例的处理器核的微架构的框图。
图7是根据又一实施例的处理器核的微架构的框图。
图8是根据更进一步的实施例的处理器核的微架构的框图。
图9是根据本发明的另一实施例的处理器的框图。
图10是根据本发明的实施例的代表性SoC的框图。
图11是根据本发明的实施例的另一示例SoC的框图。
图12是可以与实施例一起使用的示例系统的框图。
图13是可以与实施例一起使用的另一示例系统的框图。
图14是代表性计算机系统的框图。
图15A-图15B是根据本发明的实施例的系统的框图。
图16是图示根据实施例的用于制造集成电路以执行操作的IP核开发系统的框图。
图17A-图17B是图示根据本发明的实施例的通用向量友好指令格式及其指令模板的框图。
图18A-图18D是图示根据本发明的实施例的示例性专用向量友好指令格式的框图。
图19是根据本发明的一个实施例的寄存器架构的框图。
图20A是图示根据本发明的实施例的示例性有序流水线和示例性的寄存器重命名的乱序发布/执行流水线两者的框图。
图20B是图示根据本发明的各实施例的要包括在处理器中的有序架构核的示例性实施例和示例性的寄存器重命名的乱序发布/执行架构核的框图。
图21A-图21B图示更具体的示例性有序核架构的框图,该核将是芯片中的若干逻辑块(包括相同类型和/或不同类型的其他核)中的一个。
图22是根据本发明的实施例的可具有多于一个的核、可具有集成存储器控制器、以及可具有集成图形器件的处理器的框图。
图23-图24是示例性计算机架构的框图。
图25是根据本发明的实施例的对照使用软件指令转换器将源指令集中的二进制指令转换成目标指令集中的二进制指令的框图。
图26是根据一个或多个实施例的示例系统的示图。
图27是根据一个或多个实施例的示例操作的图示。
图28是根据一个或多个实施例的示例系统的示图。
图29是根据一个或多个实施例的示例数据结构的示图。
图30是根据一个或多个实施例的示例方法的流程图。
图31是根据一个或多个实施例的示例方法的流程图。
图32是根据一个或多个实施例的示例存储介质的图示。
具体实施方式
以下描述内容描述用于由处理器、虚拟处理器、封装、计算机系统或其他处理装置执行的、用于代码预取的指令和处理逻辑。在以下描述中,陈述了诸如处理逻辑、处理器类型、微架构状况、事件、启用机制等众多特定细节,以提供对本公开的实施例的更透彻理解。然而,本领域技术人员将领会,没有这些特定细节也可实施实施例。此外,没有详细示出一些公知的结构、电路等,以避免不必要地使本公开的实施例模糊。
一些计算机处理器可包括预取用于应用程序的数据的功能。例如,一些处理器可预取预期程序执行将需要的数据(例如,值、变量、参数等)(在本文中被称为“数据预取”)。在另一示例中,一些处理器可预取正在被执行的程序的指令(在本文中被称为“代码预取”)。此类预取可减少从存储器或存储加载数据和指令所消耗的时间,并且由此可改善程序执行的性能。然而,一定量的预取也可能导致负面效果,诸如对高速缓存容量和存储器带宽的增加的压力。例如,如果高速缓存的部分加载有在执行期间不被使用的所预取的代码,则高速缓存的该部分对于在执行期间实际使用的数据或代码而言是不可用的。此外,用于将所预取的代码传输至高速缓存的系统带宽被浪费。
根据一些实施例,指令集架构(ISA)中的指令可被提供以在处理器中执行代码预取。在一些实施例中,单条代码预取(CP)指令可被执行以将多个代码块集合预取到不同级别处的多个高速缓存中。如本文中所使用,术语“代码块”是指程序代码的包括一条或多条指令的单元。在一些实施例中,处理引擎可通过访问第一高速缓存中的第一代码块集合同时还访问来自第二高速缓存的第二代码块集合来开始执行代码函数。以此方式,处理引擎可以开始执行代码函数而不被延迟与访问来自第二高速缓存的第二代码块集合相关联的等待时间时段。相应地,使用CP指令可减少处理引擎空闲的时间段,并且由此可改善程序执行的效率和/或性能。此外,在一些实施例中,性能监视单元(PMU) 可收集并存储与CP指令的执行有关的信息。此种信息可用于调整CP指令,以改善代码预取的性能收益与负面效果之间的平衡。下文参考图26-图32进一步描述了一些实施例的各种细节。进一步地,下文参考图1-图25描述了示例性系统和架构。
示例性系统和架构
虽然下列实施例是参考特定实现方式来描述的,但实施例不限于此方面。具体而言,构想了可将本文中所描述的实施例的类似的技术和教导应用到其他类型的电路、半导体器件、处理器、系统等。例如,所公开的实施例能以任一类型的计算机系统来实现,包括服务器计算机(例如,塔式服务器、机架服务器、刀片服务器、微服务器等等)、通信系统、存储系统、具有任何配置的台式计算机、膝上型计算机、笔记本、以及平板计算机(包括2:1平板、平板手机等等)。
另外,所公开的实施例还可以在其他设备中使用,这些设备诸如手持式设备、芯片上系统(SoC)以及嵌入式应用。手持式设备的一些示例包括:诸如智能电话之类的蜂窝电话、网际协议设备、数码相机、个人数字助理(PDA)、以及手持式PC。嵌入式应用可典型地包括:微控制器、数字信号处理器(DSP)、网络计算机(NetPC)、机顶盒、网络集线器、广域网(WAN)交换机、可穿戴设备、或能够执行下文所教导的功能和操作的任何其他系统。此外,实施例可在具有标准语音功能的移动终端(诸如移动电话、智能电话和平板电话)中实现和/或在不具有标准无线语音功能通信能力的非移动终端(诸如许多可穿戴设备、平板电脑、笔记本、台式机、微服务器、服务器等等)中实现。
现在参考图1,所示的是根据本发明的实施例的系统的部分的框图。如图1中所示,系统100可以包括各种组件,其包括所示为多核处理器的处理器110。处理器110可经由外部电压调节器160耦合至电源150,该外部电压调节器160可执行第一电压转换以将经调节的主电压Vreg提供给处理器110。
可以看出,处理器110可以是包括多个核120a-120n的单管芯处理器。另外,每一个核可以与集成的电压调节器(IVR)125a-125n相关联,这些集成的电压调节器接收经调节的主电压,并生成操作电压,操作电压被提供到与IVR相关联的处理器的一个或多个代理。相应地,可提供IVR实现方式以允许对每一个单个核的电压进而对功率和性能进行细粒度的控制。由此,每一个核都可在独立的电压和频率下操作,从而允许极大的灵活性,并提供平衡功耗与性能的广泛机会。在一些实施例中,对多个IVR的使用允许将组件分组到不同的功率层中,使得功率被IVR调节并且仅被提供给组中的那些组件。在功率管理期间,当处理器被置于某个低功率状态时,一个IVR的给定的功率层可以被掉电或断电,而另一IVR的另一功率层保持为活动的或完全供电的。类似地,核120可包括诸如一个或多个锁相环(PLL)的独立的时钟发生电路或与其相关联以独立地控制每个核120的操作频率。
仍参考图1,附加的组件可存在于处理器内,包括输入/输出接口(IF) 132、另一接口134以及集成存储器控制器(IMC)136。可以看出,这些组件中的每一个都可以由另一集成的电压调节器125X来供电。在一个实施例中,接口132可以为
Figure BDA0003381716180000051
快速路径互连(QPI)互连使能操作,该互连在包括多个层的高速缓存一致性协议中提供点对点(PtP)链路,多个层包括物理层、链路层和协议层。进而,接口134可以经由外围组件互连快速(PCIeTM)协议来通信。
还示出了功率控制单元(PCU)138,其可包括包含用于针对处理器 110执行功率管理操作的硬件、软件和/或固件的电路。可以看出,PCU 138经由数字接口162将控制信息提供给外部电压调节器160以使该电压调节器生成合适的经调节的电压。PCU 138也经由另一数字接口163将控制信息提供给多个IVR 125以控制所生成的操作电压(或使对应的IVR在低功率模式下被禁用)。在各实施例中,PCU 138可以包括用于执行基于硬件的功率管理的各种功率管理逻辑单元。此类功率管理可以是完全被处理器控制的(例如,通过各种处理器硬件,并且其可以是被工作负荷和/或功率、热或其他处理器约束触发的),并且/或者功率管理可以响应于外部源(诸如平台或管理功率源或系统软件)而被执行。
在图1中,PCU 138被图示为作为处理器的分开的逻辑来呈现。在其他情况下,PCU138可在核120中给定的一个或多个核上执行。在一些情况下,可将PCU 138实现为被配置成用于执行其自身的专用功率管理代码(有时被称作P代码)的微控制器(专用的或通用的)或其他控制逻辑。在另外的其他实施例中,将由PCU 138执行的功率管理操作可对于处理器外部地实现,诸如通过分开的功率管理集成电路(PMIC)或处理器外部的另一组件的方式。在另外的其他实施例中,将由PCU 138执行的功率管理操作可在BIOS或其他系统软件内实现。
实施例可尤其适合于多核处理器,其中,多个核中的每一个可以以独立的电压和频率点进行操作。如本文中所使用的术语“域”用于意指以同一电压和频率点进行操作的硬件和/或逻辑的集合。另外,多核处理器可以进一步包括其他非核处理引擎,诸如固定功能单元、图形引擎等等。此类处理器可包括除核以外的独立的域,诸如与图形引擎相关联的一个或多个域(本文中被称作图形域)以及与非核电路相关联的一个或多个域(本文中被称作系统代理)。虽然多域处理器的许多实现方式可以在单个半导体管芯上形成,但其他实现方式可以由多芯片封装来实现,其中,不同的域可以呈现在单个封装的不同半导体管芯上。
尽管为了易于说明没有示出,但应理解诸如非核逻辑和其他组件 (诸如,内部存储器(例如,一个或多个层级的高速缓存存储器层次结构等)) 之类的附加组件可存在于处理器110内。此外,尽管在图1的实现中示出为具有集成的电压调节器,但是,多个实施例不限于此。例如,可以将其他经调节的电压从外部电压调节器160或经调节的电压的一个或多个附加的外部源提供给芯片上资源。
注意,本文中所描述的功率管理技术可以独立于基于操作系统(OS) 的功率管理(OSPM)机制,并与其互补。根据一个示例OSPM技术,处理器可在各种性能状态或等级(所谓的P状态,即从P0到PN)上操作。一般而言, P1性能状态可对应于可由OS请求的最高保证的性能状态。除此P1状态之外, OS可进一步请求更高的性能状态,即,P0状态。该P0状态因此可以是机会型状态、超频或睿频(turbo)模式状态,在该状态中,当功率和/或热预算是可用的时,处理器硬件可配置处理器或其至少多个部分,以便以高于保证频率的频率进行操作。在许多实现中,处理器可包括在制造期间融合(fused)或以其他方式写入到处理器中的、高于P1保证的最大频率的多个所谓的元(bin)频率,该频率超出特定处理器的最大峰值频率。此外,根据一个OSPM机制,处理器可以在各种功率状态或等级上进行操作。对于功率状态,OSPM机制可以指定不同的功耗状态,一般将其称为C状态(C0、C1到Cn状态)。当核是活动的时,它以C0状态运行,而当该核是空闲的时,可将其置于核低功率状态,也将其称为核非零C状态(例如,C1-C6状态),每一个C状态都处于更低的功耗等级(使得C6是比C1更深的低功率状态,等等)。
应理解许多不同类型的功率管理技术可以在不同实施例中单独使用或组合使用。作为代表性示例,功率控制器可以控制处理器由一些形式的动态电压频率缩放(DVFS)来管理功率,在DVFS中一个或多个核或其他处理器逻辑的操作电压和/或操作频率可以被动态地控制以在某些情形下减少功耗。在示例中,可以使用加利福尼亚州圣克拉拉市的英特尔公司提供的增强型Intel SpeedStepTM技术来执行DVFS,以在最低功耗水平提供最优性能。在另一示例中,可以使用Intel TurboBoostTM技术来执行DVFS以使得一个或多个核或其他计算引擎能基于条件(例如,工作负荷和可用性)以高于保证操作频率的频率进行操作。
可以在某些示例中使用的另一功率管理技术是在不同计算引擎之间动态交换工作负荷。例如,处理器可以包括在不同功耗水平操作的非对称核或其他处理引擎,从而在功率约束的情形下,一个或多个工作负荷可以被动态地切换以在较低功率核或其他计算引擎上执行。另一示例性功率管理技术是硬件轮停(Hardware Duty Cycling)(HDC),其可以使得核和/或其他计算引擎根据工作周期被周期性地启用和禁用,使得一个或多个核在工作周期的不活动时段变为不活动的,而在工作周期的活动时段变为活动的。
当操作环境中存在约束时也可以使用功率管理技术。例如,当遇到功率和/或热约束时,可以通过降低操作频率和/或电压来减少功率。其他功率管理技术包括扼制指令执行速率或限制对指令的调度。此外,可以使给定的指令集架构的指令包括关于功率管理操作的显式的或隐式的方向。虽然以这些特定示例描述,但应理解许多其他功率管理技术可以在特定实施例中使用。
可在用于各种市场的处理器(包括服务器处理器、台式机处理器、移动处理器等)中实现多个实施例。现在参考图2,所示为根据本发明的实施例的处理器的框图。如图2中所示,处理器200可以是包括多个核210a–210n 的多核处理器。在一个实施例中,每一个此类核可以是独立的功率域,并且可配置成基于工作负荷进入和退出活动状态和/或最大性能状态。一个或多个核210相对于其他核可以是异构的,例如,具有不同的微架构、指令集架构、流水线深度、功率和性能能力。可经由互连215将各种核耦合至包括各种组件的系统代理220。可以看出,系统代理220可包括共享高速缓存230,共享高速缓存230可以是末级高速缓存。此外,系统代理可包括集成存储器控制器240,用于例如经由存储器总线与系统存储器(图2中未示出)通信。系统代理220 还包括各种接口250和功率控制单元255,功率控制单元255可包括用于执行本文中所描述的功率管理技术的逻辑。
此外,通过接口250a-250n,可完成向诸如外围设备、大容量存储设备等的各种芯片外组件的连接。尽管在图2的实施例中以此特定实现方式示出,但是本发明的范围不限于该方面。
现在参考图3,所示出的是根据本发明的另一实施例的多域处理器的框图。如图3的实施例中所示,处理器300包括多个域。具体而言,核域310 可以包括多个核310a–310n,图形域320可以包括一个或多个图形引擎,并且还可以存在系统代理域350。在一些实施例中,系统代理域350能以独立于核域的独立频率执行,并且可在全部的时刻保持被供电以处理功率控制事件和功率管理,使得可以控制域310和320动态地进入和退出高功率状态和低功率状态。域310和320中的每一个能以不同的电压和/或功率操作。注意,虽然仅以三个域示出,但是应理解,本发明的范围不限于此方面,并且附加的域可存在于其他实施例中。例如,可存在多个核域,每一个核域包括至少一个核。
一般而言,除各种执行单元和附加的处理元件之外,每个核310a- 310n还可进一步包括多个低层级高速缓存。进而,各种核可彼此耦合,并且耦合至共享高速缓存存储器,该共享高速缓存存储器由末级高速缓存(LLC)340a –340n的多个单元形成。在各实施例中,可在多个核与图形引擎以及各种媒体处理电路之间共享LLC 340。如所示,环形互连330由此将多个核耦合至一起,并且在多个核、图形域320和系统代理域350之间提供互连。在一个实施例中,互连330可以是核域的部分。然而,在其他实施例中,该环形互连可以是其自身域中的。
如进一步所见,系统代理域350可包括显示控制器352,该显示控制器352可提供对相关联的显示器的控制以及到它的接口。如进一步所示,系统代理域350可包括功率控制单元355,该功率控制单元355可包括用于执行本文中所描述的功率管理技术的逻辑。
如图3中进一步所示,处理器300还可包括集成存储器控制器 (IMC)370,其可提供到诸如动态随机存取存储器(DRAM)之类的系统存储器的接口。可以存在多个接口380a–380n以实现处理器与其他电路之间的互连。例如,在一个实施例中,可提供至少一个直接媒体接口(DMI)接口以及一个或多个PCIeTM接口。此外,为了提供诸如附加处理器或其他电路的其他代理之间的通信,还可以提供一个或多个QPI接口。尽管在图3的实施例中在该高层级示出,但是会理解,本发明的范围不限于该方面。
参考图4,图示出包括多个核的处理器的实施例。处理器400包括任何处理器或处理器件,诸如微处理器、嵌入式处理器、数字信号处理器(DSP)、网络处理器、手持式处理器、应用处理器、协同处理器、片上系统(SoC)、或用于执行代码的其它器件。在一个实施例中,处理器400包括至少两个核——核401和402,它们可包括非对称核或对称核(所图示的实施例)。然而,处理器400可包括任何数量的、可以是对称的或非对称的处理元件。
在一个实施例中,处理元件指的是用于支持软件线程的硬件或逻辑。硬件处理元件的示例包括:线程单元、线程槽、线程、进程单元、上下文、上下文单元、逻辑处理器、硬件线程、核和/或能够保持处理器的诸如执行状态或架构状态之类的状态的任何其他元件。换言之,在一个实施例中,处理元件指的是能够与诸如软件线程、操作系统、应用、或其他代码之类的代码独立地相关联的任何硬件。物理处理器通常指的是集成电路,其潜在地包括诸如核或硬件线程之类的任意数量的其他处理元件。
核通常指的是位于集成电路上的能够维持独立架构状态的逻辑,其中每个独立维持的架构状态与至少一些专用执行资源相关联。与核相反,硬件线程通常指的是位于集成电路上的能够维持独立架构状态的任何逻辑,其中独立维持的架构状态共享对执行资源的访问。如可见,当某些资源是共享的而其他资源是专用于架构状态的时候,硬件线程与核的术语之间的界线交叠。但核和硬件线程常常被操作系统视为单个的逻辑处理器,其中,操作系统能够分别在每一个逻辑处理器上调度操作。
如图4中所图示,物理处理器400包括两个核——核401和402。在此,核401和402被认为是对称核,即,这些核具有相同的配置、功能单元和/或逻辑。在另一实施例中,核401包括乱序处理器核,而核402包括有序处理器核。然而,核401和402可以是从任何类型的核中单独地选出的,诸如原生核、受软件管理的核、适于执行原生指令集架构(ISA)的核、适于执行经转换ISA的核、协同设计的核或其他已知核。不过,为进一步讨论,以下将更详细地描述在核401中所图示的多个功能单元,因为核402中的多个单元以类似方式操作。
如所描绘,核401包括两个架构状态寄存器401a和401b,它们可与两个硬件线程(也被称为硬件线程槽)相关联。因此,在一个实施例中,诸如操作系统之类的软件实体潜在地将处理器400视为四个单独的处理器,即能够并发地执行四个软件线程的四个逻辑处理器或处理元件。如上所述,第一线程与架构状态寄存器401a相关联,第二线程与架构状态寄存器401b相关联,第三线程可与架构状态寄存器402a相关联,并且第四线程可与架构状态寄存器402b相关联。在此,架构状态寄存器(401a、401b、402a和402b)可与如上所述的处理元件、线程槽或线程单元相关联。如所图示,在架构状态寄存器 401b中复制架构状态寄存器401a,因此能够为逻辑处理器401a和逻辑处理器 401b存储各个架构状态/上下文。在核401中,也可复制用于线程401a和401b 的其他较小资源,诸如,指令指针以及分配器和重命名器块430中的重命名逻辑。可通过分区来共享诸如重排序/引退单元435中的重排序缓冲器、分支目标缓冲器和指令转换后备缓冲器(BTB和I-TLB)420、加载/存储缓冲器和队列之类的一些资源。可潜在地完全共享诸如通用内部寄存器、(多个)页表基寄存器、低层级数据高速缓存和数据TLB 450、(多个)执行单元440和重排序 /引退单元435的多个部分之类的其他资源。
处理器400通常包括其他资源,它们可被完全共享,可通过分区被共享,或可由处理元件专用/专用于处理元件。在图4中,图示出具有处理器的说明性逻辑单元/资源的纯示例性处理器的实施例。注意,处理器可包括或省略这些功能单元中的任何单元,并包括未描绘出的任何其他已知的功能单元、逻辑或固件。如所图示,核401包括简化的、代表性的乱序(OOO)处理器核。但是,在不同实施例中,可利用有序处理器。
核401还包括耦合至取出单元以用于解码所取出的元素的解码模块 425。在一个实施例中,取出逻辑包括分别与线程槽401a、401b相关联的各个序列发生器。通常,核401与第一ISA相关联,该第一ISA定义/指定在处理器400上可执行的指令。作为第一ISA的部分的机器代码指令常包括引用/指定要被执行的指令或操作的指令的部分(被称为操作码)。解码模块425包括用于以下操作的电路:从这些指令的操作码识别出这些指令并在流水线上传递经解码的指令以进行第一ISA所定义的处理。例如,在一个实施例中,解码器模块425包括被设计成用于或适于识别诸如事务性指令之类的特定指令的逻辑。作为由解码器模块425识别的结果,架构或核401采取特定的、预定义的动作以执行与适当指令相关联的任务。重要的是应注意,本文中所描述的任务、块、操作和方法中的任何一个可响应于单条或多条指令来执行;它们中的一些可以是新指令或旧指令。
在一个示例中,分配器和重命名器块430包括用于保留资源的分配器,诸如,用于存储指令处理结果的寄存器堆。然而,线程401a和401b潜在地能够进行乱序执行,其中,分配器和重命名器块430还保留其他资源(诸如,用于跟踪指令结果的重排序缓冲器)。重命名器块430还可包括寄存器重命名器,其用于将程序/指令引用寄存器重命名为处理器400内部的其他寄存器。重排序/引退单元435包括诸如上述的重排序缓冲器、加载缓冲器和存储缓冲器之类的组件,用于支持被乱序执行的指令的乱序执行和稍后的有序引退。
在一个实施例中,调度器和(多个)执行单元块440包括调度器单元,其用于在多个执行单元上调度指令/操作。例如,在具有可用的浮点执行单元的执行单元的端口上调度浮点指令。还包括与执行单元相关联的寄存器堆,其用于存储信息指令处理结果。示例性的执行单元包括浮点执行单元、整数执行单元、跳转执行单元、加载执行单元、存储执行单元以及其他已知的执行单元。
较低层级的数据高速缓存和数据转换后备缓冲器(D-TLB)450耦合至(多个)执行单元440。数据高速缓存用于存储最近使用/操作的元素(诸如,数据操作数),潜在地在存储器一致性状态下保持这些元素。D-TLB用于存储最近的虚拟/线性至物理地址转换。作为特定示例,处理器可包括页表结构,用于将物理存储器分解成多个虚拟页。
在此,核401和402共享访问较高层级或进一步远离的高速缓存 410,其对用于对最近被取出元素进行高速缓存。注意,较高层级或进一步远离指的是高速缓存层级增加或进一步远离(多个)执行单元。在一个实施例中,较高层级高速缓存410是末级数据高速缓存(处理器400上的存储器层次结构中的末级高速缓存),诸如,第二或第三级数据高速缓存。然而,较高层级高速缓存410不限于此,因为它可与指令高速缓存相关联或包括指令高速缓存。替代地,跟踪高速缓存(指令高速缓存的类型)可耦合在解码器模块425之后,用于存储最近经解码的跟踪。
在所描绘的配置中,处理器400还包括总线接口405和可执行根据本发明的实施例的功率管理的功率控制单元460。在该情形下,总线接口405 用于与在处理器400外部的设备(诸如系统存储器和其他组件)通信。
存储器控制器470可以与诸如一个或多个存储器的其他设备对接。在示例中,总线接口405包括环形互连,其与用于对接存储器的存储器控制器和用于对接图形处理器的图形控制器互连。在SoC环境中,诸如网络接口、协同处理器、存储器、图形处理器以及任何其它已知计算机器件/接口之类的甚至更多的器件可被集成到单个管芯或集成电路上,以提供具有高功能性和低功耗的小形状因数。
现在参考图5,所示为根据本发明的一个实施例的处理器核的微架构的框图。如图5所示,处理器核500可以是多级流水线类型的乱序处理器。核500可以基于所接收的操作电压在各种电压下操作,所接收的操作电压可以接收自集成电压调节器或外部电压调节器。
如图5中所见,核500包括前端单元510,前端单元510可用于取出会被执行的指令并将这些指令准备好以供稍后在处理器流水线中使用。例如,前端单元510可包括取出单元501、指令高速缓存503和指令解码器505。在某些实现中,前端单元510可进一步包括跟踪高速缓存、微代码存储以及微操作存储。取出单元501可(例如,从存储器或指令高速缓存503)取出宏指令并将它们馈送至指令解码器505以将它们解码为原语,即用于通过处理器执行的微操作。
乱序(OOO)引擎515耦合在前端单元510与执行单元520之间,乱序引擎515可用于接收微指令并将它们准备好以供执行。更具体地,OOO引擎515可包括多个缓冲器,多个缓冲器用于重排序微指令流并分配执行所需的多个资源,以及提供对多个寄存器堆(例如,寄存器堆530和扩展寄存器堆535) 中的存储位置上的逻辑寄存器的重命名。寄存器堆530可包括用于整数和浮点操作的单独的寄存器堆。为了配置、控制和附加操作,还可以存在一组机器专用寄存器(MSR)538并且可由核500内(以及核外部)的各种逻辑来访问。
在执行单元520中可存在多种资源,包括例如多种整数、浮点和单指令多数据(SIMD)逻辑单元等其它专门硬件。例如,除了这些执行单元以外,此类执行单元可包括一个或多个算术逻辑单元(ALU)522和一个或多个向量执行单元524。
来自执行单元的结果可被提供至引退逻辑,即重排序缓冲器(ROB) 540。更具体地,ROB 540可包括多种阵列和逻辑以接收与被执行的指令相关联的信息。然后,通过ROB540检查该信息以确定指令是否可以有效引退并且结果数据是否被提交至处理器的架构状态,或阻止指令的正常引退的一个或多个异常是否发生。当然,ROB 540可处理与引退相关联的其他操作。
如图5所示,ROB 540耦合至高速缓存550,在一个实施例中,高速缓存550可以是低层级高速缓存(例如,L1高速缓存),尽管本发明的范围不限于此。而且,执行单元520可直接耦合至高速缓存550。从高速缓存550,可发生与更高层级高速缓存、系统存储器等等的数据通信。虽然在图5的实施例中以此高级别示出,但应理解本发明的范围不限于此方面。例如,虽然图5 的实现方式涉及了诸如具有
Figure BDA0003381716180000131
x86指令集架构(ISA)的乱序机器,但本发明的范围在此方面不受限制。即,其他实施例可在以下处理器中实现:有序处理器;诸如基于ARM的处理器的精简指令集计算(RISC)处理器;或具有另一类型ISA的处理器,该另一类型的ISA可经由仿真引擎和相关联的逻辑电路来仿真不同ISA的指令和操作。
现在参考图6,所示为根据另一实施例的处理器核的微架构的框图。在图6的实施例中,核600可以是具有不同的微架构的低功率核,诸如设计为降低功耗的具有相对受限制的流水线深度的基于
Figure BDA0003381716180000141
凌动TM(AtomTM)的处理器。如所示,核600包括耦合以将指令提供到指令解码器615的指令高速缓存610。分支预测器605可以耦合至指令高速缓存610。注意,指令高速缓存 610可以进一步耦合至高速缓存存储器的另一层级,诸如L2高速缓存(为了易于说明,图6中未示出)。进而,指令解码器615将经解码的指令提供到发出队列(IQ)620以供存储和传递到给定的执行流水线。微代码ROM 618耦合至指令解码器615。
浮点流水线630包括浮点(FP)寄存器堆632,其可包括具有给定位宽(诸如128、256或512位)的多个架构寄存器。流水线630包括浮点调度器634,用于调度指令以在流水线的多个执行单元之一上执行。在所示的实施例中,此类执行单元包括算术逻辑单元(ALU)635、混洗单元636和浮点 (FP)加法器638。进而,在这些执行单元中生成的结果可以被往回提供到缓冲器和/或寄存器堆632的寄存器。当然,应理解虽然以这几个示例执行单元示出,但是在另一实施例中可以存在附加的或不同的浮点执行单元。
还可以提供整数流水线640。在所示的实施例中,流水线640包括整数(INT)寄存器堆642,其可包括具有给定位宽(诸如128或256位)的多个架构寄存器。流水线640包括整数执行(IE)调度器644,用于调度指令以在流水线的多个执行单元之一上执行。在所示的实施例中,此类执行单元包括 ALU 645、移位器单元646和跳转执行单元(JEU)648。进而,在这些执行单元中生成的结果可以被往回提供到缓冲器和/或寄存器堆642的寄存器。当然,应理解虽然以这几个示例执行单元示出,但是在另一实施例中可以存在附加的或不同的整数执行单元。
存储器执行(ME)调度器650可以调度存储器操作以在地址生成单元(AGU)652中执行,地址生成单元652还耦合至TLB 654。如所示,这些结构可以耦合至数据高速缓存660,数据高速缓存660可以是L0和/或L1数据高速缓存,其进而耦合至高速缓存存储器层次结构的附加层级,包括L2高速缓存存储器。
为了提供对乱序执行的支持,在重排序缓冲器680之外还可以提供分配器/重命名器670,重排序缓冲器680配置为对被乱序地执行的指令进行重排序以供有序引退。虽然以图6的图示中的该特定流水线架构示出,但是应理解许多变型和替代是可能的。
注意,在具有非对称核的处理器中,诸如根据图5和6的微架构,由于功率管理的原因,可以在核之间动态地交换工作负荷,因为这些核虽然具有不同的流水线设计和深度,但是可以具有相同或相关的ISA。可以按照对用户应用(并且也可能对内核)透明的方式来执行此类动态核交换。
参考图7,所示为根据又一实施例的处理器核的微架构的框图。如图7所图示,核700可以包括多级有序流水线以在非常低的功耗水平处执行。作为一个此类示例,核700可以具有根据可从加利福尼亚州桑尼威尔市的ARM 控股有限公司得到的ARM Cortex A53设计的微架构。在实现中,可以提供配置为执行32位和64位代码的8级流水线。核700包括取出单元710,取出单元710配置为取出指令并将这些指令提供到解码单元715,解码单元715可以解码指令,例如具有给定ISA(诸如ARMv8 ISA)的宏指令。此外,注意队列 730可以耦合至解码单元715以存储经解码的指令。经解码的指令被提供到发出逻辑725,其中可以将经解码的指令发出到多个执行单元中的给定的一个。
进一步参考图7,发出逻辑725可以将指令发出到多个执行单元中的一个。在所示的实施例中,这些执行单元包括整数单元735、乘法单元740、浮点/向量单元750、双发出单元760和加载/存储单元770。可以将这些不同的执行单元的结果提供到写回(WB)单元780。应理解,虽然为了便于说明示出单个写回单元,但是在一些实现中,分开的多个写回单元可以与执行单元中的每一个相关联。此外,应理解,虽然图7中示出的单元中的每一个和逻辑被表示为在高层级,但是特定实现可以包括多个或不同的结构。可以在许多不同的最终产品(从移动设备扩展到服务器系统)中实现使用一个或多个具有如图7 中的流水线的核来设计的处理器。
参考图8,所示为根据更进一步的实施例的处理器核的微架构的框图。如图8所图示,核800可以包括多级多发出乱序流水线以在非常高性能水平处执行(其可在高于图7的核700的功耗水平处发生)。作为一个此类示例,处理器800可以具有根据ARM Cortex A57设计的微架构。在实现中,可以提供配置为执行32位和64位代码的15(或更大)级流水线。此外,流水线可以提供3路(或更大)宽度和3路(或更大)发出操作。核800包括取出单元 810,取出单元810配置为取出指令并将指令提供给耦合至高速缓存820的解码器/重命名器/分派器单元815。单元815可解码指令,指令例如具有ARMv8 指令集架构的宏指令,重命名指令内的寄存器引用,并将指令(最终)分派到所选择的执行单元。经解码的指令可以存储在队列825中。注意,虽然为了便于说明在图8中示出单个队列结构,但是应理解分开的多个队列可以被提供给多个不同类型的执行单元中的每一个。
在图8中还示出发出逻辑830,存储在队列825中的经解码的指令可以被从发出逻辑830发出到所选择的执行单元。在特定实施例中,发出逻辑 830还可以实现为与发出逻辑830耦合的多个不同类型的执行单元中的每一个具有单独的发出逻辑。
可以将经解码的指令发出到多个执行单元中的给定的一个。在所示的实施例中,这些执行单元包括一个或多个整数单元835、乘法单元840、浮点/向量单元850、分支单元860和加载/存储单元870。在实施例中,浮点/向量单元850可以配置为处理128或256位的SIMD或向量数据。此外,浮点/向量执行单元850可以执行IEEE-754双精度浮点操作。可以将这些不同的执行单元的结果提供到写回单元880。注意,在一些实现中,每个执行单元可以关联于分开的写回单元。此外,应理解,虽然图8中示出的单元中的每一个和逻辑被表示为在高层级,但是特定实现可以包括多个或不同的结构。
注意,在具有非对称核的处理器中,诸如根据图7和8的微架构,由于功率管理的原因,可以动态地交换工作负荷,因为这些核虽然具有不同的流水线设计和深度,但是可以具有相同或相关的ISA。可以按照对用户应用(并且也可能对内核)透明的方式来执行此类动态核交换。
可以在许多不同的最终产品(从移动设备扩展到服务器系统)中实现设计为使用一个或多个具有图5-8中的任意一个或多个中的流水线的核的处理器。现在参考图9,所示是根据本发明的另一实施例的处理器的框图。在图 9的实施例中,处理器900可以是包括多个域的SoC,可控制其中的每一个域在独立的操作电压和操作频率下进行操作。作为特定的说明性示例,处理器900 可以是基于
Figure BDA0003381716180000161
架构CoreTM(酷睿)的处理器(诸如,i3、i5、i7)或可从英特尔公司得到的另一个此类处理器。然而,诸如可从加利福尼亚州桑尼威尔的超微半导体有限公司(AMD)得到的、来自ARM控股有限公司或其被许可方的基于ARM的设计的、或来自加利福尼亚州桑尼威尔的MIPS技术公司或它们的被许可方或采用者的基于MIPS的设计之类的其他低功率处理器可替代地存在于诸如苹果A7处理器、高通骁龙处理器或德州仪器OMAP处理器之类的其他实施例中。此类SoC可用于诸如智能电话、平板计算机、平板手机计算机、超级本TM计算机或其他便携式计算设备之类的低功率系统中,其可包含具有基于异构系统架构的处理器设计的异构系统架构。
在图9所示的高层级视图中,处理器900包括多个核单元910a-910n。每一个核单元都可包括一个或多个处理器核、一个或多个高速缓存存储器和其他电路。每一个核单元910都可支持一个或多个指令集(例如,x86指令集(具有与较新版本一起添加的一些扩展);MIPS指令集;ARM指令集(具有诸如 NEON的可选附加扩展))或其他指令集或其组合。注意,核单元中的一些可以是异构资源(例如,具有不同设计)。此外,每一个此类核可耦合至高速缓存存储器(未示出),在实施例中,该高速缓存存储器可以是共享层级2(L2) 高速缓存存储器。可使用非易失性存储器930来存储各种程序和其他数据。例如,可以使用该存储设备来存储微代码的至少多个部分、诸如BIOS之类的引导信息、其他系统软件等。
每一个核单元910还可包括诸如总线接口单元之类的接口,其用于实现向处理器的附加电路的互连。在实施例中,每一个核单元910都耦合至一致性结构,该一致性结构可充当进而耦合至存储器控制器935的主高速缓存一致性管芯上互连。存储器控制器935转而控制与诸如DRAM之类的存储器(为了易于说明,在图9中未示出)的通信。
除这些核单元之外,附加的处理引擎也存在于该处理器内,包括至少一个图形单元920,该图形单元920可包括用于执行图形处理以及可能在图形处理器上执行通用操作(所谓的GPGPU操作)的一个或多个图形处理单元 (GPU)。此外,可以存在至少一个图像信号处理器925。信号处理器925可配置成用于处理从一个或多个捕捉设备(无论是SoC内部的还是芯片外的)接收到的传入的图像数据。
也可以存在其他加速器。在图9的图示中,视频译码器950可执行译码操作,包括对于视频信息的编码和解码,例如,提供对高清晰度视频内容的硬件加速支持。可进一步提供显示控制器955以加速显示操作,包括提供对系统的内部和外部显示器的支持。此外,可以存在安全处理器945,其用于执行诸如安全引导操作、各种加密操作等的安全操作。
多个单元中的每一个可以经由功率管理器940控制其功耗,功率管理器940可以包括用于执行本文中所描述的各种功率管理技术的控制逻辑。
在一些实施例中,处理器900可进一步包括耦合至一致性结构(各种外围设备可耦合至该一致性结构)的非一致性结构。一个或多个接口960a- 960d实现与一个或多个芯片外设备的通信。此类通信可以经由各种通信协议,诸如,PCIeTM、GPIO、USB、I2C、UART、MIPI、SDIO、DDR、SPI、HDMI 以及其他类型的通信协议。尽管在图9的实施例中在该高层级示出,但是会理解,本发明的范围不限于该方面。
现在参考图10,所示为代表性SoC的框图。在所示实施例中,SoC 1000可以是针对低功率操作所配置的多核SoC,该多核SoC待优化以便结合进智能电话或诸如平板计算机或其他便携式计算设备之类的其他低功率设备中。作为示例,可使用诸如较高功率核和/或低功率核(例如,乱序核和有序核) 的组合之类的非对称核或不同类型核来实现SoC 1000。在不同的实施例中,这些核可以基于
Figure BDA0003381716180000181
架构TM核设计或ARM架构设计。在另一些实施例中,可在给定的SoC中实现英特尔核和ARM核的混合。
如图10中所见,SoC 1000包括具有多个第一核1012a–1012d的第一核域1010。在示例中,这些核可以是诸如有序核之类的低功率核。在一个实施例中,可将这些第一核实现为ARM Cortex A53核。这些核转而耦合至核域 1010的高速缓存存储器1015。此外,SoC 1000包括第二核域1020。在图10的图示中,第二核域1020具有多个第二核1022a–1022d。在示例中,这些核可以是比第一核1012消耗更高功耗的核。在实施例中,这些第二核可以是可实现为ARM Cortex A57核的乱序核。这些核转而耦合至核域1020的高速缓存存储器1025。注意,虽然图10中所示的示例在每个域中包括4个核,但是会理解,在其他示例中,更多或更少的核可存在于给定的域中。
进一步参考图10,也提供图形域1030,其可包括一个或多个图形处理单元(GPU),这些图形处理单元配置成用于独立地执行例如由核域1010和 1020中的一个或多个核所提供的图形工作负荷。作为示例,除了提供图形和显示渲染操作之外,GPU域1030可以用于提供对各种屏幕尺寸的显示支持。
如所见,各种域耦合至一致性互连1040,在实施例中,该一致性互连可以是进而耦合至集成存储器控制器1050的高速缓存一致性互连结构。在一些示例中,一致性互连1040可包括共享高速缓存存储器,诸如,L3高速缓存。在实施例中,存储器控制器1050可以是用于提供与芯片外存储器进行的通信的多个通道(诸如,DRAM的多个通道(在图10中为了易于说明,没有示出))的直接存储器控制器。
在不同的示例中,核域的数量可以变化。例如,对于适于结合进移动计算设备的低功率SoC,可以存在诸如图10中所示的有限数量的核域。更进一步地,在此类低功率SoC中,包括较高功率核的核域1020可具有较少数量的此类核。例如,在一个实现中,可提供两个核1022以允许以降低的功耗等级进行的操作。此外,也可将不同的核域耦合至中断控制器以启用在不同域之间的工作负荷的动态交换。
在另一些实施例中,可以存在更大量的核域以及附加可选的IP逻辑,如此,可按比例将SoC放大到更高的性能(和功率)等级,以便结合进诸如台式机、服务器、高性能计算系统、基站等的其他计算设备中。作为一个此类示例,可提供各自具有给定数量的乱序核的4个核域。更进一步地,除了可选的GPU支持(作为示例,其可采取GPGPU的形式)之外,还可提供用于提供对特定功能(例如,web服务、网络处理、交换等)的优化的硬件支持的一个或多个加速器。此外,可以存在用于将此类加速器耦合至多个芯片外组件的输入/输出接口。
现在参考图11,所示为另一示例SoC的框图。在图11的实施例中,SoC 1100可包括用于允许多媒体应用、通信和其他功能的高性能的各种电路。由此,SoC 1100适于结合进多种便携式和其他设备,诸如,智能电话、平板计算机、智能电视等。在所示示例中,SoC 1100包括中央处理器单元(CPU) 域1110。在实施例中,多个单独的处理器核可存在于CPU域1110中。作为一个示例,CPU域1110可以是具有4个多线程核的四核处理器。此类处理器可以是同构或异构处理器,例如,低功率和高功率处理器核的混合。
进而,提供GPU域1120以在一个或多个GPU中执行高级图形处理,从而处理图形并计算API。DSP单元1130可提供一个或多个低功率DSP,这些低功率DSP除了处理可在多媒体指令的执行期间发生的高级计算之外,还处理诸如音乐回放、音频/视频等的低功率多媒体应用。进而,通信单元1140 可包括用于经由各种无线协议提供连接性的各种组件,各种无线协议诸如蜂窝通信(包括3G/4G LTE)、诸如蓝牙TM和IEEE 802.11之类的无线局域协议等。
更进一步地,可使用多媒体处理器1150来执行对高清晰度视频和音频内容的捕捉和回放,包括对用户姿势的处理。传感器单元1160可包括多个传感器和/或用于对接到存在于给定平台中的各种芯片外传感器的传感器控制器。图像信号处理器(ISP)1170可参照从平台的一个或多个相机(包括静止相机和视频相机)捕捉到的内容来执行图像处理。
显示处理器1180可提供对向给定像素密度的高清晰度显示器的连接的支持,包括无线地传递内容以在此类显示器上回放的能力。更进一步地,位置单元1190可包括具有对多个全球定位系统(GPS)星座图的支持的GPS 接收机,以便向应用提供使用此类GPS接收机所获取的高精度定位信息。会理解,虽然在图11的示例中以该特定的一组组件示出,但是许多变型和替代是可能的。
现在参考图12,所示为可与多个实施例一起使用的示例系统的框图。如所见,系统1200可以是智能电话或其他无线通信器。基带处理器1205 被配置成执行关于会从该系统传输或由该系统接收的通信信号的各种信号处理。进而,基带处理器1205被耦合至应用处理器1210,该应用处理器1210可以是系统的主CPU,以执行除了诸如许多公知的社交媒体与多媒体应用的用户应用之外的OS以及其他系统软件。应用处理器1210可以进一步被配置成为该设备执行各种其他计算操作。
进而,应用处理器1210可以耦合至用户接口/显示器1220,例如,触摸屏显示器。此外,应用处理器1210可耦合至包括非易失性存储器(即,闪存1230)和系统存储器(即,动态随机存取存储器(DRAM)1235)的存储器系统。如进一步所示,应用处理器1210进一步耦合至诸如可记录视频和/或静止图像的一个或多个图像捕捉设备之类的捕捉设备1241。
仍然参考图12,包括订户身份模块和可能的安全存储设备和加密处理器的通用集成电路卡(UICC)1246也耦合至应用处理器1210。系统1200可以进一步包括可以耦合至应用处理器1210的安全处理器1250。多个传感器 1225可以耦合至应用处理器1210以实现各种感测到的信息的输入,诸如加速度计与其他环境信息。音频输出设备1295可提供接口,以便例如以语音通信、播放的或流音频数据等的形式输出声音。
如进一步所图示,提供近场通信(NFC)非接触式接口1260,其经由NFC天线1265在NFC近场中通信。尽管图12中示出分离的天线,请理解在一些实现中,可以提供一根天线或不同组的天线以实现各种无线功能。
功率管理集成电路(PMIC)1215耦合至应用处理器1210以执行平台级别功率管理。为此,PMIC 1215可以根据需要发出功率管理请求至应用处理器1210以进入某些低功率状态。此外,基于平台约束,PMIC 1215也可以控制系统1200的其他组件的功率级别。
为了实现传送与接收通信,可以在基带处理器1205与天线1290之间耦合各种电路。具体而言,可以存在射频(RF)收发机1270与无线局域网 (WLAN)收发机1275。一般而言,可以根据诸如3G或4G无线通信协议(诸如根据码分多址(CDMA)、全球移动通信系统(GSM)、长期演进(LTE) 或其他协议)的给定的无线通信协议,使用RF收发机1270接收并传送无线数据和呼叫。此外,可以存在GPS传感器1280。也可以提供诸如无线电信号(例如,AM/FM与其他信号)的接收与传送的其他无线通信。此外,也可以经由 WLAN收发机1275实现本地无线通信。
现在参考图13,所示为可与多个实施例一起使用的另一示例系统的框图。在图13的图示中,系统1300可以是诸如平板计算机、2:1平板、平板手机或其他转换式或独立式平板系统之类的移动低功率系统。如所图示,存在SoC 1310,并且SoC 1310可配置成作为设备的应用处理器进行操作。
各种设备可耦合至SoC 1310。在所示图示中,存储器子系统包括耦合至SoC 1310的闪存1340和DRAM 1345。此外,触摸面板1320耦合至 SoC 1310以提供显示能力和经由触摸的用户输入,包括在触摸面板1320的显示器上提供虚拟键盘。为了提供有线网络连接性,SoC 1310耦合至以太网接口 1330。外围中枢1325耦合至SoC 1310以启用与各种外围设备的对接,诸如,可通过各种端口或其他连接器中的任何一个而被耦合至系统1300。
除了SoC 1310中的内部功率管理电路和功能之外,PMIC 1380也耦合至SoC 1310以提供基于平台的功率管理,例如,基于该系统是由电池1390 供电还是经由交流适配器1395由交流电供电。除了该基于功率源的功率管理之外,PMIC 1380还可执行基于环境和使用条件的平台功率管理活动。更进一步地,PMIC 1380可将控制和状态信息传递给SoC 1310以引起SoC 1310中的各种功率管理动作。
仍然参考图13,为了提供无线能力,将WLAN单元1350耦合至 SoC 1310,并转而耦合至天线1355。在各种实现中,WLAN单元1350可以根据一个或多个无线协议提供通信。
如进一步所图示,多个传感器1360可耦合至SoC 1310。这些传感器可包括各种加速度计、环境和其他传感器,包括用户姿势传感器。最后,将音频编解码器1365耦合至SoC1310以向音频输出设备1370提供接口。当然会理解,虽然以图13中的该特定实现示出,但是许多变型和替代是可能的。
现在参考图14,所示为诸如笔记本、超极本TM或其他小形状因数系统的代表性计算机系统1400的框图。在一个实施例中,处理器1410包括微处理器、多核处理器、多线程处理器、超低电压处理器、嵌入式处理器,或其他已知处理元件。在所图示出的实现方式中,处理器1410充当主处理单元以及用于与系统1400的各种组件中的许多组件进行通信的中央枢纽,并且可包括如本文中所描述的功率管理电路。作为一个示例,处理器1410被实现为SoC。
在一个实施例中,处理器1410与系统存储器1415通信。作为示例性示例,系统存储器1415被实现为经由多个存储器设备或模块来提供给定量的系统存储器。
为提供对诸如数据、应用、一个或多个操作系统等的信息的持续的存储,大容量存储设备1420也可耦合至处理器1410。在各种实施例中,为了实现更薄和更轻的系统设计以及为了改善系统响应,该大容量存储设备可以经由SSD被实现,或者该大容量存储设备可以主要使用具有较小量的SSD存储设备的硬盘驱动器(HDD)来实现,SSD存储设备充当SSD高速缓存,以在掉电事件期间实现对上下文状态和其他此类信息的非易失性存储,从而在系统活动重新启动时,可以进行快速上电。图14还示出,闪存设备1422可以例如经由串行外围接口(SPI)耦合至处理器1410。该闪存设备可以提供对系统软件(包括基本输入/输出软件(BIOS)以及系统的其他固件)的非易失性存储。
系统1400内可以存在各种输入/输出(I/O)设备。图14的实施例中具体示出显示器1424,显示器1424可以是进一步提供触摸屏1425的高清晰度LCD或LED面板。在一个实施例中,显示器1424可以经由显示互连耦合至处理器1410,该显示互连可实现为高性能图形互连。触摸屏1425可以经由另一互连(在实施例中,可以是I2C互连)耦合至处理器1410。如图14中进一步所示,除触摸屏1425之外,经由触摸的用户输入也可以经由触板1430 进行,触板1430可以配置在机架内,并且还可以耦合至与触摸屏1425相同的 I2C互连。
出于感知计算和其他目的,各种传感器可以存在于系统内,并且能以不同的方式耦合至处理器1410。某些惯性传感器和环境传感器可以通过传感器中枢1440(例如,经由I2C互连)耦合至处理器1410。在图14示出的实施例中,这些传感器可以包括加速度计1441、环境光传感器(ALS)1442、罗盘 1443以及陀螺仪1444。其他环境传感器可以包括一个或多个热传感器1446,在一些实施例中,这些热传感器1446经由系统管理总线(SMBus)总线耦合至处理器1410。
如图14中还可见,各种外围设备可以经由低引脚计数(LPC)互连耦合至处理器1410。在所示的实施例中,各种组件可以通过嵌入式控制器 1435耦合。此类组件可包括键盘1436(例如,经由PS2接口耦合)、风扇1437 以及热传感器1439。在一些实施例中,触板1430还可以经由PS2接口耦合至 EC 1435。此外,诸如可信任平台模块(TPM)1438的安全处理器也可经由该 LPC互连耦合至处理器1410。
系统1400能以各种方式(包括以无线方式)与外部设备通信。在图14所示出的实施例中,存在各种无线模块,其中的每一个无线模块都可以对应于针对特定的无线通信协议而配置的无线电装置。用于在短距离(诸如,近场)内进行无线通信的一种方式可以经由NFC单元1445,在一个实施例中,该NFC单元1445可以经由SMBus与处理器1410进行通信。注意,经由该 NFC单元1445,彼此紧邻的设备可以进行通信。
如图14中进一步所见,附加的无线单元可包括其他短距离无线引擎,包括WLAN单元1450和蓝牙TM单元1452。通过使用WLAN单元1450,可以实现Wi-FiTM通信,而通过蓝牙TM单元1452,可以发生短距离蓝牙TM通信。这些单元可以经由给定的链路与处理器1410通信。
另外,无线广域通信(例如,根据蜂窝式或其他无线广域协议)可以经由WWAN单元1456进行,该WWAN单元1456进而可以耦合至订户身份模块(SIM)1457。另外,为了允许接收并使用位置信息,还可以存在GPS 模块1455。注意,在图14中示出的实施例中,WWAN单元1456和诸如相机模块1454的集成捕捉设备可以经由给定的链路进行通信。
为了提供音频输入和输出,可以经由数字信号处理器(DSP)1460 来实现音频处理器,DSP 1460可以经由高清晰度音频(HDA)链路来耦合至处理器1410。类似地,DSP 1460可以与集成的编码器/解码器(编解码器)和放大器1462进行通信,集成的编解码器和放大器1462进而可以耦合至可以在机架内实现的输出扬声器1463。类似地,放大器和编解码器1462可以耦合至话筒1465以从话筒1465接收音频输入,在实施例中,话筒1465可以经由双阵列话筒(诸如数字话筒阵列)被实现,以提供高质量音频输入来实现对系统内的各种操作的语音激活的控制。另外注意,可以将音频输出从放大器/编解码器1462提供到头戴式耳机插孔1464。虽然在图14的实施例中利用这些特定组件示出,但应理解本发明的范围不限于此方面。
可在许多不同的系统类型中实现实施例。现在参考图15A,所示为根据本发明的实施例的系统的框图。如图15A所示,多处理器系统1500是点对点互连系统,且包括经由点对点互连1550耦合的第一处理器1570和第二处理器1580。如图15A所示,处理器1570和1580中的每一个可以是包括第一和第二处理器核(即处理器核1574a和1574b以及处理器核1584a和1584b) 的多核处理器,尽管这些处理器中可能存在更多核。处理器中的每一个可包括PCU或其他功率管理逻辑以执行如本文中所描述的基于处理器的功率管理。
仍参考图15A,第一处理器1570还包括集成存储器控制器(IMC) 1572和点对点(P-P)接口1576和1578。类似地,第二处理器1580包括MCH 1582和P-P接口1586与1588。如图15A所示,IMC 1572和1582将多个处理器耦合至相应的存储器(即,存储器1532和存储器1534),这些存储器可以是本地附连到相应处理器的系统存储器(例如,DRAM)的多个部分。第一处理器1570与第二处理器1580可以分别经由P-P互连1562与1564耦合至芯片组1590。如图15A中所示,芯片组1590包括P-P接口1594和1598。
此外,芯片组1590包括通过P-P互连1539将芯片组1590与高性能图形引擎1538耦合的接口1592。进而,芯片组1590可以经由接口1596被耦合至第一总线1516。如图15A所示,各种输入/输出(I/O)设备1514以及总线桥接器1518可耦合至第一总线1516,总线桥接器1518将第一总线1516 耦合至第二总线1520。在一个实施例中,各种设备可耦合至第二总线1520,包括例如,键盘/鼠标1522、通信设备1526以及诸如可包括代码1530的盘驱动器或者其他大容量存储设备之类的数据存储单元1528。此外,音频I/O 1524 可以被耦合至第二总线1520。可将多个实施例合并到其他类型的系统中,包括诸如智能蜂窝电话、平板计算机、上网本、超极本TM等之类的移动设备。
现在参考图15B,所示出的是根据本发明的实施例的更具体的第二示例性系统1501的框图。图15A和图15B中的相同元件使用相同的附图标记,并且已从图15B省略了图15A的某些方面以避免使图15B的其他方面模糊。
图15B图示出处理器1570、1580可分别包括集成存储器和I/O 控制逻辑(“CL”)1571和1581。因此,控制逻辑1571和1581包括集成存储器控制器单元并包括I/O控制逻辑。图15B图示出不仅存储器1532、1534 耦合至控制逻辑1571和1581,而且I/O设备1513也耦合至控制逻辑1571和 1581。传统I/O设备1515被耦合到芯片组1590。
至少一个实施例的一个或多个方面可由存储在机器可读介质上的代表性代码实现,代表性代码表示和/或定义诸如处理器的集成电路内的逻辑。例如,机器可读介质可包括表示处理器内的各种逻辑的指令。当被机器读取时,指令可使机器制造逻辑以执行本文所述的技术。被称为“IP核”的这些表示是集成电路的逻辑的可重用单元,这些可重用单元可存储在有形的机器可读介质上作为描述集成电路的结构的硬件模型。可将硬件模型提供给多个客户或制造机构,客户或制造机构将硬件模型加载到制造集成电路的制造机器上。可以这样制造集成电路以使得该电路执行与本文所述的实施例中的任一个相关联地描述的操作。
图16是图示出根据实施例的可用于制造集成电路以执行操作的IP核开发系统1600的框图。IP核开发系统1600可用于生成可被包含在较大的设计中或用于构建整个集成电路(例如,SoC集成电路)的模块化的、可重复使用的设计。设计机构1630可以高级编程语言(例如,C/C++)生成IP核设计的软件模拟1610。软件模拟1610可用于设计、测试或验证IP核的行为。然后可以从模拟模型创建或合成寄存器传送级(RTL)设计。RTL设计1615是对硬件寄存器之间的数字信号的流动建模的集成电路的行为的抽象,包括使用被建模的数字信号执行相关联的逻辑。除了RTL设计1615之外,还可创建、设计或合成在逻辑级或晶体管级的较低级设计。因此,初始设计和模拟的特定细节可以变化。
可通过设计机构进一步将RTL设计1615或等价物合成到硬件模型1620中,硬件模型1620可以是以硬件描述语言(HDL)或物理设计数据的一些其他表示。可进一步模拟或测试HDL以验证IP核设计。可使用非易失性存储器1640(例如,硬盘、闪存、或任何非易失性存储介质)存储IP核设计以传递到第三方制造机构1665。替代地,可以在有线连接1650或无线连接 1660上传送(例如,经由互联网)IP核设计。制造机构1665然后可以制造至少部分地基于IP核设计的集成电路。所制造的集成电路可配置为执行根据本文中所描述的组件和/或过程的操作。
下文所描述的图17A-图25详细描述用于实现本文中所描述的组件和/或过程的实施例的示例性架构和系统。在一些实施例中,本文中所描述的一个或多个硬件组件和/或指令如下文所详述地被仿真,或被实现为软件模块。
上文详细描述的(多条)指令的实施例可按“通用向量友好指令格式”来实现,其在下文详细描述。在其他实施例中,不利用此类格式,并且使用另一指令格式,然而,下文对于写掩码寄存器、各种数据变换(混合、广播等)、寻址等的描述一般适用于上文对(多条)指令的实施例的描述。另外,在下文中详细描述示例性系统、架构和流水线。上文中(多条)指令的实施例可在此类系统、架构和流水线上执行,但是不限于详细描述的那些系统、架构和流水线。
指令集可包括一种或多种指令格式。给定的指令格式可定义各种字段(例如,位的数量、位的位置)以指定将要执行的操作(例如,操作码)以及将对其执行该操作的(多个)操作数和/或(多个)其他数据字段(例如,掩码),等等。通过指令模板(或子格式)的定义来进一步分解一些指令格式。例如,可将给定指令格式的指令模板定义为具有该指令格式的字段(所包括的字段通常按照相同顺序,但是至少一些字段具有不同的位的位置,因为较少的字段被包括)的不同子集,和/或定义为具有以不同方式进行解释的给定字段。由此,ISA的每一条指令使用给定的指令格式(并且如果经定义,则按照该指令格式的指令模板中的给定的一个指令模板)来表达,并包括用于指定操作和操作数的字段。例如,示例性ADD(加法)指令具有特定的操作码和指令格式,该特定的指令格式包括用于指定该操作码的操作码字段和用于选择操作数(源 1/目的地以及源2)的操作数字段;并且该ADD指令在指令流中出现将使得在操作数字段中具有选择特定操作数的特定的内容。已经推出和/或发布了被称为高级向量扩展(AVX)(AVX1和AVX2)和利用向量扩展(VEX)编码方案的SIMD扩展集(参见例如2014年9月的
Figure BDA0003381716180000271
64和IA-32架构软件开发者手册;并且参见2014年10月的
Figure BDA0003381716180000272
高级向量扩展编程参考)。
示例性指令格式
本文中所描述的(多条)指令的实施例能以不同的格式体现。另外,在下文中详述示例性系统、架构和流水线。(多条)指令的实施例可在此类系统、架构和流水线上执行,但是不限于详述的那些系统、架构和流水线。
通用向量友好指令格式
向量友好指令格式是适于向量指令(例如,存在专用于向量操作的特定字段)的指令格式。尽管描述了其中通过向量友好指令格式支持向量和标量操作两者的实施例,但是替代实施例仅使用通过向量友好指令格式的向量操作。
图17A-图17B是图示根据本发明的实施例的通用向量友好指令格式及其指令模板的框图。图17A是图示根据本发明的实施例的通用向量友好指令格式及其A类指令模板的框图;而图17B是图示根据本发明的实施例的通用向量友好指令格式及其B类指令模板的框图。具体地,针对通用向量友好指令格式1700定义A类和B类指令模板,这两者都包括无存储器访问1705的指令模板和存储器访问1720的指令模板。在向量友好指令格式的上下文中的术语“通用”是指不束缚于任何特定指令集的指令格式。
尽管将描述其中向量友好指令格式支持以下情况的本发明的实施例:64字节向量操作数长度(或尺寸)与32位(4字节)或64位(8字节) 数据元素宽度(或尺寸)(并且由此,64字节向量由16个双字尺寸的元素组成,或者替代地由8个四字尺寸的元素组成);64字节向量操作数长度(或尺寸)与16位(2字节)或8位(1字节)数据元素宽度(或尺寸);32字节向量操作数长度(或尺寸)与32位(4字节)、64位(8字节)、16位(2字节) 或8位(1字节)数据元素宽度(或尺寸);以及16字节向量操作数长度(或尺寸)与32位(4字节)、64位(8字节)、16位(2字节)、或8位(1字节)数据元素宽度(或尺寸);但是替代实施例可支持更大、更小和/或不同的向量操作数尺寸(例如,256字节向量操作数)与更大、更小或不同的数据元素宽度(例如,128位(16字节)数据元素宽度)。
图17A中的A类指令模板包括:1)在无存储器访问1705的指令模板内,示出无存储器访问的完全舍入控制型操作1710的指令模板、以及无存储器访问的数据变换型操作1715的指令模板;以及2)在存储器访问1720的指令模板内,示出存储器访问的时效性1725的指令模板和存储器访问的非时效性1730的指令模板。图17B中的B类指令模板包括:1)在无存储器访问1705 的指令模板内,示出无存储器访问的写掩码控制的部分舍入控制型操作1712 的指令模板以及无存储器访问的写掩码控制的vsize型操作1717的指令模板;以及2)在存储器访问1720的指令模板内,示出存储器访问的写掩码控制1727 的指令模板。
通用向量友好指令格式1700包括以下列出的按照在图17A-17B中图示的顺序的如下字段。
格式字段1740——该字段中的特定值(指令格式标识符值)唯一地标识向量友好指令格式,并且由此标识指令在指令流中以向量友好指令格式出现。由此,该字段对于仅具有通用向量友好指令格式的指令集是不需要的,在这个意义上该字段是任选的。
基础操作字段1742——其内容区分不同的基础操作。
寄存器索引字段1744——其内容直接或者通过地址生成来指定源或目的地操作数在寄存器中或者在存储器中的位置。这些字段包括足够数量的位以从PxQ(例如,32x512、16x128、32x1024、64x1024)寄存器堆中选择N 个寄存器。尽管在一个实施例中N可多达三个源寄存器和一个目的地寄存器,但是替代实施例可支持更多或更少的源和目的地寄存器(例如,可支持多达两个源,其中这些源中的一个源还用作目的地;可支持多达三个源,其中这些源中的一个源还用作目的地;可支持多达两个源和一个目的地)。
修饰符(modifier)字段1746——其内容将指定存储器访问的以通用向量指令格式出现的指令与不指定存储器访问的以通用向量指令格式出现的指令区分开;即在无存储器访问1705的指令模板与存储器访问1720的指令模板之间进行区分。存储器访问操作读取和/或写入到存储器层次(在一些情况下,使用寄存器中的值来指定源和/或目的地地址),而非存储器访问操作不这样(例如,源和/或目的地是寄存器)。尽管在一个实施例中,该字段还在三种不同的方式之间选择以执行存储器地址计算,但是替代实施例可支持更多、更少或不同的方式来执行存储器地址计算。
扩充操作字段1750——其内容区分除基础操作以外还要执行各种不同操作中的哪一个操作。该字段是针对上下文的。在本发明的一个实施例中,该字段被分成类字段1768、α字段1752和β字段1754。扩充操作字段1750允许在单条指令而非2条、3条或4条指令中执行多组共同的操作。
比例字段1760——其内容允许用于存储器地址生成(例如,用于使用(2比例*索引+基址)的地址生成)的索引字段的内容的按比例缩放。
位移字段1762A——其内容用作存储器地址生成的一部分(例如,用于使用(2比例*索引+基址+位移)的地址生成)。
位移因数字段1762B(注意,位移字段1762A直接在位移因数字段 1762B上的并置指示使用一个或另一个)——其内容用作地址生成的一部分;它指定将按比例缩放存储器访问的尺寸(N)的位移因数——其中N是存储器访问中的字节数量(例如,用于使用(2比例*索引+基址+按比例缩放的位移) 的地址生成)。忽略冗余的低阶位,并且因此将位移因数字段的内容乘以存储器操作数总尺寸(N)以生成将在计算有效地址中使用的最终位移。N的值由处理器硬件在运行时基于完整操作码字段1774(稍后在本文中描述)和数据操纵字段1754C确定。位移字段1762A和位移因数字段1762B不用于无存储器访问1705的指令模板,和/或不同的实施例可实现这两者中的仅一个或不实现这两者中的任一个,在这个意义上,位移字段1762A和位移因数字段1762B是任选的。
数据元素宽度字段1764——其内容区分将使用多个数据元素宽度中的哪一个(在一些实施例中用于所有指令;在其他实施例中只用于指令中的一些指令)。如果支持仅一个数据元素宽度和/或使用操作码的某方面来支持数据元素宽度,则该字段是不需要的,在这个意义上,该字段是任选的。
写掩码字段1770——其内容逐数据元素位置地控制目的地向量操作数中的数据元素位置是否反映基础操作和扩充操作的结果。A类指令模板支持合并-写掩码,而B类指令模板支持合并-写掩码和归零-写掩码两者。当合并时,向量掩码允许在执行(由基础操作和扩充操作指定的)任何操作期间保护目的地中的任何元素集免于更新;在另一实施例中,保持其中对应掩码位具有 0的目的地的每一元素的旧值。相反,当归零时,向量掩码允许在执行(由基础操作和扩充操作指定的)任何操作期间使目的地中的任何元素集归零;在一个实施例中,目的地的元素在对应掩码位具有0值时被设为0。该功能的子集是控制正被执行的操作的向量长度的能力(即,从第一个到最后一个正被修改的元素的跨度),然而,被修改的元素不一定要是连续的。由此,写掩码字段1770允许部分向量操作,这包括加载、存储、算术、逻辑等。尽管描述了其中写掩码字段1770的内容选择了多个写掩码寄存器中的包含要使用的写掩码的一个写掩码寄存器(并且由此,写掩码字段1770的内容间接地标识要执行的掩码)的本发明的实施例,但是替代实施例替代地或附加地允许掩码写字段 1770的内容直接指定要执行的掩码。
立即数字段1772——其内容允许对立即数的指定。该字段在实现不支持立即数的通用向量友好格式中不存在且在不使用立即数的指令中不存在,在这个意义上,该字段是任选的。
类字段1768——其内容在不同类的指令之间进行区分。参考图 17A-图17B,该字段的内容在A类和B类指令之间进行选择。在图17A-图17B 中,圆角方形用于指示特定的值存在于字段中(例如,在图17A-图17B中分别用于类字段1768的A类1768A和B类1768B)。
A类指令模板
在A类非存储器访问1705的指令模板的情况下,α字段1752被解释为其内容区分要执行不同扩充操作类型中的哪一种(例如,针对无存储器访问的舍入型操作1710和无存储器访问的数据变换型操作1715的指令模板分别指定舍入1752A.1和数据变换1752A.2)的RS字段1752A,而β字段1754区分要执行所指定类型的操作中的哪一种。在无存储器访问1705的指令模板中,比例字段1760、位移字段1762A和位移比例字段1762B不存在。
无存储器访问的指令模板——完全舍入控制型操作
在无存储器访问的完全舍入控制型操作1710的指令模板中,β字段1754被解释为其(多个)内容提供静态舍入的舍入控制字段1754A。尽管在本发明的所述实施例中舍入控制字段1754A包括抑制所有浮点异常(SAE) 字段1756和舍入操作控制字段1758,但是替代实施例可支持这两个概念,可将这两个概念编码为同一字段,或仅具有这些概念/字段中的一个或另一个(例如,可仅具有舍入操作控制字段1758)。
SAE字段1756——其内容区分是否禁用异常事件报告;当SAE字段1756的内容指示启用抑制时,给定的指令不报告任何种类的浮点异常标志,并且不唤起任何浮点异常处置程序(handler)。
舍入操作控制字段1758——其内容区分要执行一组舍入操作中的哪一个(例如,向上舍入、向下舍入、向零舍入以及就近舍入)。由此,舍入操作控制字段1758允许逐指令地改变舍入模式。在其中处理器包括用于指定舍入模式的控制寄存器的本发明的一个实施例中,舍入操作控制字段1750的内容覆盖(override)该寄存器值。
无存储器访问的指令模板-数据变换型操作
在无存储器访问的数据变换型操作1715的指令模板中,β字段1754 被解释为数据变换字段1754B,其内容区分要执行多个数据变换中的哪一个(例如,无数据变换、混合、广播)。
在A类存储器访问1720的指令模板的情况下,α字段1752被解释为驱逐提示字段1752B,其内容区分要使用驱逐提示中的哪一个(在图17A中,对于存储器访问时效性1725的指令模板和存储器访问非时效性1730的指令模板分别指定时效性的1752B.1和非时效性的1752B.2),而β字段1754被解释为数据操纵字段1754C,其内容区分要执行多个数据操纵操作(也称为基元 (primitive))中的哪一个(例如,无操纵、广播、源的向上转换以及目的地的向下转换)。存储器访问1720的指令模板包括比例字段1760,并任选地包括位移字段1762A或位移比例字段1762B。
向量存储器指令使用转换支持来执行从存储器加载向量以及向存储器存储向量。如同寻常的向量指令,向量存储器指令以数据元素式的方式从 /向存储器传输数据,其中实际被传输的元素由被选为写掩码的向量掩码的内容规定。
存储器访问的指令模板——时效性的
时效性的数据是可能从高速缓存操作受益被足够快地被重新使用的数据。然而,这是提示,并且不同的处理器能以不同的方式实现它,包括完全忽略该提示。
存储器访问的指令模板——非时效性的
非时效性的数据是不太可能从第一级高速缓存中的高速缓存操作受益被足够快地被重新使用、且应当被给予驱逐优先级的数据。然而,这是提示,并且不同的处理器能以不同的方式实现它,包括完全忽略该提示。
B类指令模板
在B类指令模板的情况下,α字段1752被解释为写掩码控制(Z) 字段1752C,其内容区分由写掩码字段1770控制的写掩码应当是合并还是归零。
在B类非存储器访问1705的指令模板的情况下,β字段1754的一部分被解释为RL字段1757A,其内容区分要执行不同扩充操作类型中的哪一种(例如,针对无存储器访问、写掩码控制、部分舍入控制型操作1712的指令模板,和无存储器访问、写掩码控制、VSIZE型操作1717的指令模板分别指定舍入1757A.1和向量长度(VSIZE)1757A.2),而β字段1754的其余部分区分要执行所指定类型的操作中的哪一种。在无存储器访问1705的指令模板中,比例字段1760、位移字段1762A和位移比例字段1762B不存在。
在无存储器访问、写掩码控制、部分舍入控制型操作1712的指令模板中,β字段1754的其余部分被解释为舍入操作字段1759A,并且禁用异常事件报告(给定的指令不报告任何种类的浮点异常标志,并且不唤起任何浮点异常处置程序)。
舍入操作控制字段1759A——正如舍入操作控制字段1758,其内容区分要执行一组舍入操作中的哪一个(例如,向上舍入、向下舍入、向零舍入以及就近舍入)。由此,舍入操作控制字段1759A允许逐指令地改变舍入模式。在其中处理器包括用于指定舍入模式的控制寄存器的本发明的一个实施例中,舍入操作控制字段1750的内容覆盖该寄存器值。
在无存储器访问、写掩码控制、VSIZE型操作1717的指令模板中,β字段1754的其余部分被解释为向量长度字段1759B,其内容区分要执行多个数据向量长度中的哪一个(例如,128字节、256字节或512字节)。
在B类存储器访问1720的指令模板的情况下,β字段1754的一部分被解释为广播字段1757B,其内容区分是否要执行广播型数据操纵操作,而β字段1754的其余部分被解释为向量长度字段1759B。存储器访问1720的指令模板包括比例字段1760,并任选地包括位移字段1762A或位移比例字段 1762B。
针对通用向量友好指令格式1700,示出完整操作码字段1774包括格式字段1740、基础操作字段1742和数据元素宽度字段1764。尽管示出了其中完整操作码字段1774包括所有这些字段的一个实施例,但是在不支持所有这些字段的实施例中,完整操作码字段1774包括少于所有的这些字段。完整操作码字段1774提供操作代码(操作码)。
扩充操作字段1750、数据元素宽度字段1764和写掩码字段1770 允许逐指令地以通用向量友好指令格式指定这些特征。
写掩码字段和数据元素宽度字段的组合创建各种类型的指令,因为这些指令允许基于不同的数据元素宽度应用该掩码。
在A类和B类内出现的各种指令模板在不同的情形下是有益的。在本发明的一些实施例中,不同处理器或处理器内的不同核可支持仅A类、仅 B类、或者可支持这两类。举例而言,旨在用于通用计算的高性能通用乱序核可仅支持B类,旨在主要用于图形和/或科学(吞吐量)计算的核可仅支持A 类,并且旨在用于通用计算和图形和/或科学(吞吐量)计算两者的核可支持A 类和B类两者(当然,具有来自这两类的模板和指令的一些混合、但是并非来自这两类的所有模板和指令的核在本发明的范围内)。同样,单个处理器可包括多个核,这多个核全部都支持相同的类,或者其中不同的核支持不同的类。举例而言,在具有单独的图形核和通用核的处理器中,图形核中的旨在主要用于图形和/或科学计算的一个核可仅支持A类,而通用核中的一个或多个可以是具有旨在用于通用计算的仅支持B类的乱序执行和寄存器重命名的高性能通用核。不具有单独的图形核的另一处理器可包括既支持A类又支持B类的一个或多个通用有序或乱序核。当然,在本发明的不同实施例中,来自一类的特征也可在其他类中实现。将使以高级语言编写的程序成为(例如,及时编译或静态编译)各种不同的可执行形式,这些可执行形式包括:1)仅具有由用于执行的目标处理器支持的(多个)类的指令的形式;或者2)具有替代例程并具有控制流代码的形式,该替代例程使用所有类的指令的不同组合来编写,该控制流代码选择这些例程以基于由当前正在执行代码的处理器支持的指令来执行。
示例性专用向量友好指令格式
图18A是图示根据本发明的实施例的示例性专用向量友好指令格式的框图。图18A示出专用向量友好指令格式1800,其指定各字段的位置、尺寸、解释和次序、以及那些字段中的一些字段的值,在这个意义上,该专用向量友好指令格式1800是专用的。专用向量友好指令格式1800可用于扩展 x86指令集,并且由此字段中的一些字段与如在现有的x86指令集及其扩展(例如,AVX)中所使用的那些字段类似或相同。该格式保持与具有扩展的现有x86 指令集的前缀编码字段、实操作码字节字段、MOD R/M字段、SIB字段、位移字段和立即数字段一致。图示来自图17A-图17B的字段,来自图18A的字段映射到来自图17A-图17B的字段。
应当理解,虽然出于说明的目的在通用向量友好指令格式1700的上下文中参考专用向量友好指令格式1800描述了本发明的实施例,但是本发明不限于专用向量友好指令格式1800,除非另有声明。例如,通用向量友好指令格式1700构想了各种字段的各种可能的尺寸,而专用向量友好指令格式 1800示出为具有特定尺寸的字段。作为具体示例,尽管在专用向量友好指令格式1800中数据元素宽度字段1764被图示为一位字段,但是本发明不限于此 (即,通用向量友好指令格式1700构想数据元素宽度字段1764的其他尺寸)。
通用向量友好指令格式1700包括以下列出的按照图18A中图示的顺序的如下字段。
EVEX前缀(字节0-3)1802——以四字节形式进行编码。
格式字段1740(EVEX字节0,位[7:0])——第一字节(EVEX字节0)是格式字段1740,并且它包含0x62(在本发明的一个实施例中,为用于区分向量友好指令格式的唯一值)。
第二-第四字节(EVEX字节1-3)包括提供专用能力的多个位字段。
REX字段1805(EVEX字节1,位[7-5])——由EVEX.R位字段 (EVEX字节1,位[7]–R)、EVEX.X位字段(EVEX字节1,位[6]–X)以及 (EVEX.B字节1,位[5]–B)组成。EVEX.R、EVEX.X和EVEX.B位字段提供与对应的VEX位字段相同的功能,并且使用1补码的形式进行编码,即ZMM0被编码为1111B,ZMM15被编码为0000B。这些指令的其他字段对如在本领域中已知的寄存器索引的较低三个位(rrr、xxx和bbb)进行编码,由此可通过对EVEX.R、EVEX.X和EVEX.B相加来形成Rrrr、Xxxx和Bbbb。
REX’字段1710——这是REX’字段1710的第一部分,并且是用于对扩展的32个寄存器集合的较高16个或较低16个寄存器进行编码的EVEX.R’位字段(EVEX字节1,位[4]–R’)。在本发明的一个实施例中,该位与以下指示的其他位一起以位反转的格式存储以(在公知x86的32位模式下)与BOUND 指令进行区分,该BOUND指令的实操作码字节是62,但是在MODR/M字段 (在下文中描述)中不接受MOD字段中的值11;本发明的替代实施例不以反转的格式存储该指示的位以及以下其他指示的位。值1用于对较低16个寄存器进行编码。换句话说,通过组合EVEX.R’、EVEX.R以及来自其他字段的其他RRR来形成R’Rrrr。
操作码映射字段1815(EVEX字节1,位[3:0]–mmmm)——其内容对隐含的前导操作码字节(0F、0F 38或0F 3)进行编码。
数据元素宽度字段1764(EVEX字节2,位[7]–W)——由记号 EVEX.W表示。EVEX.W用于定义数据类型(32位数据元素或64位数据元素) 的粒度(尺寸)。
EVEX.vvvv 1820(EVEX字节2,位[6:3]-vvvv)——EVEX.vvvv的作用可包括如下:1)EVEX.vvvv对以反转(1补码)形式指定的第一源寄存器操作数进行编码,并且对具有两个或更多个源操作数的指令有效;2) EVEX.vvvv对针对特定向量位移以1补码的形式指定的目的地寄存器操作数进行编码;或者3)EVEX.vvvv不对任何操作数进行编码,该字段被预留,并且应当包含1111b。由此,EVEX.vvvv字段1820对以反转(1补码)的形式存储的第一源寄存器指定符的4个低阶位进行编码。取决于该指令,额外不同的 EVEX位字段用于将指定符尺寸扩展到32个寄存器。
EVEX.U 1768类字段(EVEX字节2,位[2]-U)——如果EVEX.U =0,则它指示A类或EVEX.U0;如果EVEX.U=1,则它指示B类或EVEX.U1。
前缀编码字段1825(EVEX字节2,位[1:0]-pp)——提供了用于基础操作字段的附加位。除了对以EVEX前缀格式的传统SSE指令提供支持以外,这也具有压缩SIMD前缀的益处(EVEX前缀仅需要2位,而不是需要字节来表达SIMD前缀)。在一个实施例中,为了支持使用以传统格式和以EVEX 前缀格式两者的SIMD前缀(66H、F2H、F3H)的传统SSE指令,将这些传统SIMD前缀编码成SIMD前缀编码字段;并且在运行时在被提供给解码器的 PLA之前被扩展成传统SIMD前缀(因此,在无需修改的情况下,PLA既可执行传统格式的这些传统指令又可执行EVEX格式的这些传统指令)。虽然较新的指令可将EVEX前缀编码字段的内容直接用作操作码扩展,但是为了一致性,特定实施例以类似的方式扩展,但允许由这些传统SIMD前缀指定的不同含义。替代实施例可重新设计PLA以支持2位SIMD前缀编码,并且由此不需要扩展。
α字段1752(EVEX字节3,位[7]–EH,也称为EVEX.EH、EVEX.rs、 EVEX.RL、EVEX.写掩码控制、以及EVEX.N;也以α图示)——如先前所述,该字段是针对上下文的。
β字段1754(EVEX字节3,位[6:4]-SSS,也称为EVEX.s2-0、 EVEX.r2-0、EVEX.rr1、EVEX.LL0、EVEX.LLB,还以βββ图示)——如前所述,此字段是针对上下文的。
REX’字段1710——这是REX’字段的其余部分,并且是可用于对扩展的32个寄存器集合的较高16个或较低16个寄存器进行编码的EVEX.V’位字段(EVEX字节3,位[3]–V’)。该位以位反转的格式存储。值1用于对较低16个寄存器进行编码。换句话说,通过组合EVEX.V’、EVEX.vvvv来形成 V’VVVV。
写掩码字段1770(EVEX字节3,位[2:0]-kkk)——其内容指定写掩码寄存器中的寄存器的索引,如先前所述。在本发明的一个实施例中,特定值EVEX.kkk=000具有暗示没有写掩码用于特定指令的特殊行为(这能以各种方式实现,包括使用硬连线到所有对象的写掩码或绕过掩码硬件的硬件来实现)。
实操作码字段1830(字节4)还被称为操作码字节。操作码的一部分在该字段中被指定。
MOD R/M字段1840(字节5)包括MOD字段1842、Reg字段1844 和R/M字段1846。如先前所述的,MOD字段1842的内容将存储器访问操作和非存储器访问操作区分开。Reg字段1844的作用可被归结为两种情形:对目的地寄存器操作数或源寄存器操作数进行编码;或者被视为操作码扩展,并且不用于对任何指令操作数进行编码。R/M字段1846的作用可包括如下:对引用存储器地址的指令操作数进行编码;或者对目的地寄存器操作数或源寄存器操作数进行编码。
比例、索引、基址(SIB)字节(字节6)——如先前所述的,比例字段1750的内容用于存储器地址生成。SIB.xxx 1854和SIB.bbb 1856——先前已经针对寄存器索引Xxxx和Bbbb提及了这些字段的内容。
位移字段1762A(字节7-10)——当MOD字段1842包含10时,字节7-10是位移字段1762A,并且它与传统32位位移(disp32)一样地工作,并且以字节粒度工作。
位移因数字段1762B(字节7)——当MOD字段1842包含01时,字节7是位移因数字段1762B。该字段的位置与以字节粒度工作的传统x86指令集8位位移(disp8)的位置相同。由于disp8是符号扩展的,因此它仅能在 -128和127字节偏移之间寻址;在64字节高速缓存行的方面,disp8使用可被设为仅四个真正有用的值-128、-64、0和64的8位;由于常常需要更大的范围,所以使用disp32;然而,disp32需要4个字节。与disp8和disp32对比,位移因数字段1762B是disp8的重新解释;当使用位移因数字段1762B时,通过将位移因数字段的内容乘以存储器操作数访问的尺寸(N)来确定实际位移。该类型的位移被称为disp8*N。这减小了平均指令长度(单个字节用于位移,但具有大得多的范围)。此类经压缩的位移基于有效位移是存储器访问的粒度的倍数的假设,并且由此地址偏移的冗余低阶位不需要被编码。换句话说,位移因数字段1762B替代传统x86指令集8位位移。由此,位移因数字段1762B 以与x86指令集8位位移相同的方式被编码(因此,在ModRM/SIB编码规则中没有变化),唯一的不同在于,将disp8超载至disp8*N。换句话说,在编码规则或编码长度方面没有变化,而仅在有硬件对位移值的解释方面有变化(这需要将位移按比例缩放存储器操作数的尺寸以获得字节式地址偏移)。立即数字段1772如先前所述地操作。
完整操作码字段
图18B是图示根据本发明的一个实施例的构成完整操作码字段 1774的具有专用向量友好指令格式1800的字段的框图。具体地,完整操作码字段1774包括格式字段1740、基础操作字段1742和数据元素宽度(W)字段 1764。基础操作字段1742包括前缀编码字段1825、操作码映射字段1815和实操作码字段1830。
寄存器索引字段
图18C是图示根据本发明的一个实施例的构成寄存器索引字段 1744的具有专用向量友好指令格式1800的字段的框图。具体地,寄存器索引字段1744包括REX字段1805、REX’字段1810、MODR/M.reg字段1844、 MODR/M.r/m字段1846、VVVV字段1820、xxx字段1854和bbb字段1856。
扩充操作字段
图18D是图示根据本发明的一个实施例的构成扩充操作字段1750 的具有专用向量友好指令格式1800的字段的框图。当类(U)字段1768包含 0时,它表明EVEX.U0(A类1768A);当它包含1时,它表明EVEX.U1(B 类1768B)。当U=0且MOD字段1842包含11(表明无存储器访问操作)时,α字段1752(EVEX字节3,位[7]–EH)被解释为rs字段1752A。当rs字段1752A包含1(舍入1752A.1)时,β字段1754(EVEX字节3,位[6:4]–SSS) 被解释为舍入控制字段1754A。舍入控制字段1754A包括一位SAE字段1756 和两位舍入操作字段1758。当rs字段1752A包含0(数据变换1752A.2)时,β字段1754(EVEX字节3,位[6:4]–SSS)被解释为三位数据变换字段1754B。当U=0且MOD字段1842包含00、01或10(表明存储器访问操作)时,α字段1752(EVEX字节3,位[7]–EH)被解释为驱逐提示(EH)字段1752B,并且β字段1754(EVEX字节3,位[6:4]–SSS)被解释为三位数据操纵字段1754C。
当U=1时,α字段1752(EVEX字节3,位[7]–EH)被解释为写掩码控制(Z)字段1752C。当U=1且MOD字段1842包含11(表明无存储器访问操作)时,β字段1754的一部分(EVEX字节3,位[4]–S0)被解释为RL 字段1757A;当它包含1(舍入1757A.1)时,β字段1754的其余部分(EVEX 字节3,位[6-5]–S2-1)被解释为舍入操作字段1759A,而当RL字段1757A包含0(VSIZE1757.A2)时,β字段1754的其余部分(EVEX字节3,位[6-5]- S2-1)被解释为向量长度字段1759B(EVEX字节3,位[6-5]–L1-0)。当U=1且 MOD字段1842包含00、01或10(表明存储器访问操作)时,β字段1754 (EVEX字节3,位[6:4]–SSS)被解释为向量长度字段1759B(EVEX字节3,位[6-5]–L1-0)和广播字段1757B(EVEX字节3,位[4]–B)。
示例性寄存器架构
图19是根据本发明的一个实施例的寄存器架构1900的框图。在所图示的实施例中,有32个512位宽的向量寄存器1910;这些寄存器被引用为 zmm0到zmm31。较低的16个zmm寄存器的较低阶256个位覆盖(overlay) 在寄存器ymm0-16上。较低的16个zmm寄存器的较低阶128个位(ymm寄存器的较低阶128个位)覆盖在寄存器xmm0-15上。专用向量友好指令格式 1800对这些被覆盖的寄存器堆操作,如在以下表格中所图示。
Figure BDA0003381716180000401
换句话说,向量长度字段1759B在最大长度与一个或多个其他较短长度之间进行选择,其中每一个此类较短长度是前一长度的一半,并且不具有向量长度字段1759B的指令模板在最大向量长度上操作。此外,在一个实施例中,专用向量友好指令格式1800的B类指令模板对紧缩或标量单/双精度浮点数据以及紧缩或标量整数数据操作。标量操作是对zmm/ymm/xmm寄存器中的最低阶数据元素位置执行的操作;取决于实施例,较高阶数据元素位置要么保持与在指令之前相同,要么归零。
写掩码寄存器1915——在所图示的实施例中,存在8个写掩码寄存器(k0至k7),每一写掩码寄存器的尺寸是64位。在替代实施例中,写掩码寄存器1915的尺寸是16位。如先前所述,在本发明的一个实施例中,向量掩码寄存器k0无法用作写掩码;当将正常指示k0的编码用作写掩码时,它选择硬连线的写掩码0xFFFF,从而有效地禁止写掩码用于那条指令。
通用寄存器1925——在所示出的实施例中,有十六个64位通用寄存器,这些寄存器与现有的x86寻址模式一起使用以对存储器操作数寻址。这些寄存器通过名称RAX、RBX、RCX、RDX、RBP、RSI、RDI、RSP以及R8 到R15来引用。
标量浮点栈寄存器堆(x87栈)1945,在其上面重叠了MMX紧缩整数平坦寄存器堆1950——在所图示的实施例中,x87栈是用于使用x87指令集扩展来对32/64/80位浮点数据执行标量浮点操作的八元素栈;而使用MMX 寄存器来对64位紧缩整数数据执行操作,以及为在MMX与XMM寄存器之间执行的一些操作保存操作数。
本发明的替代实施例可以使用更宽的或更窄的寄存器。另外,本发明的替代实施例可以使用更多、更少或不同的寄存器堆和寄存器。
示例性核架构、处理器和计算机架构
处理器核能以不同方式、出于不同的目的、在不同的处理器中实现。例如,此类核的实现可以包括:1)旨在用于通用计算的通用有序核;2)旨在用于通用计算的高性能通用乱序核;3)旨在主要用于图形和/或科学(吞吐量) 计算的专用核。不同处理器的实现可包括:1)CPU,其包括旨在用于通用计算的一个或多个通用有序核和/或旨在用于通用计算的一个或多个通用乱序核;以及2)协处理器,其包括旨在主要用于图形和/或科学(吞吐量)的一个或多个专用核。此类不同的处理器导致不同的计算机系统架构,这些计算机系统架构可包括:1)在与CPU分开的芯片上的协处理器;2)在与CPU相同的封装中但在分开的管芯上的协处理器;3)与CPU在相同管芯上的协处理器(在该情况下,此类协处理器有时被称为专用逻辑或被称为专用核,该专用逻辑诸如,集成图形和/或科学(吞吐量)逻辑);以及4)芯片上系统,其可以将所描述的CPU(有时被称为(多个)应用核或(多个)应用处理器)、以上描述的协处理器和附加功能包括在同一管芯上。接着描述示例性核架构,随后描述示例性处理器和计算机架构。
示例性核架构
有序和乱序核框图
图20A是图示根据本发明的各实施例的示例性有序流水线和示例性的寄存器重命名的乱序发布/执行流水线的框图。图20B是示出根据本发明的各实施例的要包括在处理器中的有序架构核的示例性实施例和示例性的寄存器重命名的乱序发布/执行架构核的框图。图20A-图20B中的实线框图示有序流水线和有序核,而虚线框的任选增加图示寄存器重命名的、乱序发布/执行流水线和核。考虑到有序方面是乱序方面的子集,将描述乱序方面。
在图20A中,处理器流水线2000包括取出级2002、长度解码级 2004、解码级2006、分配级2008、重命名级2010、调度(也被称为分派或发布)级2012、寄存器读取/存储器读取级2014、执行级2016、写回/存储器写入级2018、异常处置级2022和提交级2024。
图20B示出处理器核2090,该处理器核2090包括前端单元2030,该前端单元2030耦合至执行引擎单元2050,并且前端单元2030和执行引擎单元2050两者都耦合至存储器单元2070。核2090可以是精简指令集计算 (RISC)核、复杂指令集计算(CISC)核、超长指令字(VLIW)核、或混合或替代的核类型。作为又一选项,核2090可以是专用核,诸如例如,网络或通信核、压缩引擎、协处理器核、通用计算图形处理单元(GPGPU)核、图形核,等等。
前端单元2030包括分支预测单元2032,该分支预测单元2032耦合至指令高速缓存单元2034,该指令高速缓存单元2034耦合至指令转换后备缓冲器(TLB)2036,该指令转换后备缓冲器2036耦合至指令取出单元2038,该指令取出单元2038耦合至解码单元2040。解码单元2040(或解码器)可对指令解码,并且生成从原始指令解码出的、或以其他方式反映原始指令的、或从原始指令导出的一个或多个微操作、微代码进入点、微指令、其他指令、或其他控制信号作为输出。解码单元2040可使用各种不同的机制来实现。合适机制的示例包括但不限于,查找表、硬件实现、可编程逻辑阵列(PLA)、微代码只读存储器(ROM)等。在一个实施例中,核2090包括存储用于某些宏指令的微代码的微代码ROM或其他介质(例如,在解码单元2040中,或以其他方式在前端单元2030内)。解码单元2040耦合至执行引擎单元2050中的重命名/分配器单元2052。
执行引擎单元2050包括重命名/分配器单元2052,该重命名/分配器单元2052耦合至引退单元2054和一个或多个调度器单元的集合2056。(多个)调度器单元2056表示任何数量的不同调度器,包括预留站、中央指令窗等。(多个)调度器单元2056耦合至(多个)物理寄存器堆单元2058。(多个)物理寄存器堆单元2058中的每一个物理寄存器堆单元表示一个或多个物理寄存器堆,其中不同的物理寄存器堆存储一种或多种不同的数据类型,诸如,标量整数、标量浮点、紧缩整数、紧缩浮点、向量整数、向量浮点,状态(例如,作为要执行的下一条指令的地址的指令指针)等等。在一个实施例中,(多个)物理寄存器堆单元2058包括向量寄存器单元、写掩码寄存器单元和标量寄存器单元。这些寄存器单元可以提供架构向量寄存器、向量掩码寄存器和通用寄存器。(多个)物理寄存器堆单元2058由引退单元2054重叠,以图示可实现寄存器重命名和乱序执行的各种方式(例如,使用(多个)重排序缓冲器和(多个)引退寄存器堆;使用(多个)未来文件、(多个)历史缓冲器、(多个)引退寄存器堆;使用寄存器映射和寄存器池,等等)。引退单元2054和 (多个)物理寄存器堆单元2058耦合至(多个)执行集群2060。(多个)执行集群2060包括一个或多个执行单元的集合2062以及一个或多个存储器访问单元的集合2064。执行单元2062可执行各种操作(例如,移位、加法、减法、乘法)并可对各种数据类型(例如,标量浮点、紧缩整数、紧缩浮点、向量整数、向量浮点)执行。尽管一些实施例可以包括专用于特定功能或功能集合的多个执行单元,但是其他实施例可包括仅一个执行单元或全都执行所有功能的多个执行单元。(多个)调度器单元2056、(多个)物理寄存器堆单元2058和 (多个)执行集群2060示出为可能有多个,因为某些实施例为某些类型的数据/操作创建分开的流水线(例如,标量整数流水线、标量浮点/紧缩整数/紧缩浮点/向量整数/向量浮点流水线,和/或各自具有其自身的调度器单元、(多个) 物理寄存器堆单元和/或执行集群的存储器访问流水线——并且在分开的存储器访问流水线的情况下,实现其中仅该流水线的执行集群具有(多个)存储器访问单元2064的某些实施例)。还应当理解,在使用分开的流水线的情况下,这些流水线中的一个或多个可以是乱序发布/执行,并且其余流水线可以是有序的。
存储器访问单元的集合2064耦合至存储器单元2070,该存储器单元2070包括数据TLB单元2072,该数据TLB单元2072耦合至数据高速缓存单元2074,该数据高速缓存单元2074耦合至第二级(L2)高速缓存单元2076。在一个示例性实施例中,存储器访问单元2064可包括加载单元、存储地址单元和存储数据单元,其中的每一个均耦合至存储器单元2070中的数据TLB单元2072。指令高速缓存单元2034还耦合至存储器单元2070中的第二级(L2)高速缓存单元2076。L2高速缓存单元2076耦合至一个或多个其他级别的高速缓存,并最终耦合至主存储器。
作为示例,示例性寄存器重命名的乱序发布/执行核架构可如下所述地实现流水线2000:1)指令取出2038执行取出级2002和长度解码级2004; 2)解码单元2040执行解码级2006;3)重命名/分配器单元2052执行分配级 2008和重命名级2010;4)(多个)调度器单元2056执行调度级2012;5)(多个)物理寄存器堆单元2058和存储器单元2070执行寄存器读取/存储器读取级2014;执行集群2060执行执行级2016;6)存储器单元2070和(多个)物理寄存器堆单元2058执行写回/存储器写入级2018;7)各单元可牵涉到异常处置级2022;以及8)引退单元2054和(多个)物理寄存器堆单元2058执行提交级 2024。
核2090可支持一个或多个指令集(例如,x86指令集(具有已与较新版本一起添加的一些扩展);加利福尼亚州桑尼维尔市的MIPS技术公司的 MIPS指令集;加利福尼亚州桑尼维尔市的ARM控股公司的ARM指令集(具有诸如NEON的任选的附加扩展)),其中包括本文中描述的(多条)指令。在一个实施例中,核2090包括用于支持紧缩数据指令集扩展(例如,AVX1、 AVX2)的逻辑,由此允许使用紧缩数据来执行由许多多媒体应用使用的操作。
应当理解,核可支持多线程化(执行两个或更多个并行的操作或线程的集合),并且可以按各种方式来完成该多线程化,各种方式包括时分多线程化、同时多线程化(其中单个物理核为物理核正在同时多线程化的线程中的每一个线程提供逻辑核)、或其组合(例如,时分取出和解码以及此后的诸如
Figure BDA0003381716180000451
超线程化技术中的同时多线程化)。
尽管在乱序执行的上下文中描述了寄存器重命名,但应当理解,可以在有序架构中使用寄存器重命名。尽管所图示的处理器的实施例还包括分开的指令和数据高速缓存单元2034/2074以及共享的L2高速缓存单元2076,但是替代实施例可以具有用于指令和数据两者的单个内部高速缓存,诸如例如,第一级(L1)内部高速缓存或多个级别的内部高速缓存。在一些实施例中,该系统可包括内部高速缓存和在核和/或处理器外部的外部高速缓存的组合。或者,所有高速缓存都可以在核和/或处理器的外部。
具体的示例性有序核架构
图21A-图21B图示更具体的示例性有序核架构的框图,该核将是芯片中的若干逻辑块(包括相同类型和/或不同类型的其他核)中的一个逻辑块。取决于应用,逻辑块通过高带宽互连网络(例如,环形网络)与一些固定的功能逻辑、存储器I/O接口和其他必要的I/O逻辑进行通信。
图21A是根据本发明的实施例的单个处理器核以及它至管芯上互连网络2102的连接及其第二级(L2)高速缓存的本地子集2104的框图。在一个实施例中,指令解码器2100支持具有紧缩数据指令集扩展的x86指令集。L1 高速缓存2106允许对进入标量和向量单元中的、对高速缓存存储器的低等待时间访问。尽管在一个实施例中(为了简化设计),标量单元2108和向量单元 2110使用分开的寄存器集合(分别为标量寄存器2112和向量寄存器2114),并且在这些寄存器之间传输的数据被写入到存储器,并随后从第一级(L1)高速缓存2106读回,但是本发明的替代实施例可以使用不同的方法(例如,使用单个寄存器集合或包括允许数据在这两个寄存器堆之间传输而无需被写入和读回的通信路径)。
L2高速缓存的本地子集2104是全局L2高速缓存的一部分,该全局L2高速缓存被划分成多个分开的本地子集,每个处理器核一个本地子集。每个处理器核具有到其自身的L2高速缓存的本地子集2104的直接访问路径。由处理器核读取的数据被存储在其L2高速缓存子集2104中,并且可以与其他处理器核访问其自身的本地L2高速缓存子集并行地被快速访问。由处理器核写入的数据被存储在其自身的L2高速缓存子集2104中,并在必要的情况下从其他子集转储清除。环形网络确保共享数据的一致性。环形网络是双向的,以允许诸如处理器核、L2高速缓存和其他逻辑块之类的代理在芯片内彼此通信。每个环形数据路径为每个方向1012位宽。
图21B是根据本发明的实施例的图21A中的处理器核的一部分的展开图。图21B包括L1高速缓存2104的L1数据高速缓存2106A部分,以及关于向量单元2110和向量寄存器2114的更多细节。具体地,向量单元2110 是16宽向量处理单元(VPU)(见16宽ALU 2128),该单元执行整数、单精度浮点以及双精度浮点指令中的一个或多个。该VPU通过混合单元2120支持对寄存器输入的混合,通过数值转换单元2122A-B支持数值转换,并且通过复制单元2124支持对存储器输入的复制。写掩码寄存器2126允许掩蔽所得的向量写入。
图22是根据本发明的实施例的可具有多于一个的核、可具有集成存储器控制器、以及可具有集成图形器件的处理器2200的框图。图22中的实线框图示具有单个核2202A、系统代理2210、一个或多个总线控制器单元的集合2216的处理器2200,而虚线框的任选增加图示具有多个核2202A-N、系统代理单元2210中的一个或多个集成存储器控制器单元的集合2214以及专用逻辑2208的替代处理器2200。
因此,处理器2200的不同实现可包括:1)CPU,其中专用逻辑2208 是集成图形和/或科学(吞吐量)逻辑(其可包括一个或多个核),并且核2202A- N是一个或多个通用核(例如,通用有序核、通用乱序核、这两者的组合); 2)协处理器,其中核2202A-N是旨在主要用于图形和/或科学(吞吐量)的大量专用核;以及3)协处理器,其中核2202A-N是大量通用有序核。因此,处理器 2200可以是通用处理器、协处理器或专用处理器,诸如例如,网络或通信处理器、压缩引擎、图形处理器、GPGPU(通用图形处理单元)、高吞吐量的集成众核(MIC)协处理器(包括30个或更多核)、嵌入式处理器,等等。该处理器可以被实现在一个或多个芯片上。处理器2200可以是一个或多个基板的一部分,和/或可使用多种工艺技术(诸如例如,BiCMOS、CMOS、或NMOS) 中的任何技术被实现在一个或多个基板上。
存储器层次结构包括核内的一个或多个级别的高速缓存、一个或多个共享高速缓存单元的集合2206、以及耦合至集成存储器控制器单元的集合 2214的外部存储器(未示出)。共享高速缓存单元的集合2206可包括一个或多个中间级别的高速缓存,诸如,第二级(L2)、第三级(L3)、第四级(L4) 或其他级别的高速缓存、末级高速缓存(LLC)和/或以上各项的组合。虽然在一个实施例中,基于环的互连单元2212将集成图形逻辑2208、共享高速缓存单元的集合2206以及系统代理单元2210/(多个)集成存储器控制器单元2214 互连,但是替代实施例可使用任何数量的公知技术来互连此类单元。在一个实施例中,在一个或多个高速缓存单元2206与核2202A-N之间维持一致性。
在一些实施例中,一个或多个核2202A-N能够实现多线程化。系统代理2210包括协调和操作核2202A-N的那些部件。系统代理单元2210可包括例如功率控制单元(PCU)和显示单元。PCU可以是对核2202A-N以及集成图形逻辑2208的功率状态进行调节所需的逻辑和部件,或可包括这些逻辑和部件。显示单元用于驱动一个或多个外部连接的显示器。
核2202A-N在架构指令集方面可以是同构的或异构的;即,核 2202A-N中的两个或更多个核可能能够执行相同的指令集,而其他核可能能够执行该指令集的仅仅子集或不同的指令集。
示例性计算机架构
图23-图24是示例性计算机架构的框图。本领域中已知的对膝上型设备、台式机、手持PC、个人数字助理、工程工作站、服务器、网络设备、网络集线器、交换机、嵌入式处理器、数字信号处理器(DSP)、图形设备、视频游戏设备、机顶盒、微控制器、蜂窝电话、便携式媒体播放器、手持设备以及各种其他电子设备的其他系统设计和配置也是合适的。一般地,能够包含如本文中所公开的处理器和/或其他执行逻辑的各种各样的系统或电子设备一般都是合适的。
现在参考图23,所示出的是根据本发明一个实施例的系统2300的框图。系统2300可以包括一个或多个处理器2310、2315,这些处理器耦合至控制器中枢2320。在一个实施例中,控制器中枢2320包括图形存储器控制器中枢(GMCH)2390和输入/输出中枢(IOH)2350(其可以在分开的芯片上); GMCH 2390包括存储器和图形控制器,存储器2340和协处理器2345耦合至该存储器和图形控制器;IOH 2350将输入/输出(I/O)设备2360耦合至GMCH2390。或者,存储器和图形控制器中的一个或这两者被集成在(如本文中所描述的)处理器内,存储器2340和协处理器2345直接耦合至处理器2310,并且控制器中枢2320与IOH 2350处于单个芯片中。
附加的处理器2315的任选性在图23中通过虚线来表示。每一处理器2310、2315可包括本文中描述的处理核中的一个或多个,并且可以是处理器2200的某一版本。
存储器2340可以是例如动态随机存取存储器(DRAM)、相变存储器(PCM)或这两者的组合。对于至少一个实施例,控制器中枢2320经由诸如前端总线(FSB)之类的多分支总线、诸如快速路径互连(QPI)之类的点对点接口、或者类似的连接2395来与(多个)处理器2310、2315进行通信。
在一个实施例中,协处理器2345是专用处理器,诸如例如,高吞吐量MIC处理器、网络或通信处理器、压缩引擎、图形处理器、GPGPU、嵌入式处理器,等等。在一个实施例中,控制器中枢2320可以包括集成图形加速器。
在物理资源2310、2315之间可以存在包括架构、微架构、热、功耗特性等一系列品质度量方面的各种差异。
在一个实施例中,处理器2310执行控制一般类型的数据处理操作的指令。嵌入在这些指令内的可以是协处理器指令。处理器2310将这些协处理器指令识别为具有应当由附连的协处理器2345执行的类型。因此,处理器 2310在协处理器总线或者其他互连上将这些协处理器指令(或者表示协处理器指令的控制信号)发布到协处理器2345。(多个)协处理器2345接受并执行所接收的协处理器指令。
现在参见图24,所示出的是根据本发明的实施例的SoC 2400的框图。图22中类似的元件使用类似的附图标记。另外,虚线框是更先进的SoC 上的任选的特征。在图24中,(多个)互连单元2402被耦合至:应用处理器 2410,其包括一个或多个核的集合202A-N的集合以及(多个)共享高速缓存单元2206;系统代理单元2210;(多个)总线控制器单元2216;(多个)集成存储器控制器单元2214;一个或多个协处理器的集合2420,其可包括集成图形逻辑、图像处理器、音频处理器和视频处理器;静态随机存取存储器(SRAM) 单元2430;直接存储器访问(DMA)单元2432;以及用于耦合至一个或多个外部显示器的显示单元2440。在一个实施例中,(多个)协处理器2420包括专用处理器,诸如例如,网络或通信处理器、压缩引擎、GPGPU、高吞吐量MIC 处理器、或嵌入式处理器,等等。
本文公开的机制的各实施例可以被实现在硬件、软件、固件或此类实现方式的组合中。本发明的实施例可实现为在可编程系统上执行的计算机程序或程序代码,该可编程系统包括至少一个处理器、存储系统(包括易失性和非易失性存储器和/或存储元件)、至少一个输入设备以及至少一个输出设备。
可将程序代码应用于输入指令,以执行本文中描述的功能并生成输出信息。可以按已知方式将输出信息应用于一个或多个输出设备。为了本申请的目的,处理系统包括具有处理器的任何系统,该处理器诸如例如,数字信号处理器(DSP)、微控制器、专用集成电路(ASIC)或微处理器。
程序代码可以用高级的面向过程的编程语言或面向对象的编程语言来实现,以便与处理系统通信。如果需要,也可用汇编语言或机器语言来实现程序代码。事实上,本文中描述的机制不限于任何特定的编程语言的范围。在任何情况下,该语言可以是编译语言或解释语言。
至少一个实施例的一个或多个方面可以由存储在机器可读介质上的表示性指令来实现,该指令表示处理器中的各种逻辑,该指令在被机器读取时使得该机器制造用于执行本文中所述的技术的逻辑。被称为“IP核”的此类表示可以被存储在有形的机器可读介质上,并可被供应给各个客户或制造机构以加载到实际制造该逻辑或处理器的制造机器中。
此类机器可读存储介质可以包括但不限于通过机器或设备制造或形成的制品的非暂态、有形布置,其包括存储介质,诸如硬盘;任何其他类型的盘,包括软盘、光盘、紧致盘只读存储器(CD-ROM)、可重写紧致盘(CD-RW) 以及磁光盘;半导体器件,诸如,只读存储器(ROM)、诸如动态随机存取存储器(DRAM)和静态随机存取存储器(SRAM)的随机存取存储器(RAM)、可擦除可编程只读存储器(EPROM)、闪存、电可擦除可编程只读存储器(EEPROM);相变存储器(PCM);磁卡或光卡;或适于存储电子指令的任何其他类型的介质。
因此,本发明的实施例还包括非暂态的有形机器可读介质,该介质包含指令或包含设计数据,诸如硬件描述语言(HDL),它定义本文中描述的结构、电路、装置、处理器和/或系统特征。这些实施例也被称为程序产品。
图25是根据本发明的实施例的对照使用软件指令转换器将源指令集中的二进制指令转换成目标指令集中的二进制指令的框图。在所图示的实施例中,指令转换器是软件指令转换器,但替代地,该指令转换器可以用软件、固件、硬件或其各种组合来实现。图25示出可使用x86编译器 2504来编译高级语言2502形式的程序,以生成可由具有至少一个x86指令集核的处理器2516原生执行的x86二进制代码2506。具有至少一个x86 指令集核的处理器2516表示通过兼容地执行或以其他方式处理以下各项来执行与具有至少一个x86指令集核的英特尔处理器基本相同的功能的任何处理器:1)英特尔x86指令集核的指令集的实质部分,或2)目标为在具有至少一个x86指令集核的英特尔处理器上运行以便取得与具有至少一个 x86指令集核的英特尔处理器基本相同的结果的应用或其他软件的目标代码版本。x86编译器2504表示可操作用于生成x86二进制代码2506(例如,目标代码)的编译器,该二进制代码可通过或不通过附加的链接处理在具有至少一个x86指令集核的处理器2516上执行。类似地,图25示出可以使用替代的指令集编译器2508来编译高级语言2502形式的程序,以生成可以由不具有至少一个x86指令集核的处理器2514(例如,具有执行加利福尼亚州桑尼维尔市的MIPS技术公司的MIPS指令集、和/或执行加利福尼亚州桑尼维尔市的ARM控股公司的ARM指令集的核的处理器)原生执行的替代的指令集二进制代码2510。指令转换器2512用于将x86二进制代码2506转换成可以由不具有x86指令集核的处理器2514原生执行的代码。该转换后的代码不大可能与替代的指令集二进制代码2510相同,因为能够这样做的指令转换器难以制造;然而,转换后的代码将完成一般操作,并且由来自替代指令集的指令构成。因此,指令转换器2512通过仿真、模拟或任何其他过程来表示允许不具有x86指令集处理器或核的处理器或其他电子设备执行x86二进制代码2506的软件、固件、硬件或其组合。
用于代码预取的指令和逻辑
图26-示例计算系统
现在参考图26,所示出的是根据一个或多个实施例的计算系统 2600的框图。在一些实施例中,系统2600可以是电子设备或组件的全部或部分。例如,系统2600可以是蜂窝电话、计算机、服务器、网络设备、芯片上系统(SoC)、控制器、无线收发机、电源单元等。此外,在一些实施例中,系统2600可以是诸如数据中心、计算集群等之类的相关或经互连设备的群组的部分。
如图26中所示,系统2600可包括处理器2610、存储器2640和存储2670。进一步地,虽然未在图26中示出,但系统2600可包括其他组件。在一个或多个实施例中,存储器2640可以利用任何(多种)类型的计算机存储器(例如,动态随机存取存储器(DRAM)、静态随机存取存储器(SRAM)、非易失性存储器(NVM)、DRAM和NVM的组合等)来实现。存储2670可以使用任何(多个)持久性(例如,非易失性)存储设备来实现,该(多个) 持久性存储设备诸如(多个)基于盘的存储设备(例如,(多个)硬盘驱动器 (HDD))、(多个)固态设备(SSD)(例如,闪存设备)、光盘等等。
在一个或多个实施例中,处理器2610可以是硬件处理设备(例如,中央处理单元(CPU)、芯片上系统(SoC)等等)。如所示,处理器2610 可以包括任何数量的处理引擎2620A-2620N(也统称为处理引擎2620)。每个处理引擎2620可包括代码预取逻辑2630。代码预取逻辑2630可被实现在处理引擎2620和/或处理器2610的电路系统和/或微架构中。例如,在一些实施例中,代码预取逻辑2630可被实现在处理引擎2620和/或处理器2610的存储器单元和/或性能监视单元(PMU)中。
在一个或多个实施例中,代码预取逻辑2630可包括执行指令集架构(ISA)中定义的代码预取(CP)指令的功能。在一些实施例中,单条CP 指令可被执行以将多个代码块集合预取到不同级别处的多个高速缓存中。例如,代码预取逻辑2630可执行CP指令,以将第一代码块集合加载到第一高速缓存(例如,L1高速缓存)中,并且还将第二代码块集合加载到第二高速缓存(例如,L2高速缓存)中。随后,处理引擎2620可以通过访问第一高速缓存中的第一代码块集合同时还访问来自第二高速缓存的第二代码块集合来开始执行代码函数。以此方式,处理引擎2620可以开始执行代码函数而不被延迟与访问来自第二高速缓存的第二代码块集合相关联的等待时间时段。相应地,使用 CP指令可减少处理引擎2620空闲的时间段,并且由此可改善处理引擎2620 的效率和/或性能。
在一些实施例中,代码预取逻辑2630可包括用于跟踪CP指令的执行的性能监视电路系统。例如,性能监视电路系统可收集并存储指示每条 CP指令是引起第一高速缓存中的命中、第二高速缓存中的命中、还是这两个高速缓存中的未命中的信息。在一些实施例中,所收集的性能信息可用于调整或调谐CP指令的参数,并且由此改善CP指令的性能收益与负面效果之间的平衡。下文参考图27-图32进一步描述了代码预取逻辑2630的各种细节。
图27–示例预取操作
现在参考图27,所示出的是根据一个或多个实施例的示例预取操作2700。可使用各种硬件组件来执行示例操作2700,这些硬件组件包括取出单元2720、解码单元2730、存储器单元2740、(多个)执行单元2750、第一级(L1)高速缓存单元2760、以及第二级(L2)高速缓存2770。在一些实施例中,图27中所示出的硬件组件中的一些或全部可被包括在单个执行引擎 (例如,图26中所示出的处理引擎2620)中,或者被包括在单个处理器设备 (例如,图26中示出的处理器2610)中。
在一个或多个实施例中,相比于L2高速缓存2770,L1高速缓存2760可能相对较小(即,具有较小的存储器容量)。此外,相比于L2高速缓存2770,在高速缓存层次结构中L1高速缓存2760可能更高。例如,(多个)执行单元2750可相对迅速地访问L1高速缓存2760,并且可相对缓慢地访问L2高速缓存2770。相应地,访问L1高速缓存2760的等待时间时段可小于访问L2高速缓存2770的等待时间时段。此外,相比于L2高速缓存2770中所使用的存储器,L1高速缓存2760中所使用的存储器可相对更贵/价值更高。在一些实施例中,存储器单元2740可执行存储器指令(例如,加载指令、存储指令等等)。(多个)执行单元2750可包括例如,浮点执行单元、整数执行单元等等。
如图27中所示,操作2700可包括:取出单元2720(在本文中也被称为“取出电路2720”)取出使用X、Y和目标(target)操作数的代码取出 (CP)指令2710。目标操作数可指定开始预取代码块的起始地址。X操作数 (在本文中也被称为“第一高速缓存操作数”)可指定从目标起始地址开始预取的第一集合中的代码块(例如,高速缓存行或其他单元)的数量。Y操作数(在本文中也被称为“第二高速缓存操作数”)可指定在紧接在第一集合的结束之后的点处开始预取的第二集合中的代码块的数量。第一代码块集合和第二代码块集合可以是程序代码的、与特定函数(或函数的集合)相对应的连续部分。在一些实施例中,CP指令2710、第一代码块集合和第二代码块集合可全部被包括在正在由处理器和/或处理引擎执行的特定应用程序中(或与该应用程序相关联)。
如图27中所示,可由解码单元2730(在本文中也被称为“解码电路2730”)对CP指令2710进行解码。此外,可由存储器单元2740(在本文中也被称为“存储器电路2740”)来执行经解码的CP指令2710。经解码的CP 指令2710的单次执行可使得第一数量X的代码块(即,从目标地址开始预取的第一代码块集合,如由第一高速缓存操作数所指定)被加载到L1高速缓存 2760中。此外,经解码的CP指令2710的单次执行还可使得第二数量Y的代码块(即,跟随第一代码块集合的第二代码块集合,如由第二高速缓存操作数所指定)被加载到L2高速缓存2770中。
在一些实施例中,第一集合(即,X个代码块)和第二集合(即, Y个代码块)可以是程序代码的、与应用程序的特定函数(或函数的集合)相关联的部分。此外,在程序代码中,第二代码块集合可紧跟在第一代码块集合之后。在应用程序需要执行特定函数的情况下,(多个)执行单元2750最初可接收并执行L1高速缓存2760中的第一代码块集合,并且随后可接收并执行 L2高速缓存2770中的第二代码块集合。
在一些实施例中,可选择第一高速缓存操作数的参数X来减少或消除(多个)执行单元2750空闲的时间量,同时等待第二代码块集合从L2 高速缓存行2770被访问。例如,参数X可被设置为足以覆盖访问L2高速缓存2770的等待时间时段的所执行的代码块的最小数量。以此方式,相较于不使用预取或将所有代码块均预取至L2高速缓存2770,使用CP指令2710可改善程序执行的性能。此外,在不执行特定函数的情况下,所预取的代码块的仅相对小的子集(即,仅X个代码块)被加载到L1高速缓存2760中。相应地,相较于一些常规技术(例如,将所有所预取的代码块存储在L1高速缓存2760 中),将不需要的代码块预取到相对较昂贵的L1高速缓存2760中的成本和/ 或性能损失可降低。
在一些实施例中,指令集架构(ISA)可包括CP指令的多种变型或类型。例如,CP指令的静态变型可将X和Y操作数(即,第一和第二高速缓存操作数)指定为CP指令自身中所包括(即,如被编写在程序代码中) 的显式值,由此允许以各CP指令的粒度的编译时专门化。目标操作数可被指定为寄存器位置,被指定为寄存器位置和偏移值(例如,被编码为立即数)的组合,被指定为对当前程序计数器的偏移,等等。
此外,CP指令的动态变型可在运行时通过从目标地址取得未被使用的位来计算X和Y操作数。例如,给定具有64B高速缓存块粒度的目标地址,底部的6个位可以是未被使用的。相应地,未被使用的位可以被用于各自使用3位、使用任何合适的编码或映射(例如,线性编码、log2编码等)来对X和Y操作数进行编码。动态变型可允许对预取距离的动态运行时适应。此外,CP指令的全局变型可以不将预取距离编码在指令中,而是从全局配置寄存器(例如,用于全局变型的所有CP指令的寄存器)读取X和Y操作数。
注意,尽管图27图示出示例实施例,但是其他变型是可能的。例如,构想了CP指令2710可由(多个)执行单元2750中的一个或多个来执行。此外,构想了执行CP指令可使得三个或更多个代码块集合被加载到三个或更多个高速缓存单元中。此外,构想了执行CP指令可将代码块加载到级别不同于L1和L2的高速缓存中(例如,加载到L2和L3中、加载到L1和L3中、或加载到任何其他高速缓存级别组合中)。
图28-示例预取系统
现在参考图28,所示出的是根据一个或多个实施例的示例处理系统2800。处理系统2800总体上可对应于图26中示出的处理引擎2620中所包括的各种组件的示例实现方式。如所示,处理系统2800可包括指令取出单元(IFU)2810、分支目标缓冲器(BTB)2805、第一级指令转换后备缓冲器 (“L1 I-TLB”)2820、第一级指令高速缓存(“L1指令高速缓存”)2825、经解码流缓冲器2828、指令队列2830、解码单元2840、经解码指令队列2850、分配器2860、重排序缓冲器2865、执行单元2870、存储器单元2880、第一级数据高速缓存(“L1数据高速缓存”)2882、第一级数据转换后备缓冲器(“L1 D- TLB”)2884、第二级高速缓存(“L2高速缓存”)2886、第二级转换后备缓冲器 (“L2 TLB”)2888、以及性能监视单元(PMU)2890(在本文中也被称为“性能监视电路2890”)。
在正常操作(例如,乱序处理)期间,IFU 2810可基于线性地址流或来自BTB 2805的输入在预测到控制流改变时生成代码取出。这些代码取出正常情况下穿过包括以下各项的代码路径:L1 I-TLB 2820、L1指令高速缓存2825、经解码流缓冲器2828、指令队列2830、解码单元2840、以及经解码指令队列2850。代码取出可被分配器2860分配到重排序缓冲器2865中,并且可由执行单元2870和/或存储器单元2880执行。
当执行CP指令时,使用上文所描述的用于代码取出的代码路径,直到到达重排序缓冲器2865。从重排序缓冲器2865,CP指令被发送至存储器单元2880以供执行。存储器单元2880执行CP指令使得从目标地址开始的X个连续代码块被注入到L1 I-TLB 2820和/或L1指令高速缓存2825中。此外,CP指令的同一执行使得存储器单元2880向存储器子系统发出针对跟随的Y个代码块(即,在程序中紧跟在X个代码块之后的Y个代码块)的访问。
在一些实施例中,如果针对正常数据预取存在高速缓存未命中,则数据可被分配到L1数据高速缓存2882和L1 D-TLB 2884中,并且也被分配到L2高速缓存2886和L2 TLB2888中。相比之下,如果存在针对由CP指令预取的Y个代码块的高速缓存未命中,则这Y个代码块(例如,以与正常加载指令或数据预取操作类似的方式)被分配在L2高速缓存2886和L2TLB 2888中,而并非被分配在L1数据高速缓存2882中和在L1 D-TLB 2884中。
在一个或多个实施例中,被注入到L1 I-TLB 2820和/或L1指令高速缓存2825中的X个代码块可被标记为允许来自常规代码取出的不同处置。例如,存储器单元2880可用指示X个代码块中的每个代码块被CP指令预取的标志或位(在本文中被称为“预取标签”)标记该代码块。随后,处理系统2800 的一个或多个组件可检测由CP指令预取的代码块中所包括的预取标签,并且可根据检测到的预取标签来处理这些代码块。
在一些实施例中,L1 I-TLB 2820和/或L1指令高速缓存2825可包括用于处置所标记的X个代码块的专用端口,由此避免消耗可以用于常规代码取出的带宽。此外,在一些实施例中,何时处置所标记的X个代码块的未命中的优先级可被降低,或者在任何流水线级处遇到满缓冲器停止时,所标记的 X个代码块可以被丢弃。当所标记的X个代码块穿过流水线时,所标记的X个代码块可被查找,并且被潜在地分配到L1 I-TLB 2820和/或L1指令高速缓存 2825中。在该时间点,所标记的X个代码块的有用工作(即,预取到L1 I-TLB 2820和/或L1指令高速缓存2825中)完成,因此在该时间点后,这X个代码块可以被丢弃。任选地,在一些实施例中,所标记的X个代码块可以被允许继续通过解码单元2840和经解码流缓冲器2828,但是可在进入经解码指令队列 2850和重排序缓冲器2865之前被丢弃以避免与常规指令混合。
在一些实施例中,性能监视单元(PMU)可包括获得并收集与由处理系统2800执行的CP指令的性能有关的信息的功能。例如,在执行CP 指令时,存储器单元2880可将与CP指令有关的信息发送至PMU 2890。PMU 2890可将该信息存储在包括与CP指令相对应的多个条目的数据结构中。由 PMU 2890使用的数据结构的示例在下文参考图29进行描述。
在一些实施例中,PMU 2890可基于从处理系统2800的其他组件(例如,L1指令高速缓存2825、L2高速缓存2886、IFU 2810、经解码指令队列2850等等)接收的通知来更新数据结构。例如,PMU 2890可更新数据结构条目,以指示所预取的代码块中的每个代码块是在L1指令高速缓存2825中命中、在L2高速缓存2886中命中、还是在这两者中均未命中。在另一示例中, PMU 2890可更新数据结构条目,以指示在所预取的代码块中的任何代码块的执行期间经解码指令队列2850是否变为空。在又一示例中,经解码指令队列2850可向PMU 2890发送指示该经解码指令队列2850是否为空的通知。使用此类通知,PMU 2890可获得对有用的代码取出流的可见性,并且可对每条CP 指令的数据结构条目进行注释,以指示X个代码块的第一集合和/或Y个代码块的第二集合是否有用(例如,无用的预取将始终无法看到针对该行作出IFU 请求)。此外,PMU 2890可对每个数据结构条目进行注释,以指示每条CP指令的等待时间影响。例如,对于其中经解码指令队列2850为空的每个时间段,处理系统2800的后端被停止。相应地,在此类情况下,可确定增加被预取在 L1指令高速缓存2825中的代码块的数量X,并且由此减少相关联的等待时间。然而,一旦经解码指令队列2850不再为空,就可确定减少被预取在L1指令高速缓存2825中的代码块的数量X。
图29–示例数据结构
现在参考图29,所示出的是根据一些实施例的示例数据结构 2900。在一些示例中,可由PMU 2890(在图28中示出)生成并更新数据结构 2900。此外,在一些示例中,可将数据结构2900存储在存储器或持久性存储中。
如图29中所示,数据结构2900可包括与近期的CP指令相对应的任何数量的条目(在本文中被称为“CP指令条目”)。在一些实施例中,响应于特定CP指令的执行,可向数据结构2900添加特定的条目。此外,响应于完成对由特定CP指令预取的代码块的执行,可从数据结构2900移除该特定的条目。可选择数据结构2900中所允许的条目数量,以允许完成对典型数量的CP指令(例如,在任何给定的时间点已经被执行并且仍具有未执行的所预取的代码块的预期数量的CP指令)的跟踪。在一些实施例中,可按需要将数据结构2900的条目重新分配给新的条目(例如,使用轮循替换)。
如图29中所示,在一些实施例中,数据结构2900的每个条目可包括CP指令标识符2910、目标字段2920、X值2930、Y值2940、访问字段2950、停止字段2960、以及L2未命中字段2970。例如,CP指令标识符2910 可以是针对CP指令的唯一程序指针或程序计数器,并且目标字段2920可指示CP指令的目标地址。X值2930可存储被预取到L1指令高速缓存中的代码块的数量X(即,第一高速缓存操作数),并且Y值2940可相应地存储被预取到L2高速缓存中的代码块的数量Y(即,第二高速缓存操作数)。
在一些示例中,访问字段2950存储指示哪些所预取的代码块在执行期间被取出的数据。停止字段2960可存储指示当经解码队列(例如,图 28中示出的经解码指令队列2850)为空时哪些所预取的代码块在L1指令高速缓存中未命中的数据。L2未命中字段2970可存储指示哪些所预取的代码块在 L2高速缓存中未命中的数据。在一些实施例中,访问字段2950、停止字段2960 和L2未命中字段2970可以以位掩码的形式存储其相应的数据,其中每个位与由CP指令预取的不同代码块相对应,
在一个或多个实施例中,性能监视单元(例如,图28中所示出的PMU 2890)可提供对数据结构2900的访问,以用于对CP指令进行报告或分析。此类通知可指示与CP指令相关联的性能特性。例如,每当针对CP指令的条目从数据结构2900被驱逐时(例如,当针对该CP指令的所有所预取的代码块均已被执行时),可使该条目的内容可用于由软件使用。此外,可基于周期性排程或基于在特定条件被满足时生成的中断而使整个数据结构2900对于软件而言可用。此外,可基于调度或在特定条件被满足时将数据结构2900的条目写入到专用的存储器缓冲器。此类条件可以包括简单随机采样、均匀采样、或排除特定类型的条目(例如,L2未命中字段2970中具有异常大的数字的条目、其中访问字段2950具有超出X值2930的数量的零位的条目、其中访问字段2950具有小于X值2930和Y值2940的和的数量的非零位的条目,等等) 的过滤规则。
在一些实施例中,提供自数据结构2900的信息可用于调谐或调整各CP指令。例如,X值2930、Y值2940、访问字段2950、停止字段2960 和/或L2未命中字段2970可用于确定预取的代码块实际上是否被执行、以及是否发生停止或延迟。基于该信息,软件(例如,分析应用、编译器等)可调整X和Y参数,以平衡性能改善(例如,通过减少等待时间)与预取过多不被执行的代码块的潜在成本。以此方式,CP指令的性能可持续地被监视,并且可基于最新近的执行动态地被调整。
图30–示例方法
现在参考图30,所示出的是根据一个或多个实施例的用于预取代码块的方法3000的流程图。在各实施例中,方法3000可由可包括硬件(例如,处理设备、电路、专用逻辑、可编程逻辑、微代码等)、软件(诸如,在处理设备上运行的指令)或其组合的处理逻辑执行。在固件或软件实施例中,方法3000可由诸如光学、半导体或磁存储设备之类的非瞬态机器可读介质中所存储的计算机执行的指令实现。机器可读介质可存储数据,该数据如果由至少一个机器执行则使得该至少一个机器制造用于执行方法的至少一个集成电路。为了说明起见,方法3000中所涉及的动作可在下文参考图26-图29来描述,图26-图29示出了根据一个或多个实施例的示例。然而,本文中所讨论的各实施例的范围不限于此方面。
框3010可包括:取出软件程序中所包括的代码预取(CP)指令。框3020可包括:对CP指令进行解码以获得经解码的CP指令。例如,参考图 27,取出单元2720取出特定程序中所包括的代码预取(CP)指令2710,并且解码单元2730对CP指令2710进行解码。
框3030可包括:执行经解码的CP指令,以将第一代码块集合预取到第一高速缓存中并将第二代码块集合预取到第二高速缓存中。例如,参考图27,经解码的CP指令2710由存储器单元2740执行,由此使得第一数量 X的代码块被加载到L1高速缓存2760中,并且还使得第二数量Y的代码块被加载到L2高速缓存2770中。第一数量的代码块和第二数量的代码块是特定程序的、与特定函数相对应的连续部分。在一些实施例中,这些代码块中的每个代码块可由预取标签标记,该预取标签指示该代码块被CP指令预取。此外,如果被程序需要,则被加载在L1高速缓存2760和/或L2高速缓存2770中的所预取的代码块可由(多个)执行单元2750执行。在框3030之后,方法3000 可被完成。
图31–示例方法
现在参考图31,所示出的是根据一个或多个实施例的用于使用代码预取(CP)指令的性能信息的方法3100的流程图。在各实施例中,方法 3100可由可包括硬件(例如,处理设备、电路、专用逻辑、可编程逻辑、微代码等)、软件(例如,在处理设备上运行的指令)或其组合的处理逻辑执行。在固件或软件实施例中,方法3100可由诸如光学、半导体或磁存储设备之类的非瞬态机器可读介质中所存储的计算机执行的指令实现。机器可读介质可存储数据,该数据如果由至少一个机器执行则使得该至少一个机器制造用于执行方法的至少一个集成电路。为了说明起见,方法3000中所涉及的动作可在下文参考图26-图29来描述,图26-图29示出了根据一个或多个实施例的示例。然而,本文中所讨论的各实施例的范围不限于此方面。
框3110可包括:检测代码预取(CP)指令的执行。框3120可包括:将所执行的CP指令的标识符存储在预取指令表的表条目中。框3130可包括:将所执行的CP指令的目标地址存储在表条目中。例如,参考图27-图 28,PMU 2890可检测到存储单元2880已经执行CP指令2710。响应于该检测,PMU 2890可向数据结构2900添加新的条目。PMU 2890随后可将所执行的CP指令2710的标识符存储在该新的条目的CPI标识符字段2910中,并且可将所执行的CP指令2710的目标地址存储在该新的条目的目标字段2920中。
框3140可包括:更新表条目,以指示目标地址是否在L1指令高速缓存中或在L2高速缓存中命中。框3150可包括:更新表条目,以指示流水线的后端是否停止。例如,参考图27-图28,PMU 2890可接收来自其他组件(例如,L1指令高速缓存2825、L2高速缓存2886、IFU2810、经解码指令队列2850等)的通知,并且可更新数据结构2900的相关联条目。在一些示例中,访问字段2950被更新为包括指示哪些所预取的代码块在执行期间被取出的数据。此外,停止字段2960被更新为包括指示当经解码指令队列为空时哪些所预取的代码块在L1指令高速缓存中未命中的数据。此外,L2未命中字段 2970被更新为包括指示哪些所预取的代码块在L2高速缓存中未命中的数据。
框3160可包括:生成包括表条目中的信息的报告。框3170可包括:基于表条目中的信息来调整CP指令的第一和第二操作数值。例如,参考图27-图28,PMU 2890可提供对数据结构2900的条目的访问。在一些示例中,软件可基于这些条目来生成报告。可将所生成的报告提供给编程人员,以允许对包括CP指令2710的程序代码进行修改。此外,在一些示例中,软件 (例如,编译器或其他编程工具)可分析数据结构2900的条目,并且可基于此种分析自动地修改CP指令2710的参数。在框3170之后,方法3100可被完成。
图32–示例存储介质
现在参考图32,所示出的是存储可执行指令3210的存储介质 3200。在一些实施例中,存储介质3200可以是非瞬态机器可读机制,诸如光学介质、半导体、磁存储设备等等。可执行指令3210可以是可由处理设备执行的。此外,可执行指令3210可由至少一个机器用于制造至少一个集成电路,以执行如图29-图30中所示出的方法中的任何方法。在一些实施例中,可执行指令3210可被执行以执行如图29-图30中所示出的方法中的任何方法。
下列条款和/或示例涉及进一步的实施例。
在示例1中,一种用于预取的处理器可包括:取出电路,该取出电路用于取出指令,这些指令包括代码预取指令;解码电路,该解码电路用于对代码预取指令进行解码并将经解码的代码预取指令提供至存储器电路,其中,该存储器电路用于执行经解码的代码预取指令,以将第一代码块集合预取到第一高速缓存中并将第二代码块集合预取到第二高速缓存中。
在示例2中,如示例1所述的主题可任选地包括:第一高速缓存是处理器的第一级(L1)高速缓存,并且第二高速缓存是处理器的第二级(L2) 高速缓存。
在示例3中,如示例1-2所述的主题可任选地包括:代码预取指令、第一代码块集合、以及第二代码块集合被包括在软件程序中。
在示例4中,如示例1-3所述的主题可任选地包括:代码预取指令包括目标操作数、第一高速缓存操作数和第二高速缓存操作数;目标操作数用于指定代码预取指令的目标地址;第一高速缓存操作数用于指定第一代码块集合中的代码块的第一数量;并且第二高速缓存操作数用于指定第二代码块集合中的代码块的第二数量。
在示例5中,如示例1-4所述的主题可任选地包括:第一代码块集合用于开始于目标地址处,并且第二代码块集合用于紧跟在第一代码块集合之后开始。
在示例6中,如示例1-5所述的主题可任选地包括,存储器电路用于在经解码的代码预取指令的单次执行期间:将第一代码块集合注入到第一级指令高速缓存中;以及向处理器的存储器子系统发出针对第二代码块集合的访问。
在示例7中,如示例1-6所述的主题可任选地包括:第一级指令高速缓存包括用于处置第一代码块集合的专用端口。
在示例8中,如示例1-7所述的主题可任选地包括性能监视电路,该性能监视电路用于:将代码预取指令的标识符存储在所存储数据结构的第一条目中;以及将代码预取指令的目标地址存储在所存储数据结构的该第一条目中。
在示例9中,如示例1-8所述的主题可任选地包括,性能监视电路用于:接收指示代码预取指令的性能特性的一个或多个通知;以及基于代码预取指令的性能特性来更新所存储数据结构的第一条目。
在示例10中,一种用于预取的方法可包括:由处理器取出软件程序中所包括的代码预取指令;由处理器对代码预取指令进行解码,以获得经解码的代码预取指令;以及由处理器执行经解码的代码预取指令,以将第一代码块集合预取到第一高速缓存中并将第二代码块集合预取到第二高速缓存中。
在示例11中,如示例10所述的主题可任选地包括:第一高速缓存是处理器的第一级(L1)高速缓存;第二高速缓存是处理器的第二级(L2) 高速缓存;并且代码预取指令、第一代码块集合、以及第二代码块集合被包括在软件程序中。
在示例12中,如示例10-11所述的主题可任选地包括:代码预取指令包括目标操作数、第一高速缓存操作数和第二高速缓存操作数;目标操作数用于指定代码预取指令的目标地址;第一高速缓存操作数用于指定第一代码块集合中的代码块的第一数量;并且第二高速缓存操作数用于指定第二代码块集合中的代码块的第二数量。
在示例13中,如示例10-12所述的主题可任选地包括:第一代码块集合用于开始于目标地址处,并且第二代码块集合用于紧跟在第一代码块集合之后开始。
在示例14中,如示例10-13所述的主题可任选地包括,在经解码的代码预取指令的单次执行期间:将第一代码块集合注入到第一级指令高速缓存中;以及向处理器的存储器子系统发出针对第二代码块集合的访问。
在示例15中,如示例10-14所述的主题可任选地包括:由性能监视器电路将代码预取指令的标识符存储在所存储数据结构的第一条目中;以及由性能监视器电路将代码预取指令的目标地址存储在所存储数据结构的该第一条目中。
在示例16中,如示例10-15所述的主题可任选地包括:由性能监视电路接收指示代码预取指令的性能特性的一个或多个通知;以及由性能监视电路基于代码预取指令的性能特性来更新所存储数据结构的第一条目。
在示例17中,一种计算设备可包括:一个或多个处理器;以及存储器,具有存储于其中的多条指令,该多条指令在由一个或多个处理器执行时,使该计算设备执行如示例10至16中的任一项所述的方法。
在示例18中,至少一种机器可读介质具有存储于其上的数据,该数据如果由至少一个机器使用,则使得该至少一个机器执行如示例10至16 中任一项所述的方法。
在示例19中,一种电子设备可包括用于执行如示例10至16中任一项所述的方法的装置。
在示例20中,一种用于预取的系统可包括耦合至外部存储器的处理器。该处理器可包括:取出电路,该取出电路用于取出指令,这些指令包括代码预取指令;解码电路,该解码电路用于对代码预取指令进行解码并将经解码的代码预取指令提供至存储器电路,其中,该存储器电路用于执行经解码的代码预取指令,以将第一代码块集合预取到第一高速缓存中并将第二代码块集合预取到第二高速缓存中。
在示例21中,如示例20所述的主题可任选地包括:第一高速缓存是处理器的第一级(L1)高速缓存;第二高速缓存是处理器的第二级(L2) 高速缓存;并且代码预取指令、第一代码块集合、以及第二代码块集合被包括在软件程序中。
在示例22中,如示例20-21所述的主题可任选地包括:代码预取指令包括目标操作数、第一高速缓存操作数和第二高速缓存操作数;目标操作数用于指定代码预取指令的目标地址;第一高速缓存操作数用于指定第一代码块集合中的代码块的第一数量;并且第二高速缓存操作数用于指定第二代码块集合中的代码块的第二数量。
在示例23中,如示例20-22所述的主题可任选地包括,存储器电路用于在经解码的代码预取指令的单次执行期间:将第一代码块集合注入到第一级指令高速缓存中;以及向处理器的存储器子系统发出针对第二代码块集合的访问。
在示例24中,一种用于预取的设备可包括:用于取出软件程序中所包括的代码预取指令的装置;用于对代码预取指令进行解码以获得经解码的代码预取指令的装置;以及用于执行经解码的代码预取指令以将第一代码块集合预取到第一高速缓存中并将第二代码块集合预取到第二高速缓存中的装置。
在示例25中,如示例24所述的主题可任选地包括:第一高速缓存是第一级(L1)高速缓存;第二高速缓存是第二级(L2)高速缓存;并且代码预取指令、第一代码块集合、以及第二代码块集合被包括在软件程序中。
在示例26中,如示例24-25所述的主题可任选地包括:代码预取指令包括目标操作数、第一高速缓存操作数和第二高速缓存操作数;目标操作数用于指定代码预取指令的目标地址;第一高速缓存操作数用于指定第一代码块集合中的代码块的第一数量;并且第二高速缓存操作数用于指定第二代码块集合中的代码块的第二数量。
在示例27中,如示例24-26所述的主题可任选地包括:第一代码块集合用于开始于目标地址处,并且第二代码块集合用于紧跟在第一代码块集合之后开始。
在示例28中,如示例24-27所述的主题可任选地包括用于在经解码的代码预取指令的单次执行期间进行以下操作的装置:将第一代码块集合注入到第一级指令高速缓存中;以及向存储器子系统发出针对第二代码块集合的访问。
在示例29中,如示例24-28所述的主题可任选地:用于将代码预取指令的标识符存储在所存储数据结构的第一条目中的装置;以及用于将代码预取指令的目标地址存储在所存储数据结构的该第一条目中的装置。
在示例30中,如示例24-29所述的主题可任选地包括:用于接收指示代码预取指令的性能特性的一个或多个通知的装置;以及用于基于代码预取指令的性能特性来更新所存储数据结构的第一条目的装置。
根据一些实施例,指令集架构(ISA)中的指令可被提供以在处理器中执行代码预取。在一些实施例中,代码预取(CP)指令可被执行以将多个代码块集合预取到不同级别处的多个高速缓存中。处理引擎可通过访问第一高速缓存中的第一代码块集合同时还访问来自第二高速缓存的第二代码块集合来开始执行代码函数。以此方式,处理引擎可以开始执行代码函数而不被延迟与访问来自第二高速缓存的第二代码块集合相关联的等待时间时段。相应地,使用CP指令可减少处理引擎空闲的时间段,并且由此可改善程序执行的效率和/或性能。此外,性能监视单元(PMU)可收集并存储与CP指令的执行有关的信息。此种信息可用于调整CP指令,以改善代码预取的性能收益与的负面效果之间的平衡。
注意,尽管图26-图32图示出各种示例实现方式,但是其他变型是可能的。例如,构想一个或多个实施例可被实现在参考图1-图25所描述的示例设备和系统中。注意,为了说明起见而提供图1-图32中示出的示例,并且图1-图32中示出的示例不旨在限制任何实施例。具体而言,尽管实施例可以为清楚起见而以简化的形式示出,但实施例可包括任何数量和/或布置的组件。例如,构想一些实施例除了示出的那些组件之外还可包括任何数量的组件,并且示出的组件的不同布置可在某些实现方式中出现。此外,构想图1-图32 所示示例中的细节可在一个或多个实施例中的任何地方使用。
应理解,以上示例的各种组合是可能的。实施例可在许多不同类型的系统中使用。例如,在一个实施例中,可以将通信设备布置为用于执行本文中所描述的各种方法和技术。当然,本发明的范围不限于通信设备,并且相反,其他实施例可以涉及用于处理指令的其他类型的装置、或者一种或多种机器可读介质,该机器可读介质包括指令,响应于在计算设备上执行这些指令,这些指令使该设备执行本文中所描述的方法与技术中的一者或多者。
在本说明书通篇中对“一个实施例”或“实施例”的引用意味着结合该实施例描述的特定特征、结构或特性被包括在本发明中所包含的至少一个实现中。因此,短语“一个实施例”或“在实施例中”的出现不一定指代同一实施例。此外,特定的特征、结构或特性可按照与所示特定实施例不同的其他适当形式来创立,而且所有此类形式可涵盖在本申请的权利要求中。
尽管已参照有限数量的实施例描述了本发明,但是本领域技术人员将从中领会众多修改和变型。所附权利要求旨在将所有此类修改和变型涵盖为落入本发明的真实精神与范围内。

Claims (23)

1.一种用于预取的处理器,包括:
取出电路,所述取出电路用于取出指令,所述指令包括代码预取指令;
解码电路,所述解码电路用于对所述代码预取指令进行解码并将经解码的代码预取指令提供至存储器电路;以及
所述存储器电路,所述存储器电路用于执行经解码的代码预取指令,以将第一代码块集合预取到第一高速缓存中并将第二代码块集合预取到第二高速缓存中。
2.如权利要求1所述的处理器,其中,所述第一高速缓存是所述处理器的第一级L1高速缓存,并且其中,所述第二高速缓存是所述处理器的第二级L2高速缓存。
3.如权利要求1所述的处理器,其中,所述代码预取指令、所述第一代码块集合、以及所述第二代码块集合被包括在软件程序中。
4.如权利要求1所述的处理器,其中:
所述代码预取指令包括目标操作数、第一高速缓存操作数和第二高速缓存操作数;
所述目标操作数用于指定所述代码预取指令的目标地址;
所述第一高速缓存操作数用于指定所述第一代码块集合中的代码块的第一数量;并且
所述第二高速缓存操作数用于指定所述第二代码块集合中的代码块的第二数量。
5.如权利要求4所述的处理器,其中,所述第一代码块集合用于开始于所述目标地址处,并且其中,所述第二代码块集合用于紧跟在所述第一代码块集合之后开始。
6.如权利要求1所述的处理器,所述存储器电路用于在经解码的代码预取指令的单次执行期间:
将所述第一代码块集合注入到第一级指令高速缓存中;以及
向所述处理器的存储器子系统发出针对所述第二代码块集合的访问。
7.如权利要求6所述的处理器,其中,所述第一级指令高速缓存包括用于处置所述第一代码块集合的专用端口。
8.如权利要求1所述的处理器,包括性能监视电路,所述性能监视电路用于:
将所述代码预取指令的标识符存储在所存储数据结构的第一条目中;以及
将所述代码预取指令的目标地址存储在所述所存储数据结构的所述第一条目中。
9.如权利要求8所述的处理器,所述性能监视电路用于:
接收指示所述代码预取指令的性能特性的一个或多个通知;以及
基于所述代码预取指令的所述性能特性来更新所述所存储数据结构的所述第一条目。
10.一种用于预取的方法,包括:
由处理器取出软件程序中所包括的代码预取指令;
由所述处理器对所述代码预取指令进行解码,以获得经解码的CP指令;以及
由所述处理器执行所述经解码的CP指令,以将第一代码块集合预取到第一高速缓存中并将第二代码块集合预取到第二高速缓存中。
11.如权利要求10所述的方法,其中:
所述第一高速缓存是所述处理器的第一级L1高速缓存;
所述第二高速缓存是所述处理器的第二级L2高速缓存;并且
所述代码预取指令、所述第一代码块集合、以及所述第二代码块集合被包括在软件程序中。
12.如权利要求10所述的方法,其中:
所述代码预取指令包括目标操作数、第一高速缓存操作数和第二高速缓存操作数;
所述目标操作数用于指定所述代码预取指令的目标地址;
所述第一高速缓存操作数用于指定所述第一代码块集合中的代码块的第一数量;并且
所述第二高速缓存操作数用于指定所述第二代码块集合中的代码块的第二数量。
13.如权利要求12所述的方法,其中,所述第一代码块集合用于开始于所述目标地址处,并且其中,所述第二代码块集合用于紧跟在所述第一代码块集合之后开始。
14.如权利要求10所述的方法,包括在所述经解码的代码预取指令的单次执行期间:
将所述第一代码块集合注入到第一级指令高速缓存中;以及
向所述处理器的存储器子系统发出针对所述第二代码块集合的访问。
15.如权利要求10所述的方法,包括:
由性能监视电路将所述代码预取指令的标识符存储在所存储数据结构的第一条目中;以及
由所述性能监视电路将所述代码预取指令的目标地址存储在所述所存储数据结构的所述第一条目中。
16.如权利要求15所述的方法,包括:
由所述性能监视电路接收指示所述代码预取指令的性能特性的一个或多个通知;以及
由所述性能监视电路基于所述代码预取指令的所述性能特性来更新所述所存储数据结构的所述第一条目。
17.一种计算设备,包括:
一个或多个处理器;以及
存储器,具有存储在其中的多条指令,所述多条指令在由所述一个或多个处理器执行时,使得所述计算设备执行如权利要求10至16中任一项所述的方法。
18.至少一种机器可读介质,具有存储于其上的数据,所述数据如果由至少一个机器使用,则使得所述至少一个机器执行如权利要求10至16中任一项所述的方法。
19.一种电子设备,包括用于执行如权利要求10至16中任一项所述的方法的装置。
20.一种用于预取的系统,包括:
处理器,所述处理器包括:
取出电路,所述取出电路用于取出指令,所述指令包括代码预取指令;
解码电路,所述解码电路用于对所述代码预取指令进行解码并将经解码的代码预取指令提供至存储器电路;以及
所述存储器电路,所述存储器电路用于执行经解码的代码预取指令,以将第一代码块集合预取到第一高速缓存中并将第二代码块集合预取到第二高速缓存中;以及
外部存储器,所述外部存储器耦合至所述处理器。
21.如权利要求20所述的系统,其中:
所述第一高速缓存是所述处理器的第一级L1高速缓存;
所述第二高速缓存是所述处理器的第二级L2高速缓存;并且
所述代码预取指令、所述第一代码块集合、以及所述第二代码块集合被包括在软件程序中。
22.如权利要求20所述的系统,其中:
所述代码预取指令包括目标操作数、第一高速缓存操作数和第二高速缓存操作数;
所述目标操作数用于指定所述代码预取指令的目标地址;
所述第一高速缓存操作数用于指定所述第一代码块集合中的代码块的第一数量;并且
所述第二高速缓存操作数用于指定所述第二代码块集合中的代码块的第二数量。
23.如权利要求20所述的系统,所述存储器电路用于在经解码的代码预取指令的单次执行期间:
将所述第一代码块集合注入到第一级指令高速缓存中;以及
向所述处理器的存储器子系统发出针对所述第二代码块集合的访问。
CN202111435835.6A 2020-12-22 2021-11-29 用于代码预取的指令和逻辑 Pending CN114661349A (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US17/130,592 2020-12-22
US17/130,592 US20220197656A1 (en) 2020-12-22 2020-12-22 Instruction and logic for code prefetching

Publications (1)

Publication Number Publication Date
CN114661349A true CN114661349A (zh) 2022-06-24

Family

ID=77998760

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202111435835.6A Pending CN114661349A (zh) 2020-12-22 2021-11-29 用于代码预取的指令和逻辑

Country Status (3)

Country Link
US (1) US20220197656A1 (zh)
EP (1) EP4020186A1 (zh)
CN (1) CN114661349A (zh)

Family Cites Families (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6643745B1 (en) * 1998-03-31 2003-11-04 Intel Corporation Method and apparatus for prefetching data into cache
US6460115B1 (en) * 1999-11-08 2002-10-01 International Business Machines Corporation System and method for prefetching data to multiple levels of cache including selectively using a software hint to override a hardware prefetch mechanism
US7111125B2 (en) * 2002-04-02 2006-09-19 Ip-First, Llc Apparatus and method for renaming a data block within a cache
US7533242B1 (en) * 2005-10-31 2009-05-12 Sun Microsystems, Inc. Prefetch hardware efficiency via prefetch hint instructions
US7890702B2 (en) * 2007-11-26 2011-02-15 Advanced Micro Devices, Inc. Prefetch instruction extensions
US8341357B2 (en) * 2010-03-16 2012-12-25 Oracle America, Inc. Pre-fetching for a sibling cache
US9996350B2 (en) * 2014-12-27 2018-06-12 Intel Corporation Hardware apparatuses and methods to prefetch a multidimensional block of elements from a multidimensional array
US10509726B2 (en) * 2015-12-20 2019-12-17 Intel Corporation Instructions and logic for load-indices-and-prefetch-scatters operations
US11232533B2 (en) * 2019-03-15 2022-01-25 Intel Corporation Memory prefetching in multiple GPU environment
US20210182214A1 (en) * 2019-12-17 2021-06-17 Advanced Micro Devices, Inc. Prefetch level demotion

Also Published As

Publication number Publication date
US20220197656A1 (en) 2022-06-23
EP4020186A1 (en) 2022-06-29

Similar Documents

Publication Publication Date Title
US11093278B2 (en) Modifying processor frequency based on interrupt rate
US20200218677A1 (en) Management of Processor Performance Based on User Interrupts
CN113272889A (zh) 基于用户活动调整显示刷新率
US11886884B2 (en) Branch prediction based on coherence operations in processors
CN113474745A (zh) 在处理器中执行软扼制和硬扼制
EP3674847B1 (en) Controlling power state demotion in a processor
US20190101969A1 (en) Control Blocks for Processor Power Management
CN115048326A (zh) 用于管理总线通信协议的选择
US20210064110A1 (en) Control blocks for processor power management
EP4155914A1 (en) Caching based on branch instructions in a processor
US20230100693A1 (en) Prediction of next taken branches in a processor
US20220197656A1 (en) Instruction and logic for code prefetching
US20240111598A1 (en) Sequencing circuit for a processor
JP7455856B2 (ja) プロセッサにおけるスロットリング閾値の調整
US11354213B2 (en) Utilization metrics for processing engines
US11514551B2 (en) Configuration profiles for graphics processing unit
US20240012735A1 (en) Processor including monitoring circuitry for virtual counters
CN115525135A (zh) 处理器中的虚拟分区的功率限制
CN113849869A (zh) 为持续性存储器生成密钥
CN116303210A (zh) 用于计算机处理器的寄存器接口
CN116266142A (zh) 处理器中的频率预算
CN114661346A (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