寄存器堆预提取的制作方法
未命名
07-12
阅读:109
评论:0
寄存器堆预提取
1.相关申请
2.本技术与2022年1月5日提交的、标题为“register file prefetch(寄存器堆预提取)”的美国临时专利申请第63/296,760号相关并要求该美国临时专利申请的优先权,该美国临时专利申请出于所有目的以其全文并入本文。
技术领域
3.本公开总体上涉及处理器领域。更具体地,一些实施例涉及用于寄存器堆预提取的应用和/或方法。
背景技术:
4.通常,处理器的寄存器堆包括多个处理器寄存器。在大多数现代处理器中,静态随机存取存储器(sram)被用于实现寄存器堆。
5.由于处理器操作依赖于寄存器堆来存储用于各种处理器操作的数据,因此寄存器堆的实现方式会对处理器性能产生直接影响。
技术实现要素:
6.本公开的一个方面提供了一种用于提供寄存器堆预提取的装置,所述装置包括:寄存器堆,所述寄存器堆由多个寄存器形成,其中,所述寄存器堆包括多个寄存器堆条目;以及执行电路,所述执行电路用于使得发出预提取请求,以使得将数据从数据缓存单元预提取到所述寄存器堆的条目中,其中,所述预提取请求是响应于加载操作的分配而发出的。
7.本公开的另一方面提供了一种用于提供寄存器堆预提取的方法,所述方法包括:将多个寄存器堆条目存储在寄存器堆中,其中,所述寄存器堆包括多个寄存器;以及发出预提取请求以使得将数据从数据缓存单元预提取到所述寄存器堆的条目中,其中,所述预提取请求是响应于加载操作的分配而发出的。
8.本公开的又一方面提供了一种机器可读介质,包括代码,所述代码在被执行时使得机器执行根据任一方面所述的操作。
9.本公开的又一方面提供了一种设备,包括用于执行根据任一方面所述的操作的装置。
附图说明
10.参考附图提供详细描述。在附图中,附图标记最左边的(一个或多个)数字标识该附图标记首次出现的图。在不同附图中使用相同的附图标记来表示相似或相同的项。
11.图1a示出了根据实施例的用于支持寄存器堆预提取操作的乱序处理器核心的一些组件。
12.图1b示出了根据实施例的用于寄存器堆预提取操作以及与处理器加载管线的交互的方法的流程图。
13.图2示出了根据实施例的寄存器堆预提取相对于基线的每周期指令数增益的样本图表。
14.图3a是示出根据实施例的示例性指令格式的框图。
15.图3b是示出根据一个实施例的构成完整操作码字段的指令格式的字段的框图。
16.图3c是示出根据一个实施例的构成寄存器索引字段的指令格式的字段的框图。
17.图3d是示出根据一个实施例的构成扩增操作字段的指令格式的字段的框图。
18.图4是根据一个实施例的寄存器体系结构的框图。
19.图5a是示出根据实施例的示例性有序管线和示例性寄存器重命名、乱序发出/执行管线两者的框图。
20.图5b是示出根据实施例的要被包括在处理器中的有序体系结构核心和示例性寄存器重命名、乱序发出/执行体系结构核心的示例性实施例两者的框图。
21.图6示出了根据实施例的片上系统(soc)封装的框图。
22.图7是根据实施例的处理系统的框图。
23.图8是根据一些实施例的具有一个或多个处理器核心的处理器的实施例的框图。
24.图9是根据实施例的图形处理器的框图。
具体实施方式
25.在下面的描述中,阐述了许多具体细节以提供对各种实施例的透彻理解。然而,可以在没有这些具体细节的情况下实践各种实施例。在其他实例中,没有详细描述公知的方法、程序、组件和电路以免混淆特定实施例。此外,可以使用各种手段来执行实施例的各个方面,例如集成半导体电路(“硬件”)、被组织成一个或多个程序的计算机可读指令(“软件”)、或硬件和软件的某种组合。出于本公开的目的,对“逻辑”的引用应表示硬件(例如逻辑电路,或更一般地电路系统或电路)、软件、固件或其某种组合。
26.如上所述,寄存器堆的实现方式会对处理器性能产生直接影响。通常,预提取数据可用于减少加载操作的有效时延。然而,大部分预提取工作只关注存储器来进行缓存预提取。
27.为此,一些实施例提供了用于寄存器堆预提取(rfp)的技术。在实施例中,从第1级(l1)缓存执行预提取操作(在本文中也可互换地称为数据缓存单元(dcu))到寄存器堆(“rf”,有时也称为物理寄存器堆(prf))。该寄存器堆预提取操作(在本文中有时称为“rfp”)可以通过将加载数据预提取到寄存器堆中来有效地减少/隐藏l1缓存时延,进而潜在地提供显著的每周期指令数(instructions per cycle,ipc)改进。
28.在实施例中,使用预测地址执行rfp操作,并且对应的加载操作在执行时检查预测地址是否与加载地址匹配。如果匹配,则将预提取数据提供给(一个或多个)相关操作,并且加载操作有效地绕过缓存。否则,如果预测地址和加载地址之间存在不匹配,则加载操作继续执行乱序(ooo)处理器管线缓存访问并将加载数据提供给(一个或多个)相关操作。
29.此外,由于l1和prf带宽在处理器中是稀缺的,因此可能需要巧妙地发出rfp请求以免影响l1/prf带宽。为了实现这个目标,在各种实施例中可以使用两种解决方案:
30.(1)指令集体系结构(isa)或(一个或多个)指令(例如指令提示(instruction hints)):编译器、软件应用程序、操作系统(os)或软件程序员/用户可以识别成本较低和/
或更容易预提取,同时提高性能的一个或多个加载操作,并且向指令添加对应的提示。这样的(一个或多个)提示可以以不同的方式实现,例如指令的操作对象中的一个或多个位以指示给定的加载指令是否将引起预提取加载操作。替代地,指令的操作对象可以包括到存储器位置(例如寄存器、缓存线、主存储器(例如动态随机存取存储器(dram)、双倍数据速率(ddr)存储器)地址等)的地址。此外,表和/或(一个或多个)计数器可以存储关于加载指令预提取的信息(例如,图1a的预提取表110),以指示与针对给定加载指令调用预提取相关联的相对成本/简易度(例如,时延),来帮助确定是否要为该加载操作调用提示。这些提示加载操作进而可以启动寄存器堆预提取。由于提示加载操作的数量通常被保持低于总加载操作,因此这种方法有望减少对l1/prf带宽的压力。
31.(2)纯硬件解决方案:在该解决方案中,硬件逻辑/电路将为尽可能多的加载操作发出预提取请求,例如,基于资源/带宽执行预提取操作的可用性。在实施例中,这些预提取请求可以以比正在进行的加载操作“旁路(bypasses)”、现有硬件/软件预提取请求等更低的优先级来执行。此外,dcu通常具有固定带宽,但许多加载可能竞标(bidding)dcu端口。一些加载操作可能被立即派遣到dcu,而其他加载操作可能会因竞标而延迟。被立即派遣的加载在本文中被标记为“旁路”,并且将具有比rfp所引入的预提取更高的竞标优先级。因此,对于不具有高带宽要求的应用,这种纯硬件解决方案仍然可以高效运行。
32.图1a示出了根据实施例的用于支持rfp操作的ooo处理器核心100的一些组件。寄存器堆的样本体系结构的进一步细节将参考图4进行讨论。图5a提供了关于示例性有序处理器核心管线和示例性寄存器重命名、乱序发出/执行处理器核心管线两者的一些细节。图5b提供了关于有序体系结构处理器核心和示例性寄存器重命名、乱序发出/执行体系结构处理器核心的示例性实施例两者的一些细节。此外,核心100的一个或多个组件可以与参考图4、图5a和图5b讨论的具有相同名称的组件相同或相似。
33.参考图1a,ooo处理器核心100包括具有提取和解码逻辑的前端102(参见例如对图5a的管线500和/或图5b的前端530的讨论)。前端102还包括指令队列104。
34.在实施例中,一旦针对ooo分配发生加载操作分配,则发出rfp请求。在一个实施例中,rfp操作在ooo执行引擎108中的重命名级106之后执行,其中ooo执行引擎108包括一个或多个执行单元109(参见例如图5a的重命名级510和/或图5b的重命名/分配器电路552发生在分配之后)。例如,rfp请求使得在预提取表110中利用加载操作的程序计数器(pc)112进行查找。在各种实施例中,可以允许常量和/或跨步预提取。预提取表110随后针对预测地址114发出预提取操作,并且该预提取操作使得向寄存器堆116中的被分配给加载操作的相同prf条目进行写回。
35.当发出加载操作时,其在下一个周期唤醒其相关操作。在地址生成单元(agu)中,针对预提取地址检查加载地址。如果两个地址匹配,则简单地丢弃加载操作并将预提取值提供给相关操作。如果地址不匹配,则重新启动相关操作,并且等待原始加载操作(如基线)执行。一个或多个实施例产生服务器工作负载上的大约1.19%的几何平均(geomean)。
36.返回参考图1a,“rfp”可以提供用于从l1缓存或dcu 120预提取数据(例如,使用在重命名级106之后生成、并发送到l1/数据缓存120和加载存储队列(lsq)122的预提取分组118)到物理寄存器堆116中的机制。通过这样做,原始加载操作不需要去l1缓存120获取数据,但其可以简单地从寄存器堆116访问数据(只要rfp地址和加载地址匹配;否则,加载操
作必须执行l1缓存访问)。因此,在一些实现方式中,成功的rfp将加载操作的时延从大约五个周期缩短到一个周期,这将显著提高系统性能。
37.此外,在一些实施例中,存在至少两种可以执行寄存器预提取的方式:
38.(1)软件解决方案——编译器、软件应用、os或程序员/用户可以识别跨越加载地址的循环。然后编译器、软件应用、os或程序员/用户添加特殊提示/指令以及加载操作,这将使得将数据预提取到寄存器堆中。
39.(2)硬件解决方案——地址预测器逻辑(例如,预提取表110)使用处理器核心中的加载地址来训练。当加载操作分配预提取数据并将其写入寄存器堆中时,地址预测器逻辑然后发出预提取请求。
40.相比之下,一些isa指令可能只支持缓存级别之间的数据传输,而不支持将数据预提取到寄存器堆中。
41.此外,本文讨论的一个或多个指令/isa可以符合本文详述的指令格式,例如,参考图3a等。
42.可以使用简单的微基准测试(micro-benchmark)来跟踪rfp,以测试l1缓存的时延。这些是典型的加载时延基准的变型。一个这样的基准如下所示:
43.for((i,j)in buffer){
44.x+=buffer[i][j];
[0045]
}
[0046]
考虑到l1缓存时延相比于存在预提取的情况,上述的运行时间相对容易确定。
[0047]
此外,在实施例中,rfp提供了一种将加载数据从l1缓存带入寄存器堆以供将来使用的方法。加载操作可以使用来自寄存器堆的数据并保存到l1缓存的行程。这减少了加载操作的执行时延,进而提高了处理器核心性能。
[0048]
基于软件编译器的解决方案
[0049]
一些编译器可以容易地识别程序中的循环。举例如下:
[0050]
for(i=0;i《100;i++){
[0051]
load from i;
[0052]
}
[0053]
在上面的循环中,加载地址每次迭代都会递增。
[0054]
for(i,j){
[0055]
x+=buffer[i][j];
[0056]
}
[0057]
在上面的代码中,加载地址也依赖于迭代变量并且具有跨步模式。
[0058]
在一个实施例中,编译器被配置为识别这样的循环,其中加载操作取决于迭代变量。然后,编译器在加载操作的同时插入提示。x86 isa已包含软件预提取指令,如prefetch t0、prefetch t1等,其可以将数据带到特定的缓存级别。可以添加另一个预提取指令(例如,prefetch r),其为prf带来数据。示例中修改后的代码可以如下所示:
[0059]
for(i=0;i《100;i++){
ꢀꢀꢀꢀꢀꢀꢀꢀ
for(i=0;i《100;i++){
[0060]
load from i;
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
prefetch r;
[0061]
}
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
load from i;
[0062]
}
[0063]
在实施例中,该“prefetch r”指令可用作对机会主义(opportunistic)数据提取的提示,因此不会修改任何体系结构状态。
[0064]
基于硬件编译器的解决方案
[0065]
rfp硬件逻辑的细节将参考上面的图1a以及通过以下操作进行讨论:(1)相关加载操作的地址预测;(2)启动预提取;(3)存在rfp的情况下的加载管线;和/或(4)处理存储-加载转发、存储器消歧和清除。
[0066]
地址预测
[0067]
rfp可以提前猜测加载操作的地址,以便在加载操作等待其自身执行时启动预提取请求。为此,rfp可以利用地址预测器逻辑(例如,图1a的预提取表110),其预测ooo分配时的加载地址。地址预测器逻辑可以被设计为跟踪常量和/或跨步地址。当加载引起写回时,预测器逻辑探听其地址并将其记录在表中(例如,图1a的预提取表110)。
[0068]
在实施例中,在每次加载写回时(例如,在图1b的操作146),预测器逻辑检查地址是否为常量或具有固定步幅。如果是,则预测器逻辑使对应表条目的置信度指示符递增。否则,预测器逻辑重置置信度,然后最终从表中逐出条目。一旦对地址模式获得足够置信度,地址预测器逻辑将加载pc标记为“rfp可预提取”。
[0069]
启动预提取
[0070]
在ooo分配时,地址预测器逻辑基于其对加载pc的置信度而为rfp标记加载操作。对于标记的加载,创建预提取分组(例如,图1a的预提取分组118),其包含预测地址以及加载操作的寄存器堆标识符(id)。预提取分组被发送到存储器执行单元(meu)(未示出),其中其与其他加载/rfp进行仲裁以访问l1缓存。在实施例中,lsq 122是meu的一部分,并且保存当前ooo执行窗口中的所有加载/存储并用于确保它们的排序。一旦rfp获得访问,例如由于l1时延,预提取需要若干周期(例如,大约五个周期)来将数据从l1缓存(120)带入寄存器堆(116)。在预提取完成之后,可以设置标志,以向原始加载微操作/操作通知预提取数据已成功置于寄存器堆中。
[0071]
在实施例中,不允许继续进行由rfp请求引起的l1缓存未命中。因此,如果rfp请求在l1缓存中未命中,则可能取消预提取。这是为了防止rfp请求不必要地占用带宽。
[0072]
存在rfp的情况下的加载管线
[0073]
在一个实施例中,加载管线被修改以支持以下三种rfp场景:
[0074]
(1)rfp在加载派遣以执行之前完成:当rfp完成时,针对表示rfp完成的加载在rs 124的条目中设置标志。当加载操作被派遣并发现此标志为真时,其检查rfp的预测地址是否与其自身的地址匹配。如果地址匹配,则加载从寄存器堆120获得预提取数据并放弃到l1缓存的行程。
[0075]
(2)rfp在加载派遣以执行时正在运行:如果rfp的预测地址与加载的地址匹配,则加载等待rfp结束。当rfp数据从l1到达时,加载使用它并继续进行。如果加载地址与rfp的预测地址不匹配,则加载发出其自身的l1请求并丢弃rfp数据。
[0076]
(3)rfp在加载派遣以执行时未被派遣:rfp请求在加载已被派遣之后不发出,因为它不会产生时延节省。
[0077]
处理存储-加载转发、存储器消歧和清除
[0078]
当rfp在加载分配时发出时,可能有尚未执行或正在运行的旧存储。这些存储可能修改加载的存储器地址处的数据。因此,rfp请求需要说明所有可能修改数据的这样的存储。
[0079]
当向meu启动rfp时,其扫描所有比其自身更旧的存储(从最年轻的旧存储开始)并将其地址与存储的地址进行匹配。如果匹配,则等待存储完成并将存储数据写入寄存器堆中。
[0080]
如果存储的地址不可用(意味着存储尚未执行),则可以依赖存储器消歧(md)机制来决定rfp是否需要等待存储或跳过它。基于md预测,rfp请求相应地进行并从较旧的存储或l1缓存获得最新的数据。如果md预测是错误的,则可能刷新整个机器并从加载指令重新开始执行。
[0081]
最后,如果管线中存在由早于rfp加载的指令导致的任何跳转执行清除(jeclears)、攻击、异常等,则预提取数据被移除。
[0082]
参考图1a,在一个实施例中,保留站(rs)124基于一个或多个rfp-正在运行位来跟踪rfp的进展。此外,当在rs 124中的加载分配时发出rfp请求时,重排序缓冲器(rob)126中可能有尚未执行或正在运行的较旧存储。为此,在至少一个实施例中,当向l1缓存120和lsq122启动rfp请求时,扫描rob 126中的所有较旧存储(以最新优先的顺序)并且将它们的地址与存储的地址进行匹配。如上所述,在匹配的情况下,rfp等待存储完成并使用存储的数据而不是缓存的数据来进行预提取。
[0083]
图1b示出了根据实施例的用于rfp操作以及与加载管线交互的方法130的流程图。方法130的一个或多个操作可以由参考图1a和图3a至图9讨论的组件执行。
[0084]
参考图1a和图1b,在操作132,分配加载操作(例如,在rs 124中)。在操作134,确定加载操作的操作对象是否准备好。随后,在操作136,将加载操作派遣到执行单元(例如,ooo执行单元108)。在操作138,确定是否为加载操作发出了rfp,如果是,则操作140确定rfp的预测地址是否与加载地址匹配。如果存在匹配,则在操作142将预提取的数据提供给(一个或多个)相关操作,并且加载操作有效地绕过缓存。否则,如果未发出rfp请求或者如果在操作140处在预测地址和加载地址之间存在不匹配,则在操作144,加载操作继续进行乱序(ooo)处理器管线缓存访问(例如,经由meu),以将加载数据提供给(一个或多个)相关操作。在操作142或144之后,方法132在操作146继续进行加载操作写回,这使得指示/信号被传输到加载操作的一个或多个相关操作,以指示加载数据准备好从加载的prf条目消耗。此外,当对应的rfp请求完成时,对加载的prf条目的实际数据写入操作可能在操作134、136、138、140或142中的任何一个操作之前发生。在操作146之后,方法132进行到操作148以继续预测器训练。
[0085]
在加载操作分配(132)之后,操作150确定在预提取表110中是否存在针对加载操作的对应高置信度,如果不存在,则方法132进行到操作148以继续训练预测器。否则,如果针对加载操作存在高置信度,则在操作152将rfp预提取分组传输到meu,并且在操作154执行l1缓存120访问仲裁。在操作156的prf请求赢得l1缓存访问仲裁之后,操作158确定是否存在较旧的匹配存储(例如,在rob 126中)。如果存在,则操作160执行存储-加载转发;否则,方法132在操作162处继续以访问l1缓存120。在操作160或162之后,操作164执行rfp写回以通知加载操作,并且rfp数据被传送到加载管线。
[0086]
图2示出了根据实施例的rfp相对于基线的ipc增益的样本图表200。
[0087]
如图2所示,rfp可以在服务器配置上提供大约1.19%的几何平均(geomean)性能。重要应用(例如,云)从rfp获得大约3%的显著高收益。在图2中,“hpc”是指高性能计算。
[0088]
如本文详述的,寄存器堆预提取是一种用于解决困扰现代超标量处理器的存储器时延的基本问题的新颖机制。通过几乎消除到l1缓存的行程,rfp从程序的关键路径节省了关键周期,从而实现了显著的性能改进。因此,该技术对当前世代和未来世代的处理器非常重要。
[0089]
另外,一些实施例可以应用于包括一个或多个处理器的计算系统中(例如,其中一个或多个处理器可以包括一个或多个处理器核心),如参考图1等所讨论的,包括例如台式计算机、工作站、计算机服务器、服务器刀片或移动计算设备。移动计算设备可以包括智能手机、平板电脑、umpc(超移动个人计算机)、笔记本电脑、ultrabook
tm
计算设备、可穿戴设备(例如,智能手表、智能戒指、智能手环或智能眼镜)等。
[0090]
指令集
[0091]
指令集可以包括一种或多种指令格式。给定的指令格式可以定义各种字段(例如,位数、位的位置),以指定要执行的操作(例如,操作码)和要执行该操作的(一个或多个)操作对象和/或其他(一个或多个)数据字段(例如掩码)等。一些指令格式通过指令模板(或子格式)的定义进一步细分。例如,给定指令格式的指令模板可以被定义为具有指令格式的字段的不同子集(所包括的字段通常具有相同的顺序,但至少有一些具有不同的位位置,因为所包括的字段较少),和/或被定义为对给定字段进行不同的解译。因此,isa的每个指令使用给定的指令格式(并且如果被定义,则在该指令格式的指令模板中的给定一个指令模板中)来表示,并且包括用于指定操作和操作对象的字段。例如,示例性add指令具有特定操作码和指令格式,其包括用于指定该操作码的操作码字段和用于选择操作对象(源1/目的地和源2)的操作对象字段;并且在指令流中出现该add指令将在选择特定操作对象的操作对象字段中具有特定内容。被称为高级向量扩展(avx)(avx1和avx2)并使用向量扩展(vex)编码方案的一组simd扩展已经公开和/或发布(例如,参见64和ia-32体系结构软件开发人员手册,2014年9月;以及参见高级向量扩展编程参考,2014年10月)。
[0092]
示例性指令格式
[0093]
本文所述的(一个或多个)指令的实施例可以以不同的格式体现。此外,示例性系统、体系结构和管线在下面详述。(一个或多个)指令的实施例可以在这样的系统、体系结构和管线上执行,但不限于所详述的那些。
[0094]
虽然将描述其中向量友好指令格式支持以下内容的实施例:具有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字节向量操作数长度(或大小);但替代实施例可以支持更多、更少和/或不同的向量操作对象大小(例如,256字节向量操作对象)以及更多、更少或不同的数据元素宽度(例如,128位(16字节)数据元素宽度)。
[0095]
图3a是示出根据实施例的示例性指令格式的框图。图3a示出了指令格式300,该指令格式300在指定字段的位置、大小、解译和顺序以及这些字段中的一些字段的值的意义上是特定的。指令格式300可用于扩展x86指令集,因此一些字段与现有x86指令集及其扩展(例如avx)中使用的字段相似或相同。该格式保持与带有扩展的现有x86指令集的前缀编码字段、实际操作码字节字段、mod r/m字段、sib字段、位移字段和立即数字段相一致。
[0096]
evex前缀(字节0-3)302以四字节形式编码。
[0097]
格式字段382(evex字节0,位[7:0])-第一字节(evex字节0)是格式字段382,并且其包含0x62(在一个实施例中用于区分向量友好指令格式的唯一值)。
[0098]
第二字节至第四字节(evex字节1-3)包括提供特定功能的多个位字段。
[0099]
rex字段305(evex字节1,位[7-5])-由evex.r位字段(evex字节1,位[7]-r)、evex.x位字段(evex字节1,位[6]-x)和357bevex字节1,位[5]-b组成。evex.r、evex.x和evex.b位字段提供与对应的vex位字段相同的功能,并且使用1的补码形式进行编码,即zmm0被编码为411b,zmm15被编码为0000b。指令的其他字段编码本领域已知的寄存器索引的低三位(rrr、xxx和bbb),使得可以通过添加evex.r、evex.x和evex.b来形成rrrr、xxxx和bbbb。
[0100]
rex’字段qac10-这是evex.r’位字段(evex字节1,位[4]-r’),用于编码扩展32位寄存器组的高16位或低16位。在一个实施例中,该位连同如下所示的其他位以位取反格式进行存储,以与bound指令区分开(在公知的x86 32位模式中),其实际操作码字节为62,但不接受在mod r/m字段中(如下所述)mod字段中的值为11;替代实施例不以取反格式存储该位和下面指示的其他位。值1用于对较低的16个寄存器进行编码。换句话说,r’rrrr是通过组合evex.r’、evex.r和来自其他字段的其他rrr而形成的。
[0101]
操作码映射字段315(evex字节1,位[3:0]-mmmm)-其内容编码隐含的前导操作码字节(0f、0f 38或0f 3)。
[0102]
数据元素宽度字段364(evex字节2,位[7]-w)用符号evex.w表示。evex.w用于定义数据类型(32位数据元素或64位数据元素)的粒度(大小)。如果仅支持一个数据元素宽度和/或使用操作码的某些方面支持多个数据元素宽度,则该字段在不被需要的意义上是可选的。
[0103]
evex.vvvv 320(evex字节2,位[6:3]-vvvv)-evex.vvvv的作用可以包括以下内容:1)evex.vvvv对第一源寄存器操作对象进行编码,以取反(1的补码)形式指定并且对具有2个或更多个源操作对象的指令有效;2)evex.vvvv对目的地寄存器操作对象进行编码,针对某些向量移位以1的补码形式指定;或3)evex.vvvv不对任何操作对象进行编码,该字段被保留并且应包含411b。因此,evex.vvvv字段320对以取反(1的补码)形式存储的第一源寄存器说明符的4个低阶位进行编码。根据指令,使用额外的不同evex位字段将说明符大小扩展到32个寄存器。
[0104]
evex.u 368类字段(evex字节2,位[2]-u)-如果evex.u=0,则表示a类(支持合并-写入掩码)或evex.u0;如果evex.u=1,则表示b类(支持归零和合并-写入掩码)或evex.u1。
[0105]
前缀编码字段325(evex字节2,位[1:0]-pp)-为基本操作字段提供附加的位。除了以evex前缀格式提供对旧版sse指令的支持以外,这还具有压缩simd前缀的好处(而不是需要字节来表示simd前缀,evex前缀只需要2位)。在一个实施例中,为了支持以旧版格式和
evex前缀格式两者使用simd前缀(66h、f2h、f3h)的旧版sse指令,这些旧版simd前缀被编码到simd前缀编码字段中;并且在运行时在被提供给解码器的pla之前被扩展为旧版simd前缀(因此pla可以执行这些旧版指令的旧版格式和evex格式两者而无需修改)。尽管较新的指令可以将evex前缀编码字段的内容直接用作操作码扩展,但某些实施例为了一致性而以类似的方式进行扩展,但允许这些旧版simd前缀指定不同的含义。替代实施例可以重新设计pla以支持2位simd前缀编码,因此不需要扩展。
[0106]
alpha字段353(evex字节3,位[7]-eh;也称为evex.eh、evex.rs、evex.rl、evex.写入掩码控制和evex.n;也用α表示)-其内容区分不同扩增操作类型中哪一种操作类型将被执行。
[0107]
beta字段355(evex字节3,位[6:4]-sss,也称为evex.s2-0、evex.r2-0、evex.rr1、evex.ll0、evex.llb;也用βββ表示)-区分哪些指定类型的操作将被执行。
[0108]
rex’字段310-这是rex’字段的其余部分,并且是evex.v’位字段(evex字节3,位[3]-v’),其可用于对扩展的32寄存器组的高16位或低16位进行编码。该位以位取反格式存储。值1用于对低位的16个寄存器进行编码。换言之,v’vvvv是通过组合evex.v’、evex.vvvv而形成的。
[0109]
写入掩码字段371(evex字节3,位[2:0]-kkk)-其内容指定对写入掩码寄存器中的寄存器的索引。在一个实施例中,特定值evex.kkk=000具有特殊的行为,其暗示没有写入掩码被用于特定指令(这可以通过多种方式实现,包括使用硬连线到所有指令的写入掩码或绕过掩蔽硬件的硬件)。在合并时,向量掩码允许在执行任何操作(由基本操作和扩增操作指定)期间保护目的地中的任何元素组免于更新;在另一个实施例中,保留目的地的每个元素的旧值,其中对应的掩码位为0。相比之下,在归零时,向量掩码允许在执行任何操作(由基本操作和扩增操作指定)期间将目的地中的任何元素组归零;在一个实施例中,当对应的掩码位具有0值时,目的地的元素被设置为0。此功能的子集是能够控制正在执行的操作的向量长度(即被修改的元素的范围,从第一个到最后一个);然而,修改的元素不必是连续的。因此,写入掩码字段371允许部分向量操作,包括加载、存储、算术、逻辑等。虽然描述了其中写入掩码字段371的内容选择包含要使用的写入掩码的多个写入掩码寄存器中的一个(并且因此写入掩码字段371的内容间接标识要执行的掩蔽)的实施例,但替代实施例替代地或附加地允许掩码写入字段371的内容直接指定要执行的掩蔽。
[0110]
实际操作码字段330(字节4)也称为操作码字节。部分操作码在此字段中指定。
[0111]
mod r/m字段340(字节10)包括mod字段342、寄存器索引字段344和r/m字段346。mod字段342的内容区分存储器访问操作和非存储器访问操作。寄存器索引字段344的作用可以概括为两种情况:编码目的寄存器操作对象或源寄存器操作对象,或者被视为操作码扩展而不用于编码任何指令操作对象。寄存器索引字段344的内容直接地或通过地址生成来指定源操作对象和目的地操作对象的位置,无论它们是在寄存器中还是在存储器中。这些包括足够数量的位以从pxq(例如,32x512、7x128、32x1024、64x1024)寄存器堆选择n个寄存器。虽然在一个实施例中n可以多达三个源和一个目的地寄存器,但替代实施例可以支持更多或更少的源和目的地寄存器(例如,可以支持多达两个源,其中这些源之一也充当目的地;可以支持多达三个源,其中这些源之一也充当目的地;可以支持多达两个源和一个目的地)。
[0112]
r/m字段346的作用可以包括以下内容:对引用存储器地址的指令操作对象进行编码,或者对目的地寄存器操作对象或源寄存器操作对象进行编码。
[0113]
缩放、索引、基址(scale,index,base,sib)字节(字节6)-缩放字段350的内容允许缩放索引字段的内容以用于存储器地址生成(例如,用于使用2缩放*索引+基址的地址生成)。sib.xxx 354和sib.bbb 356-这些字段的内容先前已针对寄存器索引xxxx和bbbb被讨论。
[0114]
位移字段363a(字节7-10)-当mod字段342包含10时,字节7-10为位移字段363a,并且其工作方式与旧版32位位移(disp32)相同,并且以字节粒度工作。这可以用作存储器地址生成的一部分(例如,用于使用2缩放*索引+基址+位移的地址生成)。
[0115]
位移因数字段363b(字节7)-当mod字段342包含01时,字节7为位移因数字段363b。该字段的位置与旧版x86指令集8位位移(disp8)的位置相同,其以字节粒度工作。由于disp8是符号扩展的,其只能在-128到127字节偏移量之间寻址;就64字节缓存行而言,disp8使用8位,其只可以被设置为四个真正有用的值-128、-64、0和64;由于常常需要更大的范围,因此使用disp32;然而,disp32需要4个字节。与disp8和disp32相比,位移因数字段363b是对disp8的重解译;当使用位移因数字段363b时,实际位移由位移因数字段的内容乘以存储器操作数访问的大小(n)来确定。这种类型的位移称为disp8*n。这减少了平均指令长度(用于位移但范围更大的单个字节)。这种压缩位移基于有效位移是存储器访问粒度的倍数的假设,因此不需要对地址偏移的冗余低位进行编码。换言之,位移因数字段363b替代旧版x86指令集8位位移。因此,位移因数字段363b的编码方式与x86指令集8位位移相同(因此modrm/sib编码规则没有变化),唯一的不同之处在于disp8被超载为disp8*n。换句话说,编码规则或编码长度没有变化,只是硬件对位移值的解译发生了变化(需要根据存储器操作对象的大小对位移进行缩放,以获得逐字节的地址偏移)。
[0116]
立即数字段372允许指定立即数(immediate)。该字段在以下意义上是可选的:它不存在于不支持立即数的通用向量友好格式的实现方式中,并且不存在于不使用立即数的指令中。
[0117]
完整操作码字段
[0118]
图3b是示出根据一个实施例的构成完整操作码字段374的指令格式300的字段的框图。具体地,完整操作码字段374包括格式字段382、基本操作字段343和数据元素宽度(w)字段363。基本操作字段343包括前缀编码字段325、操作码映射字段315和实际操作码字段330。
[0119]
寄存器索引字段
[0120]
图3c是示出根据一个实施例的构成寄存器索引字段345的格式300的字段的框图。具体地,寄存器索引字段345包括rex字段305、rex’字段310、modr/m.reg字段344、modr/mr/m字段346、vvvv字段320、xxx字段354和bbb字段356。
[0121]
扩增字段
[0122]
图3d是示出根据一个实施例的构成扩增操作字段的指令格式300的字段的框图。当类别(u)字段368包含0时,其表示evex.u0(a类368a);当其包含1时,其表示evex.u1(b类368b)。当u=0且mod字段342包含11(表示无存储器访问操作)时,alpha字段353(evex字节3,位[7]-eh)被解译为rs字段353a。当rs字段353a包含1(舍入(round)353a.1)时,beta字段
355(evex字节3,位[6:4]-sss)被解译为舍入控制字段355a。舍入控制字段355a包括一位sae字段396和两位舍入操作字段398。当rs字段353a包含0(数据变换353a.2)时,beta字段355(evex字节3,位[6:4]-sss)被解译为三位数据变换字段355b。当u=0且mod字段342包含00、01或3(表示存储器访问操作)时,alpha字段353(evex字节3,位[7]-eh)被解译为逐出提示(eh)字段353b,并且beta字段355(evex字节3,位[6:4]-sss)被解译为三位数据操纵字段355c。
[0123]
当u=1时,alpha字段353(evex字节3,位[7]-eh)被解译为写入掩码控制(z)字段353c。当u=1且mod字段342包含11(表示无存储器访问操作)时,beta字段355的部分(evex字节3,位[4]-s0)被解译为rl字段357a;当其包含1(舍入357a.1)时,beta字段355的其余部分(evex字节3,位[6-5]-s2-1)被解译为舍入操作字段359a,而当rl字段357a包含0(vsize 357.a2)时,beta字段355的其余部分(evex字节3,位[6-5]-s2-1)被解译为向量长度字段359b(evex字节3,位[6-5]-l1-0)。当u=1并且mod字段342包含00、01或10(表示存储器访问操作)时,beta字段355(evex字节3,位[6:4]-sss)被解译为向量长度字段359b(evex字节3,位[6-5]-l1-0)和广播字段357b(evex字节3,位[4]-b)。
[0124]
示例性寄存器体系结构
[0125]
图4是根据一个实施例的寄存器体系结构400的框图。在所示的实施例中,存在32个512位宽的向量寄存器410;这些寄存器被称为zmm0到zmm31。低位16个zmm寄存器的低阶256位覆盖在寄存器ymm0-16上。低位16个zmm寄存器的低阶128位(ymm寄存器的低阶128位)覆盖在寄存器xmm0-15上。换句话说,向量长度字段459b在最大长度和一个或多个其他较短长度之间进行选择,其中每个这样的较短长度是前一长度的一半;并且没有向量长度字段459b的指令模板以最大向量长度操作。此外,在一个实施例中,指令格式400的b类指令模板对紧缩或标量单/双精度浮点数据和紧缩或标量整数数据进行操作。标量操作是对zmm/ymm/xmm寄存器中的最低阶数据元素位置执行的操作;根据实施例,较高阶数据元素位置保持与指令之前相同或者归零。
[0126]
写入掩码寄存器415-在所示实施例中,存在8个写入掩码寄存器(k0到k7),每个大小为114位。在替代实施例中,写入掩码寄存器415的大小为16位。在一些实施例中,向量掩码寄存器k0不能用作写入掩码;当通常指示k0的编码被用于写入掩码时,其选择0xffff的硬连线写入掩码,从而有效地禁用该指令的写入掩码。
[0127]
通用寄存器425-在所示实施例中,存在十六个114位通用寄存器,它们与现有的x86寻址模式一起用于寻址存储器操作对象。这些寄存器通过名称rax、rbx、rcx、rdx、rbp、rsi、rdi、rsp和r8到r15来引用。
[0128]
标量浮点堆栈寄存器堆(x87堆栈)445,其上混叠(aliased)mmx紧缩整数平面寄存器堆450-在所示实施例中,x87堆栈是用于对使用x87指令集扩展的32/64/80位浮点数据执行标量浮点操作的八元素堆栈;而mmx寄存器用于对114位紧缩整数数据执行操作,以及保存用于mmx和xmm寄存器之间执行的一些操作的操作对象。
[0129]
替代实施例可以使用更宽或更窄的寄存器。此外,替代实施例可以使用更多、更少或不同的寄存器堆和寄存器。
[0130]
示例性核心体系结构、处理器和计算机体系结构
[0131]
可以按不同的方式、为了不同的目的、在不同的处理器中实现处理器核心。例如,
这种核心的实施方式可以包括:1)旨在用于通用计算的通用有序核心;2)旨在用于通用计算的高性能通用乱序核心;3)主要旨在用于图形和/或科学(吞吐量)计算的专用核心。不同处理器的实施方式可以包括:1)包括旨在用于通用计算的一个或多个通用有序核心和/或旨在用于通用计算的一个或多个通用乱序核心的cpu(中央处理单元);以及2)包括主要旨在用于图形和/或科学(吞吐量)的一个或多个专用核心的协处理器。这样的不同处理器产生不同的计算机系统体系结构,这些体系结构可以包括:1)协处理器在与cpu分开的芯片上;2)协处理器在与cpu相同的封装中的分开的管芯上;3)协处理器与cpu在同一管芯上(在此情况下,这种协处理器有时被称为专用逻辑,例如集成图形和/或科学(吞吐量)逻辑,或者被称为专用核心);以及4)片上系统,其可以在同一管芯上包括所描述的cpu(有时称为(一个或多个)应用核心或者(一个或多个)应用处理器)、上述的协处理器以及额外的功能。接下来描述示例性核心体系结构,然后是对示例性处理器和计算机体系结构的描述。
[0132]
示例性核心体系结构
[0133]
图5a是示出根据实施例的示例性有序管线和示例性寄存器重命名、乱序发出/执行管线两者的框图。图5b是示出根据实施例的要被包括在处理器中的有序体系结构核心和示例性寄存器重命名、乱序发出/执行体系结构核心的示例性实施例两者的框图。图5a-5b中的实线框示出了有序管线和有序核心,而虚线框的可选添加示出了寄存器重命名、乱序发出/执行管线和核心。考虑到有序方面是乱序方面的子集,将描述乱序方面。
[0134]
在图5a中,处理器管线500包括提取级502、长度解码级504、解码级506、分配级508、重命名级510、调度(也称为派遣或发出)级512、寄存器读取/存储器读取级514、执行级516、写回/存储器写入级518、异常处理级522、以及提交级524。
[0135]
图5b示出了处理器核心590包括耦合到执行引擎单元550的前端单元530,并且执行引擎单元550和前端单元530这两者都耦合到存储器单元570。核心590可以是精简指令集计算(risc)核心、复杂指令集计算(cisc)核心、超长指令字(vliw)核心、或者混合或替代核心类型。作为又一选项,核心590可以是专用核心,例如,网络或通信核心、压缩引擎、协处理器核心、通用计算图形处理单元(gpgpu)核心、图形核心,等等。
[0136]
前端单元530包括分支预测单元532,该分支预测单元532耦合到指令缓存单元534,指令缓存单元534耦合到指令转换后备缓冲器(tlb)536,指令tlb 536耦合到指令提取单元538,指令提取单元538耦合到解码单元540。解码单元540(或解码器)可以对指令进行解码,并且生成一个或多个微操作、微代码入口点、微指令、其他指令或其他控制信号作为输出,这些微操作、微代码入口点、微指令、其他指令或其他控制信号是从原始指令解码来的,或者以其他方式反映原始指令,或者是从原始指令得出的。可以利用各种不同的机制来实现解码单元540。合适机制的示例包括但不限于查找表、硬件实现方式、可编程逻辑阵列(pla)、微代码只读存储器(rom)等。在一个实施例中,核心590包括微代码rom或其他介质,其为特定宏指令存储微代码(例如,在解码单元540中或者以其他方式在前端单元530内)。解码单元540耦合到执行引擎单元550中的重命名/分配器单元552。
[0137]
执行引擎单元550包括重命名/分配器单元552,该重命名/分配器单元552耦合到引退单元554和一组一个或多个调度器单元556。(一个或多个)调度器单元556表示任何数目的不同调度器,包括预留站、中央指令窗口等。(一个或多个)调度器单元556耦合到(一个或多个)物理寄存器堆单元558。(一个或多个)物理寄存器堆单元558中的每一个表示一个
或多个物理寄存器堆,这些物理寄存器堆中的不同物理寄存器堆存储一个或多个不同的数据类型,例如标量整数、标量浮点、紧缩整数、紧缩浮点、向量整数、向量浮点、状态(例如,作为要执行的下一指令的地址的指令指针)等。在一个实施例中,(一个或多个)物理寄存器堆单元558包括向量寄存器单元、写入掩码寄存器单元、以及标量寄存器单元。这些寄存器单元可以提供体系结构式向量寄存器、向量掩码寄存器、以及通用寄存器。(一个或多个)物理寄存器堆单元558与引退单元554交叠以说明可以实现寄存器重命名和乱序执行的各种方式(例如,利用(一个或多个)重排序缓冲器和(一个或多个)引退寄存器堆;利用(一个或多个)未来文件、(一个或多个)历史缓冲器、以及(一个或多个)引退寄存器堆;利用寄存器图和寄存器的池;等等)。引退单元554和(一个或多个)物理寄存器堆单元558耦合到(一个或多个)执行集群560。(一个或多个)执行集群560包括一组一个或多个执行单元562和一组一个或多个存储器访问单元564。执行单元562可以对各种类型的数据(例如,标量浮点、紧缩整数、紧缩浮点、向量整数、向量浮点)执行各种操作(例如,移位、加法、减法、乘法)。虽然一些实施例可以包括专用于特定功能或功能集合的若干个执行单元,但其他实施例可以只包括一个执行单元或者全部执行所有功能的多个执行单元。(一个或多个)调度器单元556、(一个或多个)物理寄存器堆单元558和(一个或多个)执行集群560被示为可能是多个,因为特定实施例为特定类型的数据/操作创建单独的管线(例如,标量整数管线、标量浮点/紧缩整数/紧缩浮点/向量整数/向量浮点管线、和/或存储器访问管线,它们各自具有其自身的调度器单元、(一个或多个)物理寄存器堆单元和/或执行集群-并且在单独的存储器访问管线的情况下,实现了特定实施例,其中只有此管线的执行集群具有(一个或多个)存储器访问单元564)。还应当理解,在使用分开的管线的情况下,这些管线中的一个或多个可以乱序发出/执行,并且其余管线是有序的。
[0138]
存储器访问单元564的集合耦合到存储器单元570,存储器单元570包括数据tlb单元572,数据tlb单元572耦合到数据缓存单元574,数据缓存单元574耦合到第2级(l2)缓存单元576。在一个示例性实施例中,存储器访问单元564可以包括加载单元、存储地址单元、以及存储数据单元,它们中的每一者被耦合到存储器单元570中的数据tlb单元572。指令缓存单元534进一步耦合到存储器单元570中的第2级(l2)缓存单元576。l2缓存单元576耦合到一个或多个其他级别的缓存并且最终耦合到主存储器。
[0139]
作为示例,示例性寄存器重命名、乱序发出/执行核心体系结构可以如下实现管线500:1)指令提取538执行提取和长度解码级502和504;2)解码单元540执行解码级506;3)重命名/分配器单元552执行分配级508和重命名级510;4)(一个或多个)调度器单元556执行调度级512;5)(一个或多个)物理寄存器堆单元558和存储器单元570执行寄存器读取/存储器读取级514;执行集群560执行执行级516;6)存储器单元570和(一个或多个)物理寄存器堆单元558执行写回/存储器写入级518;7)在异常处理级522中可涉及各种单元;并且8)引退单元554和(一个或多个)物理寄存器堆单元558执行提交级524。
[0140]
核心590可以支持一个或多个指令集(例如,x86指令集(具有已随着较新版本添加的一些扩展);加利福尼亚州森尼维尔市的mips技术公司的mips指令集;加利福尼亚州森尼维尔市的arm控股公司的arm指令集(具有可选的额外扩展,例如neon)),包括本文描述的(一个或多个)指令。在一个实施例中,核心590包括逻辑以支持紧缩数据指令集扩展(例如,avx1、avx2),从而允许由许多多媒体应用使用的操作利用紧缩数据来执行。
[0141]
图6示出了根据实施例的soc封装的框图。如图6所示,soc 602包括一个或多个中央处理单元(cpu)核心620、一个或多个图形处理器单元(gpu)核心630、输入/输出(i/o)接口640、以及存储器控制器642。soc封装602的各种组件可以耦合到例如本文参考其他附图所论述的互连或总线。另外,soc封装602可以包括更多或更少的组件,例如本文参考其他附图所论述的那些组件。此外,soc封装602的每个组件可以包括一个或多个其他组件,例如,如本文参考其他附图所论述的组件。在一个实施例中,在一个或多个集成电路(ic)管芯上提供soc封装602(及其组件),例如,这些管芯被封装成单个半导体器件。
[0142]
如图6所示,soc封装602经由存储器控制器642耦合到存储器660。在实施例中,存储器660(或者其一部分)可以被集成在soc封装602上。
[0143]
i/o接口640可以耦合到一个或多个i/o设备670,例如,经由如本文参考其他附图所论述的互连和/或总线。(一个或多个)i/o设备670可以包括以下各项中的一项或多项:键盘、鼠标、触摸板、显示器、图像/视频捕捉设备(例如相机或者摄像机/录像机)、触摸屏、扬声器等。
[0144]
图7是根据实施例的处理系统700的框图。在各种实施例中,系统700包括一个或多个处理器702和一个或多个图形处理器708,并且可以是单处理器桌面系统、多处理器工作站系统、或者具有大量处理器702或处理器核心707的服务器系统。在一个实施例中,系统700是包含在移动、手持或者嵌入式设备中使用的片上系统(soc或soc)集成电路内的处理平台。
[0145]
系统700的实施例可以包括以下各项或者被包含在以下各项内:基于服务器的游戏平台、包括游戏和媒体控制台的游戏控制台、移动游戏控制台、手持游戏控制台、或者在线游戏控制台。在一些实施例中,系统700是移动电话、智能电话、平板计算设备、或者移动互联网设备。数据处理系统700还可以包括可穿戴设备、与可穿戴设备耦合或者被集成在可穿戴设备内,例如智能手表可穿戴设备、智能眼镜设备、增强现实设备、或者虚拟现实设备。在一些实施例中,数据处理系统700是具有一个或多个处理器702和由一个或多个图形处理器708生成的图形界面的电视或者机顶盒设备。
[0146]
在一些实施例中,一个或多个处理器702各自包括一个或多个处理器核心707以处理指令,这些指令在被执行时,执行系统和用户软件的操作。在一些实施例中,一个或多个处理器核心707中的每一者被配置为处理特定的指令集709。在一些实施例中,指令集709可以促进复杂指令集计算(cisc)、精简指令集计算(risc)、或者经由超长指令字(vliw)的计算。多个处理器核心707可以各自处理不同的指令集709,该指令集709可以包括促进对其他指令集的仿真的指令。处理器核心707也可以包括其他处理设备,例如数字信号处理器(dsp)。
[0147]
在一些实施例中,处理器702包括缓存存储器704。取决于体系结构,处理器702可以具有单个内部缓存或者多个级别的内部缓存。在一些实施例中,在处理器702的各种组件之间共享缓存存储器。在一些实施例中,处理器702还使用外部缓存(例如,第3级(l3)缓存或者最后一级缓存(llc))(未示出),可以使用已知的缓存一致性技术在处理器核心707之间共享这些外部缓存。在处理器702中还包括寄存器堆706,处理器702可以包括用于存储不同类型的数据的不同类型的寄存器(例如,整数寄存器、浮点寄存器、状态寄存器、以及指令指针寄存器)。一些寄存器可以是通用寄存器,而其他寄存器可以是特定于处理器702的设
计的。
[0148]
在一些实施例中,处理器702耦合到处理器总线710以在处理器702和系统700中的其他组件之间传输通信信号,例如地址、数据、或者控制信号。在一个实施例中,系统700使用示例性“中枢(hub)”系统体系结构,包括存储器控制器中枢716和输入输出(i/o)控制器中枢730。存储器控制器中枢716促进存储器设备和系统700的其他组件之间的通信,而i/o控制器中枢(ich)730经由本地i/o总线来提供与i/o设备的连接。在一个实施例中,存储器控制器中枢716的逻辑被集成在处理器内。
[0149]
存储器设备720可以是动态随机存取存储器(dram)设备、静态随机存取存储器(sram)设备、闪存设备、相变存储器设备、或者具有合适的性能以用作进程存储器的一些其他存储器设备。在一个实施例中,存储器设备720可以充当系统700的系统存储器,以存储数据722和指令721以供在一个或多个处理器702执行应用或进程时使用。存储器控制器中枢716还与可选的外部图形处理器712耦合,该外部图形处理器712可以与处理器702中的一个或多个图形处理器708进行通信以执行图形和媒体操作。
[0150]
在一些实施例中,ich 730使得外围设备能够经由高速i/o总线连接到存储器设备720和处理器702。i/o外围设备包括但不限于音频控制器746、固件接口728、无线收发器726(例如,wi-fi、蓝牙)、数据存储设备724(例如,硬盘驱动器、闪存等)、以及用于将传统(例如,个人系统2(personal system 2,ps/2))设备耦合到系统的传统i/o控制器740。一个或多个通用串行总线(usb)控制器742连接输入设备,例如键盘和鼠标744的组合。网络控制器734也可以耦合到ich 730。在一些实施例中,高性能网络控制器(未示出)耦合到处理器总线710。将理解,所示出的系统700是示例性的,而不是限制性的,因为也可以使用不同配置的其他类型的数据处理系统。例如,i/o控制器中枢730可以被集成在一个或多个处理器702内,或者存储器控制器中枢716和i/o控制器中枢730可以被集成到分立的外部图形处理器(例如,外部图形处理器712)中。
[0151]
图8是处理器800的实施例的框图,处理器800具有一个或多个处理器核心802a至802n、集成存储器控制器814和集成图形处理器808。图8中的具有与本文的任何其他附图中的元素相同的附图标记(或名称)的那些元素可以以与本文别处所描述的相似的任何方式操作或工作,但不限于此。处理器800可以包括额外的核心,多达并包括由虚线框表示的额外核心802n。处理器核心802a至802n中的每一者包括一个或多个内部缓存单元804a至804n。在一些实施例中,每个处理器核心还能够访问一个或多个共享缓存单元806。
[0152]
内部缓存单元804a至804n和共享缓存单元806代表处理器800内的缓存存储器层次体系。该缓存存储器层次体系可以包括每个处理器核心内的至少一级的指令和数据缓存、以及一个或多个级别的共享中间级缓存,例如第2级(l2)、第3级(l3)、第4级(l4)或者其他级别的缓存,其中外部存储器之前的最高级别缓存被分类为llc。在一些实施例中,缓存一致性逻辑维持各种缓存单元806和804a至804n之间的一致性。
[0153]
在一些实施例中,处理器800还可以包括一组一个或多个总线控制器单元816和系统代理核心810。一个或多个总线控制器单元816管理一组外围设备总线,例如一个或多个外围设备组件互连总线(例如,pci、快速pci)。系统代理核心810为各种处理器组件提供管理功能。在一些实施例中,系统代理核心810包括一个或多个集成存储器控制器814,以管理对各种外部存储器设备(未示出)的访问。
[0154]
在一些实施例中,处理器核心802a至802n中的一个或多个包括对同时多线程的支持。在这样的实施例中,系统代理核心810包括用于在多线程处理期间协调和操作核心802a至802n的组件。系统代理核心810还可以包括功率控制单元(pcu),该功率控制单元包括调节处理器核心802a至802n和图形处理器808的功率状态的逻辑和组件。
[0155]
在一些实施例中,处理器800还包括图形处理器808以执行图形处理操作。在一些实施例中,图形处理器808与一组共享缓存单元806以及系统代理核心810(包括一个或多个集成存储器控制器814)相耦合。在一些实施例中,显示控制器811与图形处理器808耦合,以驱动图形处理器输出到一个或多个耦合的显示器。在一些实施例中,显示控制器811可以是经由至少一个互连与图形处理器相耦合的单独模块,或者可以被集成在图形处理器808或者系统代理核心810内。
[0156]
在一些实施例中,使用基于环的互连单元812来耦合处理器800的内部组件。然而,也可以使用替代的互连单元,例如点到点互连、交换式互连或者其他技术,包括本领域公知的技术。在一些实施例中,图形处理器808经由i/o链路813与环形互连812耦合。
[0157]
示例性i/o链路813代表多个种类的i/o互连中的至少一种,包括封装上i/o互连,其促进了各种处理器组件和高性能嵌入式存储器模块818之间的通信,例如edram(或者嵌入式dram)模块。在一些实施例中,处理器核心802a至802n中的每一者和图形处理器808使用嵌入式存储器模块818作为共享的最后一级缓存。
[0158]
在一些实施例中,处理器核心802a至802n是执行相同指令集体系结构的同质核心。在另一实施例中,处理器核心802a至802n就指令集体系结构(isa)而言是异质的,其中处理器核心802a至802n中的一个或多个执行第一指令集,而其他核心中的至少一个执行第一指令集的子集或者不同的指令集。在一个实施例中,处理器核心802a至802n就微体系结构而言是异质的,其中具有相对更高的功率消耗的一个或多个核心与具有更低的功率消耗的一个或多个功率核心相耦合。此外,处理器800可以被实现在一个或多个芯片上,或者被实现为soc集成电路,该soc集成电路除了其他组件以外还具有图示的组件。
[0159]
图9是图形处理器900的框图,该图形处理器900可以是分立的图形处理单元,或者可以是与多个处理核心相集成的图形处理器。在一些实施例中,图形处理器经由存储器映射的i/o接口与图形处理器上的寄存器和放入处理器存储器中的命令进行通信。在一些实施例中,图形处理器900包括存储器接口914以访问存储器。存储器接口914可以是与本地存储器、一个或多个内部缓存、一个或多个共享外部缓存和/或系统存储器的接口。
[0160]
在一些实施例中,图形处理器900还包括显示控制器902,以驱动显示输出数据到显示设备920。显示控制器902包括用于视频或用户界面元素的多个层的显示和合成的一个或多个覆盖平面的硬件。在一些实施例中,图形处理器900包括视频编解码器引擎906,以用于将媒体编码到一个或多个媒体编码格式、从一个或多个媒体编码格式解码媒体、或者在一个或多个媒体编码格式之间对媒体进行转码,这些媒体编码格式包括但不限于:运动图片专家组(moving picture experts group,mpeg)格式,例如mpeg-2;高级视频编码(advanced video coding,avc)格式,例如h.264/mpeg-4avc;以及电影电视工程师协会(society of motion picture&television engineers,smpte)321m/vc-1;以及联合摄影专家组(joint photographic experts group,jpeg)格式,例如jpeg和运动jpeg(mjpeg)格式。
[0161]
在一些实施例中,图形处理器900包括块图像传送(block image transfer,blit)引擎904,以执行二维(2d)光栅化器操作,包括例如位边界块传送。然而,在一个实施例中,使用图形处理引擎(graphics processing engine,gpe)910的一个或多个组件来执行3d图形操作。在一些实施例中,图形处理引擎910是计算引擎以用于执行图形操作,包括三维(3d)图形操作和媒体操作。
[0162]
在一些实施例中,gpe 910包括3d管线912,以用于执行3d操作,例如使用作用于3d基元形状(例如,矩形、三角形等)的处理函数来渲染三维图像和场景。3d管线912包括可编程的和固定的功能元素,这些功能元素执行元素内的各种任务和/或到3d/媒体子系统915的派生执行线程。虽然3d管线912可以被用于执行媒体操作,但gpe 910的实施例还包括专门用于执行媒体操作是媒体管线916,例如视频后期处理和图像增强。
[0163]
在一些实施例中,媒体管线916包括固定功能或者可编程的逻辑单元,以代替或者代表视频编解码器引擎906来执行一个或多个专门的媒体操作,例如视频解码加速、视频解交织以及视频编码加速。在一些实施例中,媒体管线916还包括线程派生单元,用于派生线程来在3d/媒体子系统915上执行。所派生的线程在3d/媒体子系统915中包括的一个或多个图形执行单元上执行媒体操作的计算。
[0164]
在一些实施例中,3d/媒体子系统915包括用于执行由3d管线912和媒体管线916派生的线程的逻辑。在一个实施例中,管线将线程执行请求发送到3d/媒体子系统915,该3d/媒体子系统915包括用于仲裁和派遣各种请求到可用线程执行资源的线程派遣逻辑。执行资源包括处理3d和媒体线程的图形执行单元的阵列。在一些实施例中,3d/媒体子系统915包括用于线程指令和数据的一个或多个内部缓存。在一些实施例中,该子系统还包括共享存储器,该共享存储器包括寄存器和可寻址存储器,以在线程之间共享数据并且存储输出数据。
[0165]
以下示例涉及进一步的实施例。
[0166]
示例1包括一种用于提供寄存器堆预提取的装置,所述装置包括:寄存器堆,所述寄存器堆由多个寄存器形成,其中,所述寄存器堆包括多个寄存器堆条目;以及执行电路,所述执行电路用于使得发出预提取请求,以使得将数据从数据缓存单元预提取到所述寄存器堆的条目中,其中,所述预提取请求是响应于加载操作的分配而发出的。
[0167]
示例2包括一个或多个示例,其中,所述执行电路用于将对是否要对所述预提取请求执行预提取操作的指示存储在预提取表中。
[0168]
示例3包括一个或多个示例,其中,所述预提取操作是至少部分地基于要从所述预提取表读取的预测地址来执行的。
[0169]
示例4包括一个或多个示例,其中,响应于所述预测地址与所述加载操作的地址之间的匹配,所述寄存器堆的条目中的被预提取的数据将被提供给取决于于所述加载操作的一个或多个操作。
[0170]
示例5包括一个或多个示例,其中,响应于所述预测地址与所述加载操作的地址之间的不匹配,所述加载操作从所述数据缓存单元访问所述数据并且将所访问的数据提供给取决于所述加载操作的一个或多个操作。
[0171]
示例6包括一个或多个示例,其中,所述指示基于由下列项之一提供的提示而被更新:指令、编译器、软件应用、操作系统、软件程序员或用户。
[0172]
示例7包括一个或多个示例,其中,所述数据缓存单元包括第1级(l1)缓存。
[0173]
示例8包括一个或多个示例,其中,所述预提取请求是响应于所述加载操作在重排序缓冲器中的分配而发出的。
[0174]
示例9包括一个或多个示例,其中,所述预提取请求是响应于所述加载操作的分配并且在重命名阶段之后发出的。
[0175]
示例10包括一个或多个示例,还包括预留站,所述预留站用于存储一个或多个位以跟踪响应于所述预提取请求而调用的预提取操作的进度。
[0176]
示例11包括一个或多个示例,其中,所述执行电路用于针对可用带宽或资源所允许的尽可能多的加载操作发出所述预提取请求。
[0177]
示例12包括一个或多个示例,其中,所述执行电路用于使得以比正在进行的加载操作旁路、未决的硬件预提取请求、或软件预提取请求更低的优先级来发出所述预提取请求。
[0178]
示例13包括一个或多个示例,其中,具有一个或多个处理器核心的处理器包括所述寄存器堆和所述执行电路。
[0179]
示例14包括一个或多个示例,还包括:处理器,具有一个或多个处理器核心;所述处理器包括形成所述寄存器堆的所述多个寄存器;以及总线,用于在所述一个或多个处理器核心与所述数据缓存之间传送数据。
[0180]
示例15包括一种用于提供寄存器堆预提取的方法,所述方法包括:将多个寄存器堆条目存储在寄存器堆中,其中,所述寄存器堆包括多个寄存器;以及发出预提取请求以使得将数据从数据缓存单元预提取到所述寄存器堆的条目中,其中,所述预提取请求是响应于加载操作的分配而发出的。
[0181]
示例16包括一个或多个示例,还包括:将对是否要对所述预提取请求执行预提取操作的指示存储在预提取表中。
[0182]
示例17包括一个或多个示例,还包括:至少部分地基于要从所述预提取表读取的预测地址来执行所述预提取操作。
[0183]
示例18包括一个或多个示例,还包括:响应于所述预测地址与所述加载操作的地址之间的匹配,将所述寄存器堆的条目中的被预提取的数据提供给取决于所述加载操作的一个或多个操作。
[0184]
示例19包括一种机器可读介质,包括代码,所述代码在被执行时使得机器执行根据任一示例所述的操作。
[0185]
示例20包括一种设备,包括用于执行根据任一示例所述的操作的装置。
[0186]
在该说明书中,阐述了许多具体细节以提供更透彻的理解。然而,对于本领域的技术人员来说显而易见的是,可以在没有这些具体细节中的一个或多个的情况下实践本文描述的实施例。在其他实例中,没有描述公知的特征以免混淆本实施例的细节。
[0187]
在各种实施例中,参考图1a及其后各图论述的一个或多个操作可以由参考任何附图论述的一个或多个组件(本文可互换地称为“逻辑”)来执行。
[0188]
在各种实施例中,本文论述的操作,例如参考图1a及其后各图论述的操作,可以被实现为硬件(例如,逻辑电路)、软件、固件或者其组合,其可以被提供为计算机程序产品,例如,包括一个或多个有形(例如,非暂态)机器可读或计算机可读介质,其上存储有用于对计
算机进行编程以执行本文论述的过程的指令(或者软件程序)。该机器可读介质可以包括存储设备,例如关于附图论述的那些。
[0189]
此外,这种计算机可读介质可以作为计算机程序产品被下载,其中该程序可以经由通信链路(例如,总线、调制解调器、或者网络连接)通过在载波或其他传播介质中提供的数据信号的方式被从远程计算机(例如,服务器)传送到请求方计算机(例如,客户端)。
[0190]
本说明书中提及“一个实施例”或“实施例”表示结合该实施例描述的特定特征、结构和/或特性可以被包括在至少一个实现方式中。在本说明书中各种地方出现短语“在一个实施例中”可能全都指的是同一实施例,也可能不是全都指同一实施例。
[0191]
另外,在说明书和权利要求中,可以使用术语“耦合”和“连接”及其衍生词。在一些实施例中,“连接”可以被用于指示两个或更多个元素与彼此发生直接实体接触或电气接触。“耦合”可以表示两个或更多个元素发生直接实体接触或电气接触。然而,“耦合”也可以表示两个或更多个元素可能没有与彼此发生实体接触,但仍可与彼此合作或交互。
[0192]
因此,尽管以特定于结构特征和/或方法动作的语言描述了实施例,但要理解的是,所要求保护的主题可以不限于所描述的具体特征或动作。更确切地说,这些具体特征和动作是作为实现所要求保护的主题的样本形式被公开的。
技术特征:
1.一种用于提供寄存器堆预提取的装置,所述装置包括:寄存器堆,所述寄存器堆由多个寄存器形成,其中,所述寄存器堆包括多个寄存器堆条目;以及执行电路,所述执行电路用于使得发出预提取请求,以使得将数据从数据缓存单元预提取到所述寄存器堆的条目中,其中,所述预提取请求是响应于加载操作的分配而发出的。2.根据权利要求1所述的装置,其中,所述执行电路用于将对是否要对所述预提取请求执行预提取操作的指示存储在预提取表中。3.根据权利要求2所述的装置,其中,所述预提取操作是至少部分地基于要从所述预提取表读取的预测地址来执行的。4.根据权利要求3所述的装置,其中,响应于所述预测地址与所述加载操作的地址之间的匹配,所述寄存器堆的条目中的被预提取的数据将被提供给取决于于所述加载操作的一个或多个操作。5.根据权利要求3所述的装置,其中,响应于所述预测地址与所述加载操作的地址之间的不匹配,所述加载操作从所述数据缓存单元访问所述数据并且将所访问的数据提供给取决于所述加载操作的一个或多个操作。6.根据权利要求2所述的装置,其中,所述指示基于由下列项之一提供的提示而被更新:指令、编译器、软件应用、操作系统、软件程序员或用户。7.根据权利要求1所述的装置,其中,所述数据缓存单元包括第1级(l1)缓存。8.根据权利要求1所述的装置,其中,所述预提取请求是响应于所述加载操作在重排序缓冲器中的分配而发出的。9.根据权利要求1所述的装置,其中,所述预提取请求是响应于所述加载操作的分配并且在重命名阶段之后发出的。10.根据权利要求1所述的装置,还包括预留站,所述预留站用于存储一个或多个位以跟踪响应于所述预提取请求而调用的预提取操作的进度。11.根据权利要求1所述的装置,其中,所述执行电路用于针对可用带宽或资源所允许的尽可能多的加载操作发出所述预提取请求。12.根据权利要求11所述的装置,其中,所述执行电路用于使得以比正在进行的加载操作旁路、未决的硬件预提取请求、或软件预提取请求更低的优先级来发出所述预提取请求。13.根据权利要求1所述的装置,其中,具有一个或多个处理器核心的处理器包括所述寄存器堆和所述执行电路。14.根据权利要求1所述的装置,还包括:处理器,具有一个或多个处理器核心;所述处理器包括形成所述寄存器堆的所述多个寄存器;以及总线,用于在所述一个或多个处理器核心与所述数据缓存之间传送数据。15.一种用于提供寄存器堆预提取的方法,所述方法包括:将多个寄存器堆条目存储在寄存器堆中,其中,所述寄存器堆包括多个寄存器;以及发出预提取请求以使得将数据从数据缓存单元预提取到所述寄存器堆的条目中,其中,所述预提取请求是响应于加载操作的分配而发出的。
16.根据权利要求15所述的方法,还包括:将对是否要对所述预提取请求执行预提取操作的指示存储在预提取表中。17.根据权利要求16所述的方法,还包括:至少部分地基于要从所述预提取表读取的预测地址来执行所述预提取操作。18.根据权利要求17所述的方法,还包括:响应于所述预测地址与所述加载操作的地址之间的匹配,将所述寄存器堆的条目中的被预提取的数据提供给取决于所述加载操作的一个或多个操作。19.一种机器可读介质,包括代码,所述代码在被执行时使得机器执行根据权利要求15至18中任一项所述的操作。20.一种设备,包括用于执行根据权利要求15至18中任一项所述的操作的装置。
技术总结
本公开涉及寄存器堆预提取。描述了与寄存器堆预提取相关的技术。在实施例中,逻辑电路使得发出预提取请求,以将数据从数据缓存单元复制到寄存器堆。还公开并要求保护其他实施例。例。例。
技术研发人员:苏丹书
受保护的技术使用者:英特尔公司
技术研发日:2022.11.28
技术公布日:2023/7/11
版权声明
本文仅代表作者观点,不代表航空之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)
飞行汽车 https://www.autovtol.com/
