CN114675889A - 用于对函数调用的基于硬件的记忆化的装置和方法 - Google Patents
用于对函数调用的基于硬件的记忆化的装置和方法 Download PDFInfo
- Publication number
- CN114675889A CN114675889A CN202111407634.5A CN202111407634A CN114675889A CN 114675889 A CN114675889 A CN 114675889A CN 202111407634 A CN202111407634 A CN 202111407634A CN 114675889 A CN114675889 A CN 114675889A
- Authority
- CN
- China
- Prior art keywords
- function
- uops
- instance
- processing pipeline
- hardware
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 46
- 238000012545 processing Methods 0.000 claims abstract description 68
- 239000000872 buffer Substances 0.000 claims abstract description 49
- 230000006870 function Effects 0.000 claims description 235
- 230000015654 memory Effects 0.000 claims description 65
- 238000007667 floating Methods 0.000 claims description 16
- 230000001343 mnemonic effect Effects 0.000 claims description 16
- 238000012795 verification Methods 0.000 claims description 12
- 230000004044 response Effects 0.000 claims description 9
- 238000004364 calculation method Methods 0.000 claims description 5
- 230000001419 dependent effect Effects 0.000 claims description 4
- 238000010200 validation analysis Methods 0.000 claims description 4
- 238000010586 diagram Methods 0.000 description 25
- 239000003795 chemical substances by application Substances 0.000 description 6
- 238000004891 communication Methods 0.000 description 6
- 230000006835 compression Effects 0.000 description 5
- 238000007906 compression Methods 0.000 description 5
- 230000007246 mechanism Effects 0.000 description 5
- 230000014759 maintenance of location Effects 0.000 description 4
- 238000004519 manufacturing process Methods 0.000 description 4
- 238000007792 addition Methods 0.000 description 3
- 238000005516 engineering process Methods 0.000 description 3
- 230000002688 persistence Effects 0.000 description 3
- 230000008569 process Effects 0.000 description 3
- 230000003068 static effect Effects 0.000 description 3
- 101100135890 Caenorhabditis elegans pdi-6 gene Proteins 0.000 description 2
- 238000003491 array Methods 0.000 description 2
- 230000008859 change Effects 0.000 description 2
- 238000013500 data storage Methods 0.000 description 2
- 238000013461 design Methods 0.000 description 2
- 239000000463 material Substances 0.000 description 2
- 238000007620 mathematical function Methods 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 230000009466 transformation Effects 0.000 description 2
- 238000000844 transformation Methods 0.000 description 2
- 238000013519 translation Methods 0.000 description 2
- 238000004590 computer program Methods 0.000 description 1
- 230000008878 coupling Effects 0.000 description 1
- 238000010168 coupling process Methods 0.000 description 1
- 238000005859 coupling reaction Methods 0.000 description 1
- 238000001514 detection method Methods 0.000 description 1
- 229910052754 neon Inorganic materials 0.000 description 1
- GKAOGPIIYCISHV-UHFFFAOYSA-N neon atom Chemical compound [Ne] GKAOGPIIYCISHV-UHFFFAOYSA-N 0.000 description 1
- 230000002093 peripheral effect Effects 0.000 description 1
- 238000013442 quality metrics Methods 0.000 description 1
- 230000000306 recurrent effect Effects 0.000 description 1
- 230000009467 reduction Effects 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 238000004088 simulation Methods 0.000 description 1
- 239000000758 substrate Substances 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3802—Instruction prefetching
- G06F9/3804—Instruction prefetching for branches, e.g. hedging, branch folding
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3824—Operand accessing
- G06F9/383—Operand prefetching
- G06F9/3832—Value prediction for operands; operand history buffers
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/22—Microcontrol or microprogram arrangements
- G06F9/223—Execution means for microinstructions irrespective of the microinstruction function, e.g. decoding of microinstructions and nanoinstructions; timing of microinstructions; programmable logic arrays; delays and fan-out problems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
- G06F9/3838—Dependency mechanisms, e.g. register scoreboarding
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
- G06F9/3842—Speculative instruction execution
- G06F9/3844—Speculative instruction execution using dynamic branch prediction, e.g. using branch history tables
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3861—Recovery, e.g. branch miss-prediction, exception handling
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3867—Concurrent instruction execution, e.g. pipeline or look ahead using instruction pipelines
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Advance Control (AREA)
Abstract
本申请公开了用于对函数调用的基于硬件的记忆化的装置和方法。本文描述了用于对重复函数调用进行记忆化的装置和方法。一种装置实施例包括:uop缓冲器电路,用于基于来自处理流水线的引退微操作(uop)标识函数以用于记忆化;记忆化引退电路,用于生成函数的签名,该签名包括函数的输入数据和输出数据;记忆化数据结构,用于存储签名;以及预测器电路,用于检测要由处理流水线执行的函数的实例,并且当与函数相关联的置信度水平高于阈值时响应性地将与实例相关联的uop的第一子集从执行排除。然后数据依赖于实例的执行的一条或多条指令被提供来自记忆化数据结构的函数的输出数据。
Description
技术领域
本文所述的本发明的实施例总体上关于计算机处理器架构。具体而言,本公开关于用于减少指令执行的对函数调用的基于硬件的记忆化。
背景技术
函数调用是在应用中使用的用于完成特定功能的编程结构体。当功能被经常使用时,可以经常从应用中的不同位置或从不同应用作出函数调用的多个实例。基于输入参数,函数的输出可以变化。然而,一般而言,当在函数调用中使用相同的输入参数时,产生相同的输出。因此,如果函数的输入参数和输出值被学习并且被捕捉到表中,则可以避免对函数的重复执行,因为可以通过后函数指令流从表中简单地获得输出值。对执行块的跟踪和根据表对它们的执行进行模仿被称为记忆化(memoization)。目前用于对应用函数块进行记忆化的技术仅存在于软件中,并且往往聚焦于数学函数。因此,需要更强健的聚焦于硬件的解决方案。
附图说明
通过参考用于说明本发明的实施例的以下描述和附图,可最好地理解本发明。在附图中:
图1是图示根据实施例的处理流水线中的基于硬件的函数记忆化的概览的框图;
图2是图示用于函数记忆化的硬件平台的框图,在该硬件平台上可以实现本公开的实施例;
图3图示记忆化表的实施例的逻辑示图;
图4图示前端记忆化预测器表的实施例的逻辑示图;
图5图示经记忆化的uop的实施例;
图6是图示根据实施例的用于对函数进行记忆化的方法的流程图;
图7A是图示根据本发明的实施例的示例性有序流水线和示例性的寄存器重命名的乱序发布/执行流水线两者的框图;
图7B是图示根据本发明的实施例的要包括在处理器中的有序架构核的示例性实施例和示例性的寄存器重命名的乱序发布/执行架构核两者的框图;
图8是根据本发明的实施例的具有集成存储器控制器和图形器件的单核处理器和多核处理器的框图;
图9图示根据本发明的一个实施例的系统的框图;
图10图示根据本发明的实施例的第二系统的框图;
图11图示根据本发明的实施例的第三系统的框图;
图12图示根据本发明的实施例的芯片上系统(SoC)的框图;以及
图13图示根据本发明的实施例的、对照使用软件指令转换器将源指令集中的二进制指令转换成目标指令集中的二进制指令的框图。
具体实施方式
本文描述了用于改善处理器性能的用于对函数调用的基于硬件的记忆化的装置和方法的实施例。在下列描述中,阐述众多具体细节以提供对本发明的实施例的透彻理解。然而,相关领域技术人员将会领会,可以在没有这些具体细节中的一个或多个具体细节的情况下实施本发明,或者利用其他方法、组件、材料等来实施本发明。在其他实例中,未详细示出或描述公知的结构、材料或操作,以避免使本发明的各方面模糊。
贯穿本说明书对“一个实施例”或“实施例”的引用意指结合该实施例描述的特定的特征、结构或特性被包括在本发明的至少一个实施例中。因此,短语“在一个实施例中”或“在实施例中”在贯穿本说明书的各个位置的出现不必全部指代同一个实施例。此外,在一个或多个实施例中,能以任何合适的方式来组合特定的特征、结构或特性。为清楚起见,本文附图中的单独的组件可通过附图中它们的标签而不是通过特定的附图标记来引用。
函数调用是在应用中使用的用于完成特定功能的编程结构体。如果功能被经常使用,则可以从同一应用中的不同位置或从不同应用作出同一函数调用的多个实例。一些函数调用需要输入参数,另一些函数调用不需要输入参数。对同一函数的不同调用不总是产生相同结果。具体而言,取决于函数的输入参数,由函数产生的输出可能变化。然而,当在对同一函数的不同调用中使用相同输入参数时(即,同一函数调用的不同实例),跨不同调用产生的输出应当相同。因此,如果函数调用的输入参数和输出值被学习并且被捕捉到表中,可以通过使用来自表的所存储的输出值来简单地模拟具有相同输入参数的未来函数调用,由此避免冗余的执行。具体而言,可以从表中快速地获得输出值并且将其提供给数据依赖于函数调用的后续指令,而无需实际上执行该函数。对函数调用的执行块的跟踪和根据表对它们的执行进行模仿被称为记忆化。目前用于对应用函数进行记忆化的技术仅存在于软件中,并且大部分聚焦于数学函数。因此,需要更强健的聚焦于硬件的解决方案。
本发明的各方面涉及用于减少冗余执行的对应用函数内的代码的基于硬件的记忆化。每个函数包括函数块。根据实施例,函数块由“call(调用)…return(返回)”序列定义。例如,在指令流中,函数以调用指令开始并且以返回指令结束。调用指令和返回指令以及跨越它们之间的任何指令一起形成函数块。
标识具有相同输入签名的经常重复的函数并且将它们从CPU流水线消除(跨越取出级…执行级…引退级)极大地提高了处理器核的性能和能效。本发明的实施例解决了与硬件记忆化相关联的若干考虑。这些考虑包括:
·如何快速了解足够经常地以相同输入/输出值重复的函数,使得这些函数能被尽可能早且尽可能经常地消除,以得到最大投资回报(ROI)。这还包括当应用阶段改变时如何了解新机会(即新函数)。
·如何以存储高效的方式精确且有效地捕捉函数的输入变量和输出结果。
·一旦被预测,如何从CPU流水线正确地消除应用函数块的合时宜的动态调用,同时允许跟随函数调用的从属的指令尽可能早地利用它们所依赖的数据值继续。
·如何定义用于高效推测以及跨处理器核集群处置不正确地推测的事件的必要微架构。
本文描述了用于高效地标识被重复地调用以执行相同工作的函数以及将它们的执行从处理流水线消除的基于硬件的函数记忆化技术。所描述的实施例不仅标识具有高投资回报(ROI)的目标以供记忆化,还高效地捕捉函数状态。在一个实施例中,预测器被并入处理器流水线的前端以检测要被记忆化的潜在函数调用实例。当作出不正确的预测时,被不正确地记忆化的函数调用实例被重新执行。通过提供来自表的经记忆化的函数的输出值并且执行输出寄存器写入和向存储器的必要的“登出(live-out)”存储,本文所述的实施例实现对依赖于来自经记忆化的函数的数据的更年轻指令的提早执行以实现显著的性能增益。根据实施例,所提出的记忆化技术捕捉并且学习函数的留存(live-in),包括作为到函数中的输入变量的显式的基于寄存器的留存,以及函数主体中的、确定代码路径和函数输出的对存储器的全局加载。在一些实施例中,到函数调用实例的栈帧的加载和存储不被跟踪,因为在函数调用返回之后,当栈帧被回收时,它们是不可见的中间值。
基于硬件的函数记忆化的高级概览
图1图示根据实施例的处理流水线中的基于硬件的函数记忆化的概览。处理流水线100包括由对应的硬件组件处置的若干处理级,诸如分支预测单元(BPU)、指令解码队列(IDQ)、寄存器别名表(RAT)、架构寄存器堆(ARF)、物理寄存器堆(PRF)、存储缓冲器(SB)、加载缓冲器(LB)、预留站(RS)、重排序缓冲器(ROB)等。这些级和/或组件的相应功能在本领域是公知的,并且在此处出于简洁而省略,除非另有指示。
如所示,指令流120将由流水线100处理。指令流可以包括从应用内的各种位置或从不同应用调用的同一函数(例如,函数1)的若干实例。如所示,在指令流102中存在函数1的3个实例。第一个要被处理的是实例1 104,接着是实例2 106,然后是实例3 108。根据实施例,这些实例按照与它们进入流水线相同的顺序从流水线引退或输出。这些实例不需要被连续地处理。换言之,流水线可以在这些实例之间处理其他混杂指令。函数的每个实例与同一函数块/主体120相关联,函数块/主体120可以包括要被解码为微操作(uop)并且由流水线处理以执行加载、存储和计算(加、减、比较等)操作的一条或多条指令。加载指令可以包括全局加载(从函数外部可见的值)和局部加载(仅从函数内部可见的值)、以及存储操作。函数的每个实例可以与进程计数器和/或程序上下文相关联。
随着来自指令流102的指令从流水线100退出或引退,在130处标识和跟踪以相同(多个)输入操作数和(多个)输出值重复的频繁调用的函数。例如,随着函数1的实例1 104和实例2 106从流水线100退出或引退,函数1被标识为用于记忆化的候选者。响应性地,在140处确定和存储其留存值、登出值、和/或上下文值。本文中使用的留存值和登出值是指由函数访问的或由在函数块中或在函数块之前的指令访问的输入和输出寄存器或存储器位置。在一些实施例中,基于加载指令确定留存值,并且基于存储指令确定登出值。
当达到与函数相关联的充足的置信度水平时,诸如基于出现的次数,函数的整个主体(减去几次异常)被流水线跳过。例如,当在150处检测到函数1的实例3 108进入流水线100时,在160处将其函数块从流水线移除。向依赖于从函数1的执行产生的数据的指令提供来自从实例1和/或实例2的执行获得的所存储的登出的数据。从处理流水线消除重复的指令通过节约本来将必须为这些指令的执行花费的时间和资源而带来性能和功率增益。此外,数据依赖于所消除的指令的后续指令的执行可以被加速,因为它们现在可以早得多地得到所需的数据。
用于实现硬件函数记忆化的微架构变化
根据实施例,在硬件中实现函数记忆化涉及:
1.标识具有高ROI的特定函数以用于记忆化。
2.捕捉可记忆化函数及其输入/输出签名。
3.提早在处理流水线中检测可记忆化函数并且跳过对函数主体的取出。
4.跟踪流水线中的经推测性地记忆化的区域以检测误预测。
5.继续取出后记忆化区域。
图2图示用于函数记忆化的硬件平台,在该硬件平台上可以实现本发明的实施例。硬件平台200包括用于处理指令的处理流水线。硬件平台200中的处理流水线可以包括与图1的处理流水线100相同的流水线级和/或硬件组件中的一些。如所示,硬件平台200可以附加地包括uop缓冲器202、ROI表204、记忆化引退缓冲器208、记忆化表210、前端记忆化预测器(FE预测器)212、以及记忆化预留站216。
根据实施例,基于从处理流水线引退的uop来标识可记忆化函数。可以实现uop缓冲器202以捕捉在每个流水线周期中引退的uop。在一个实施例中,uop缓冲器202通信地耦合至ROB,并且配置为用于监视和/或存储从ROB 206引退的uop。在一些实施例中,uop缓冲器202被包括在ROB中,或者被实现为ROB的一部分。uop缓冲器的尺寸可以大于ROB的引退宽度,以避免使引退级停止和/或丢弃uop。在实施例中,UOP缓冲器的尺寸是ROB的引退宽度的尺寸的两倍。
从uop缓冲器202,针对函数调用检查存储在uop缓冲器202中的被引退的uop。当在uop缓冲器202中检测到函数调用(例如,调用uop)时,访问ROI表204以查看相关联的函数是否在黑名单上或者是否应当跟踪相关联的函数以查看其是否是充分地反复出现的。因此,存储在ROI表204中的信息提供第一水平过滤器来排除不应被记忆化的函数。例如,在一些实施例中,包含系统调用或浮点计算的函数被从记忆化排除,因为当考虑成本(例如,存储和处理成本)时,它们的潜在性能增益很小。可以相应地在ROI表中标记这些被排除的函数以防止它们被记忆化。
每次在uop缓冲器202中检测到函数(例如,调用uop)时,更新ROI表204中的对应条目。如果ROI表204中不存在此类条目,则创建新条目来跟踪检测到的函数调用的出现。根据实施例,ROI表204中的每个条目对应于函数。每个条目可以包括用于标识对应函数的标识符或标签(例如,程序计数器(PC))、用于确定对应的函数调用是否以充分的重复出现的出现计数器、以及用于指示函数是可记忆化的还是应当被避免(即列入黑名单)的可记忆化字段。每次在uop缓冲器202中检测到对应函数时,条目的出现计数被递增。当条目的出现计数高于阈值时,可记忆化字段可以被设置为用于指示对应函数具有足够高的ROI并且因此应当被记忆化的值。对于应当被避免的函数调用,可记忆化字段可以被设置为用于指示对应函数不被记忆化的值。如果函数与系统调用或浮点指令相关联,则可以将该函数列入黑名单。
基于ROI表204中的信息,当函数被视为充分反复出现的并且准备好用于记忆化时,记忆化引退缓冲器208建立并且存储该函数的签名。签名可以包括留存值和登出值(即输入和输出)连同与函数调用相关联的其他上下文信息。留存值可以包括由函数访问的寄存器和存储器位置。它们还可以包括存储在这些位置中的实际加载值。登出值可以包括由函数访问的输出寄存器和存储器位置、以及要存储在那些位置中的值。在一个实施例中,记忆化引退缓冲器208可以基于应用二进制接口(ABI)建立签名。在一些实施例中,函数主体内的加载和存储操作以及它们在其中发生的有序序列也被记忆化引退缓冲器208跟踪,并且被包括为签名的一部分。这些操作的排序对于保持正确性是重要的。根据实施例,一些加载操作不重要,并且因此可以被忽略。例如,用于从栈加载局部值的加载不需要被跟踪并且可以被忽略。其他加载uop(诸如跟踪全局变量的那些加载uop)已经被捕捉为函数的输入签名的一部分,并且因此也不需要被跟踪。输出签名可以包括向寄存器的写入,如由ABI确定。
一旦可记忆化函数签名被建立,其就被推送至记忆化表210以供存储。如果签名已经被现有的表条目捕捉,则该条目中的出现计数器可以被递增。如果签名未被现有的表条目捕捉,则为传入的函数签名分配新的表条目。图3图示根据实施例的记忆化表的逻辑示图。记忆化表310包括用于存储经记忆化的函数签名的一个或多个条目312。每个经记忆化的函数签名与具有一组特定的输入、输出和上下文信息的函数相关联。每个表条目312包括用于存储关于经记忆化的函数的信息的多个字段。根据实施例,字段存储诸如以下各项的信息:标签320,开始程序计数器322,结束程序计数器324,程序上下文326,经记忆化的uop信息328,存储器uop签名330,和出现计数332。标签320用于标识经记忆化的函数。在一个实施例中,标签是函数的开始程序计数器、输入签名和输出签名的散列334。输入签名可以是由函数访问的寄存器和存储器位置、或它们所存储的值的列表。类似地,输出签名可以是由函数产生的结果所存储到的寄存器或存储器位置的列表。开始程序计数器322和输出程序计数器324可以是定义函数块的相应的调用uop和返回uop的存储器地址。程序上下文326是从分支预测单元接收的、用于标识作出了函数调用的应用程序的分支信息。经记忆化的uop信息328存入函数的输入和输出签名。存储器uop签名330存储函数块中的指令或uop的有序序列。出现计数332跟踪经记忆化的函数签名已经被生成并且由记忆化引退缓冲器208提供的次数。因此,出现计数越高,对应函数被调用的次数就越多。
返回图2,为了利用经记忆化的函数签名来消除函数块的冗余执行,前端记忆化预测器(FE预测器)212被实现以检测可记忆化的函数。为了使流水线资源使用的减少最大化,根据一些实施例,FE预测器212在处理流水线中的早期实现,因此一旦函数调用进入处理流水线它就可以检测函数调用。当函数调用(即调用指令)被检测到时,FE预测器212确定调用指令的特定实例是否是可记忆化的。考虑到可以从应用中的不同位置并且在不同程序上下文中调用函数,FE预测器212通过保持对每条调用指令的程序计数器连同从中作出了调用指令的特定程序上下文的跟踪以在同一调用指令的不同实例之间进行区分。例如,调用同一函数的两条调用指令可以具有相同的程序计数器值,但是如果它们被不同应用(即,不同程序上下文)调用则具有不同的程序上下文值。在此类情况下,它们将被视为两个不同的调用指令实例。在一些实施例中,每个调用指令实例与置信度水平相关联,以指示特定实例对于记忆化是否安全。例如,如果置信度水平高于最小置信度阈值,则具有特定程序计数器和程序上下文值的调用指令被视为用于记忆化的候选者。
图4图示根据实施例的前端记忆化预测器表。表410的每个条目412存储与具有特定程序计数器和程序上下文的调用指令对应的信息。条目412包含用于存储与调用指令相关联的信息的字段,包括标签420、记忆化表实例标识符422、出现计数424和置信度水平426。在一些实施例中,标签是调用指令的开始程序计数器与程序上下文值的散列。这些值可以由记忆化引退缓冲器208提供。例如,当函数签名被建立并且提供至记忆化表210以供存储时,记忆化引退缓冲器208可以将关于开始程序计数器、程序上下文、以及记忆化表实例标识符的信息提供给FE预测器212,该信息存储在FE预测器表410的条目中。随后,当传入的调用指令进入处理流水线时,FE预测器212将传入的调用指令的程序计数器和程序上下文的散列与表410中的标签420进行比较以获得匹配。可以从由BPU 214使用的分支路径信息获得传入的调用指令的程序上下文信息。如果找到匹配的条目,则递增条目的出现计数424。如果条目中的置信度水平426高于最小置信度阈值,则对传入的调用指令进行记忆化。这意味着由调用指令调用的函数块被从处理流水线移除。根据实施例,并非函数块中的所有指令都被移除。如上所述,可以从函数块外部获得数据的全局加载帮助标识函数的不同实例之间的存储器值的变化,并且因此在流水线中被留在原地。这同样适用于存储指令,存储指令在流水线中被保持原样以确保正确性。
返回到图2。考虑到FE预测器212对传入的函数调用是可记忆化的进行推测,实现验证机制以通过确保由FE预测器选择的函数实例的输入签名与存储在记忆化表中的经记忆化的函数的输入签名匹配来使误预测的影响最小化。为了实现这一点,人工记忆化uop220被插入以代替经记忆化的函数块。例如,处理流水线中的调用指令由记忆化uop代替以跟踪函数实例的输入签名。记忆化uop照常穿过处理流水线,并且到达预留站218以收集调用指令的输入值。典型地,调用指令的输入值由指令流中的在调用指令之前的指令提供。这些指令由执行单元222执行,并且它们的结果被提供给预留站中的记忆化uop。一旦所有输入值被经记忆化的uop收集,由验证电路224将这些输入值与记忆化表210中的对应条目的输入值进行比较。如果输入值匹配,则从流水线移除记忆化uop,并且使FE预测器212中的对应条目的置信度水平递增。如果输入值不匹配,则记忆化uop触发处理流水线中的nuke以使用调用指令程序计数器重新开始函数的执行。在一些情况下,预留站220可以具有对可以被存储的输入值和输出值的数量的约束。因此,在一些实施例中,特殊的记忆化预留站216用于处置记忆化uop。在其他实施例中,现有的预留站218被修改以容纳经记忆化的uop。
图5是图示根据实施例的记忆化uop的框图。记忆化uop包括用于收集和存储信息的多个字段,诸如输入寄存器或值512、输出寄存器或值514、输出标志516、和记忆化表实例标识符518。记忆化表实例标识符518用于标识记忆化表210中的条目,记忆化uop的输入/输出值与该条目进行比较。记忆化表标识符518可以从FE记忆化预测器表410获得,或者在生成记忆化uop时从记忆化表210获得。
除了消除函数主体外,性能增益的另一个原因来自使依赖于函数主体的所有指令能够比原本更早地开始它们的执行。为了实现这一点,可以将临时移动uop插入处理流水线以动态地允许RAT对经记忆化的区域中的用于稍后的指令的输出寄存器重命名,以允许这些指令开始执行。
图6是图示根据实施例的用于对函数进行记忆化的方法的流程图。方法600可以被实现在本文描述的任何硬件平台中。在一个实施例中,方法600由硬件平台200实现。在602处,基于来自处理流水线的引退uop来标识用于记忆化的函数。可以基于引退uop中的调用uop的出现次数来选择用于记忆化的函数。诸如涉及系统调用和浮点操作的那些函数之类的一些函数被从记忆化排除。在604处,生成用于记忆化的函数的签名。签名可以包括由函数访问的输入和输出寄存器/存储器位置和/或它们所存储的值。签名还可以包括函数的函数块中的uop的有序序列。在606处,将签名存储在记忆化表中。在608处,在处理流水线中检测用于执行函数的实例的请求。检测可以由耦合至处理流水线的较早的级(例如,BPU)的预测器作出。响应于检测,将与实例相关联的一个或多个uop从流水线中的执行排除。诸如存储和全局加载之类的一些指令可以在流水线中保持要被执行。在610处,将实例的输入数据与存储在记忆化表中的函数的签名的输入数据进行比较。如果数据匹配,则在612处,向依赖于实例的执行的指令提供来自记忆化表的输出数据。在数据不匹配的情况下,在614处,将函数的实例重新插入到处理流水线中以被执行。这可以涉及对流水线进行nuke以中止来自函数的先前实例的、之前被允许执行的指令的任何执行。
尽管本文描述了缓冲器(例如,uop缓冲器、记忆化引退缓冲器)和表(例如,ROI表、记忆化表、FE记忆化预测器表),但是对本领域普通技术人员将显而易见的是,可以替代地使用任何合适类型的数据存储结构。本文描述的数据存储结构中的每一个还可以包括用于执行涉及其操作的各种功能的硬件逻辑或电路。
示例
以下是本发明的不同实施例的示例实现方式。
示例1:一种装置,包括:uop缓冲器电路,用于基于来自处理流水线的引退uop标识函数以用于记忆化,该函数与多个uop的函数块相关联;记忆化引退缓冲器电路,用于生成函数的签名,该签名包括函数的输入数据和输出数据以及函数块中的多个uop的有序序列;记忆化数据结构,用于将与函数相关联的签名存储在条目中;以及预测器电路,用于检测要由处理流水线执行的函数的实例,并且当与函数相关联的置信度水平高于阈值时响应性地将与实例相关联的uop的第一子集从执行排除。然后,数据依赖于实例的执行的一条或多条指令被提供来自记忆化数据结构的函数的输出数据。
示例2:如示例1的装置,其中,uop缓冲器电路耦合至处理流水线的重排序缓冲器(ROB)以存储引退uop。
示例3:如示例2的装置,其中,ROB与引退宽度相关联,并且uop缓冲器电路包括尺寸为ROB的引退宽度的两倍的存储结构。
示例4:如示例3的装置,其中,uop缓冲器电路用于在存储结构中跟踪调用uop的出现以标识函数以用于记忆化。
示例5:如示例1的装置,其中,当函数包含系统调用或浮点计算时,函数被从记忆化排除。
示例6:如示例1的装置,其中,实例的uop的第二子集保持在处理流水线中以供执行。
示例7:如示例6的装置,其中,第二子集包括存储uop和/或全局加载uop。
示例8:如示例1的装置,其中,预测器电路进一步用于在处理流水线中插入虚设uop以代替被从处理流水线排除的多个uop的第一子集,该虚设uop可用于收集与实例相关联的输入值和输出值,该输入值和输出值可用于验证对实例的记忆化。
示例9:如示例8的装置,进一步包括验证电路,用于针对存储在记忆化数据结构中的函数的输入数据和输出数据来验证由虚设uop收集的输入值和输出值。
示例10:如示例9的装置,其中,虚设uop包括记忆化数据结构标识符,用于定位记忆化数据结构中的条目。
示例11:如示例9的装置,其中,响应于验证电路的肯定验证,虚设uop被从处理流水线移除,并且由预测器电路跟踪的实例的置信度水平被递增。
示例12:如示例9的装置,其中,响应于验证电路的否定验证,函数的实例被重新插入处理流水线中以供执行。
示例13:如示例1的装置,其中,函数的输入数据和输出数据包括由与函数相关联的函数块中的uop访问的寄存器和/或存储器位置。
示例14:一种方法,包括:基于来自处理流水线的引退微操作(uop)标识函数以用于记忆化,该函数与多个uop的函数块相关联;生成函数的签名,该签名包括函数的输入数据和输出数据以及函数块中的多个uop的有序序列;在记忆化数据结构中将与函数相关联的签名存储在条目中;检测要由处理流水线执行的函数的实例,并且当与函数相关联的置信度水平高于阈值时响应性地将与实例相关联的uop的第一子集从执行排除;以及向数据依赖于实例的执行的一条或多条指令提供来自记忆化数据结构的函数的输出数据。
示例15:如示例14的方法,进一步包括将引退uop存储在耦合至处理流水线的重排序缓冲器(ROB)的uop缓冲器中。
示例16:如示例15的方法,其中,ROB与引退宽度相关联,并且该方法进一步包括将uop缓冲器的尺寸设置为ROB的引退宽度的两倍。
示例17:如示例15的方法,进一步包括在uop缓冲器中跟踪调用uop的出现以标识函数以用于记忆化。
示例18:如示例14的方法,进一步包括当函数包含系统调用或浮点计算时将函数从记忆化排除。
示例19:如示例14的方法,进一步包括使实例的uop的第二子集留在处理流水线中以供执行。
示例20:如示例19的方法,其中,第二子集包括存储uop和/或全局加载uop。
示例21:如示例14的方法,进一步包括在处理流水线中插入虚设uop以代替被从处理流水线排除的多个uop的第一子集,该虚设uop可用于收集与实例相关联的输入值和输出值,该输入值和输出值可用于验证对实例的记忆化。
示例22:如示例21的方法,进一步包括针对存储在记忆化数据结构中的函数的输入数据和输出数据来验证由虚设uop收集的输入值和输出值。
示例23:如示例22的方法,进一步包括使用虚设uop中的记忆化数据结构标识符来定位记忆化数据结构中的条目。
示例24:如示例22的方法,进一步包括响应于肯定验证而从处理流水线移除虚设uop并且使实例的置信度水平递增。
示例25:如示例22的方法,进一步包括响应于否定验证而将函数的实例重新插入处理流水线中以供执行。
示例26:如示例14的方法,其中,函数的输入数据和输出数据包括由与函数相关联的函数块中的uop访问的寄存器和/或存储器位置。
示例性处理器架构和数据类型
图7A是图示根据本发明的各实施例的示例性有序流水线和示例性的寄存器重命名的乱序发布/执行流水线的框图。图7B是示出根据本发明的各实施例的要包括在处理器中的有序架构核的示例性实施例和示例性的寄存器重命名的乱序发布/执行架构核的框图。图7A-图7B中的实线框图示有序流水线和有序核,而虚线框的任选增加图示寄存器重命名的、乱序发布/执行流水线和核。考虑到有序方面是乱序方面的子集,将描述乱序方面。
在图7A中,处理器流水线700包括取出级702、长度解码级704、解码级706、分配级708、重命名级710、调度(也被称为分派或发布)级712、寄存器读取/存储器读取级714、执行级716、写回/存储器写入级718、异常处置级722和提交级724。
图7B示出处理器核790,该处理器核790包括前端硬件730,该前端硬件730耦合到执行引擎硬件750,并且前端硬件730和执行引擎硬件750两者都耦合到存储器硬件770。核790可以是精简指令集计算(RISC)核、复杂指令集计算(CISC)核、超长指令字(VLIW)核、或混合或替代的核类型。作为又一选项,核790可以是专用核,诸如例如,网络或通信核、压缩引擎、协处理器核、通用计算图形处理单元(GPGPU)核、图形核,等等。
前端硬件730包括分支预测硬件732,该分支预测硬件732耦合到指令高速缓存硬件734,该指令高速缓存硬件734耦合到指令转换后备缓冲器(TLB)736,该指令转换后备缓冲器736耦合到指令取出硬件738,该指令取出硬件738耦合到解码硬件740。解码硬件740(或解码器)可对指令解码,并且生成从原始指令解码出的、或以其他方式反映原始指令的、或从原始指令导出的一个或多个微操作、微代码进入点、微指令、其他指令、或其他控制信号作为输出。解码硬件740可使用各种不同的机制来实现。合适机制的示例包括但不限于,查找表、硬件实现、可编程逻辑阵列(PLA)、微代码只读存储器(ROM)等。在一个实施例中,核790包括存储用于某些宏指令的微代码的微代码ROM或其他介质(例如,在解码硬件740中,或以其他方式在前端硬件730内)。解码硬件740耦合到执行引擎硬件750中的重命名/分配器硬件752。
执行引擎硬件750包括重命名/分配器硬件752,该重命名/分配器硬件752耦合到引退硬件754和一个或多个调度器硬件的集合756。调度器硬件756表示任何数量的不同调度器,包括预留站、中央指令窗等。调度器硬件756耦合到物理寄存器堆硬件758。物理寄存器堆硬件758中的每一个物理寄存器堆硬件表示一个或多个物理寄存器堆,其中不同的物理寄存器堆存储一种或多种不同的数据类型,诸如,标量整数、标量浮点、紧缩整数、紧缩浮点、向量整数、向量浮点,状态(例如,作为要执行的下一条指令的地址的指令指针)等等。在一个实施例中,物理寄存器堆硬件758包括向量寄存器硬件、写掩码寄存器硬件和标量寄存器硬件。该寄存器硬件可以提供架构向量寄存器、向量掩码寄存器和通用寄存器。物理寄存器堆硬件758由引退硬件754重叠,以图示可实现寄存器重命名和乱序执行的各种方式(例如,使用(多个)重排序缓冲器和(多个)引退寄存器堆;使用(多个)未来文件、(多个)历史缓冲器、(多个)引退寄存器堆;使用寄存器映射和寄存器池,等等)。引退硬件754和物理寄存器堆硬件758耦合到(多个)执行集群760。(多个)执行集群760包括一个或多个执行硬件的集合762以及一个或多个存储器访问硬件的集合764。执行硬件762可执行各种操作(例如,移位、加法、减法、乘法)并可对各种数据类型(例如,标量浮点、紧缩整数、紧缩浮点、向量整数、向量浮点)执行。尽管一些实施例可以包括专用于特定功能或功能集合的多个执行硬件,但是其他实施例可包括仅一个执行硬件或全都执行所有功能的多个执行硬件。调度器硬件756、物理寄存器堆硬件758和(多个)执行集群760示出为可能有多个,因为某些实施例为某些类型的数据/操作创建分开的流水线(例如,标量整数流水线、标量浮点/紧缩整数/紧缩浮点/向量整数/向量浮点流水线,和/或各自具有其自身的调度器硬件、物理寄存器堆硬件和/或执行集群的存储器访问流水线——并且在分开的存储器访问流水线的情况下,实现其中仅该流水线的执行集群具有存储器访问硬件764的某些实施例)。还应当理解,在使用分开的流水线的情况下,这些流水线中的一个或多个可以是乱序发布/执行,并且其余流水线可以是有序的。
存储器访问硬件的集合764耦合到存储器硬件770,该存储器硬件770包括数据TLB硬件772,该数据TLB硬件772耦合到数据高速缓存硬件774,该数据高速缓存硬件774耦合到第二级(L2)高速缓存硬件776。在一个示例性实施例中,存储器访问硬件764可包括加载硬件、存储地址硬件和存储数据硬件,其中的每一个均耦合到存储器硬件770中的数据TLB硬件772。指令高速缓存硬件734还耦合到存储器硬件770中的第二级(L2)高速缓存硬件776。L2高速缓存硬件776耦合到一个或多个其他级别的高速缓存,并最终耦合到主存储器。
作为示例,示例性寄存器重命名的乱序发布/执行核架构可如下所述地实现流水线700:1)指令取出738执行取出级702和长度解码级704;2)解码硬件740执行解码级706;3)重命名/分配器硬件752执行分配级708和重命名级710;4)调度器硬件756执行调度级712;5)物理寄存器堆硬件758和存储器硬件770执行寄存器读取/存储器读取级714;执行集群760执行执行级716;6)存储器硬件770和物理寄存器堆硬件758执行写回/存储器写入级718;
7)各硬件可牵涉到异常处置级722;以及8)引退硬件754和物理寄存器堆硬件758执行提交级724。
核790可支持一个或多个指令集(例如,x86指令集(具有已与较新版本一起添加的一些扩展);加利福尼亚州桑尼维尔市的MIPS技术公司的MIPS指令集;加利福尼亚州桑尼维尔市的ARM控股公司的ARM指令集(具有诸如NEON的任选的附加扩展)),其中包括本文中描述的(多条)指令。在一个实施例中,核790包括用于支持紧缩数据指令集扩展(例如,AVX1、AVX2、和/或下文描述的某种形式的通用向量友好指令格式(U=0和/或U=1))的逻辑,由此允许使用紧缩数据来执行由许多多媒体应用使用的操作。
应当理解,核可支持多线程化(执行两个或更多个并行的操作或线程的集合),并且可以按各种方式来完成该多线程化,各种方式包括时分多线程化、同时多线程化(其中单个物理核为物理核正在同时多线程化的线程中的每一个线程提供逻辑核)、或其组合(例如,时分取出和解码以及此后的诸如超线程化技术中的同时多线程化)。
尽管在乱序执行的上下文中描述了寄存器重命名,但应当理解,可以在有序架构中使用寄存器重命名。尽管所图示的处理器的实施例还包括分开的指令和数据高速缓存硬件734/774以及共享的L2高速缓存硬件776,但是替代实施例可以具有用于指令和数据两者的单个内部高速缓存,诸如例如,第一级(L1)内部高速缓存或多个级别的内部高速缓存。在一些实施例中,该系统可包括内部高速缓存和在核和/或处理器外部的外部高速缓存的组合。或者,所有高速缓存都可以在核和/或处理器的外部。
图8是根据本发明的实施例的可具有多于一个的核、可具有集成存储器控制器、以及可具有集成图形器件的处理器800的框图。图8中的实线框图示具有单个核802A、系统代理810、一个或多个总线控制器硬件的集合816的处理器800,而虚线框的任选增加图示具有多个核802A-N、系统代理硬件810中的一个或多个集成存储器控制器硬件的集合814以及专用逻辑808的替代处理器800。
因此,处理器800的不同实现可包括:1)CPU,其中专用逻辑808是集成图形和/或科学(吞吐量)逻辑(其可包括一个或多个核),并且核802A-N是一个或多个通用核(例如,通用有序核、通用乱序核、这两者的组合);2)协处理器,其中核802A-N是旨在主要用于图形和/或科学(吞吐量)的大量专用核;以及3)协处理器,其中核802A-N是大量通用有序核。因此,处理器800可以是通用处理器、协处理器或专用处理器,诸如例如,网络或通信处理器、压缩引擎、图形处理器、GPGPU(通用图形处理单元)、高吞吐量的集成众核(MIC)协处理器(包括30个或更多核)、嵌入式处理器,等等。该处理器可以被实现在一个或多个芯片上。处理器800可以是一个或多个基板的一部分,和/或可使用多种工艺技术(诸如例如,BiCMOS、CMOS、或NMOS)中的任何技术被实现在一个或多个基板上。
存储器层次结构包括核内的一个或多个级别的高速缓存、一个或多个共享高速缓存硬件的集合806、以及耦合到集成存储器控制器硬件的集合814的外部存储器(未示出)。共享高速缓存硬件的集合806可包括一个或多个中间级别的高速缓存,诸如,第二级(L2)、第三级(L3)、第四级(L4)或其他级别的高速缓存、末级高速缓存(LLC)和/或以上各项的组合。虽然在一个实施例中,基于环的互连硬件812将集成图形逻辑808、共享高速缓存硬件的集合806以及系统代理硬件810/集成存储器控制器硬件814互连,但是替代实施例可使用任何数量的公知技术来互连此类硬件。在一个实施例中,在一个或多个高速缓存硬件806与核802A-N之间维持一致性。
在一些实施例中,一个或多个核802A-N能够实现多线程化。系统代理810包括协调和操作核802A-N的那些部件。系统代理硬件810可包括例如功率控制单元(PCU)和显示硬件。PCU可以是对核802A-N以及集成图形逻辑808的功率状态进行调节所需的逻辑和部件,或可包括这些逻辑和部件。显示硬件用于驱动一个或多个外部连接的显示器。
核802A-N在架构指令集方面可以是同构的或异构的;即,核802A-N中的两个或更多个核可能能够执行相同的指令集,而其他核可能能够执行该指令集的仅仅子集或不同的指令集。在一个实施例中,核802A-N是异构的,并且包括下文所述的“小型”核和“大型”核两者。
图9-图12是示例性计算机架构的框图。本领域中已知的对膝上型设备、台式机、手持PC、个人数字助理、工程工作站、服务器、网络设备、网络集线器、交换机、嵌入式处理器、数字信号处理器(DSP)、图形设备、视频游戏设备、机顶盒、微控制器、蜂窝电话、便携式媒体播放器、手持设备以及各种其他电子设备的其他系统设计和配置也是合适的。一般地,能够包含如本文中所公开的处理器和/或其他执行逻辑的各种各样的系统或电子设备一般都是合适的。
现在参考图9,所示出的是根据本发明一个实施例的系统900的框图。系统900可以包括一个或多个处理器910、915,这些处理器耦合到控制器中枢920。在一个实施例中,控制器中枢920包括图形存储器控制器中枢(GMCH)990和输入/输出中枢(IOH)950(其可以在分开的芯片上);GMCH990包括存储器和图形控制器,存储器940和协处理器945耦合到该存储器和图形控制器;IOH 950将输入/输出(I/O)设备960耦合到GMCH 990。或者,存储器和图形控制器中的一个或这两者被集成在(如本文中所描述的)处理器内,存储器940和协处理器945直接耦合到处理器910,并且控制器中枢920与IOH 950处于单个芯片中。
附加的处理器915的任选性在图9中通过虚线来表示。每一处理器910、915可包括本文中描述的处理核中的一个或多个,并且可以是处理器800的某一版本。
存储器940可以是例如动态随机存取存储器(DRAM)、相变存储器(PCM)或这两者的组合。对于至少一个实施例,控制器中枢920经由诸如前端总线(FSB)之类的多分支总线、点对点接口、或者类似的连接995来与(多个)处理器910、915进行通信。
在一个实施例中,协处理器945是专用处理器,诸如例如,高吞吐量MIC处理器、网络或通信处理器、压缩引擎、图形处理器、GPGPU、嵌入式处理器,等等。在一个实施例中,控制器中枢920可以包括集成图形加速器。
在物理资源910、915之间可以存在包括架构、微架构、热、功耗特性等一系列品质度量方面的各种差异。
在一个实施例中,处理器910执行控制一般类型的数据处理操作的指令。嵌入在这些指令内的可以是协处理器指令。处理器910将这些协处理器指令识别为具有应当由附连的协处理器945执行的类型。因此,处理器910在协处理器总线或者其他互连上将这些协处理器指令(或者表示协处理器指令的控制信号)发布到协处理器945。(多个)协处理器945接受并执行所接收的协处理器指令。
现在参见图10,所示出的是根据本发明的实施例的第一更具体的示例性系统1000的框图。如图10中所示,多处理器系统1000是点对点互连系统,并且包括经由点对点互连1050耦合的第一处理器1070和第二处理器1080。处理器1070和1080中的每一个都可以是处理器800的某一版本。在本发明的一个实施例中,处理器1070和1080分别是处理器910和915,而协处理器1038是协处理器945。在另一实施例中,处理器1070和1080分别是处理器910和协处理器945。
处理器1070和1080示出为分别包括集成存储器控制器(IMC)硬件1072和1082。处理器1070还包括作为其总线控制器硬件的一部分的点对点(P-P)接口1076和1078;类似地,第二处理器1080包括P-P接口1086和1088。处理器1070、1080可以经由使用点对点(P-P)接口电路1078、1088的P-P接口1050来交换信息。如图10中所示,IMC 1072和1082将处理器耦合到相应的存储器,即存储器1032和存储器1034,这些存储器可以是本地附连到相应处理器的主存储器的部分。
处理器1070、1080可各自经由使用点对点接口电路1076、1094、1086、1098的各个P-P接口1052、1054来与芯片组1090交换信息。芯片组1090可以任选地经由高性能接口1039来与协处理器1038交换信息。在一个实施例中,协处理器1038是专用处理器,诸如例如,高吞吐量MIC处理器、网络或通信处理器、压缩引擎、图形处理器、GPGPU、嵌入式处理器,等等。
共享高速缓存(未示出)可被包括在任一处理器中,或在这两个处理器的外部但经由P-P互连与这些处理器连接,使得如果处理器被置于低功率模式,则任一个或这两个处理器的本地高速缓存信息可被存储在共享高速缓存中。
芯片组1090可以经由接口1096耦合到第一总线1016。在一个实施例中,第一总线1016可以是外围部件互连(PCI)总线或诸如PCI快速总线或另一第三代I/O互连总线之类的总线,但是本发明的范围不限于此。
如图10中所示,各种I/O设备1014可连同总线桥1018一起耦合到第一总线1016,该总线桥1018将第一总线1016耦合到第二总线1020。在一个实施例中,诸如协处理器、高吞吐量MIC处理器、GPGPU、加速器(诸如例如,图形加速器或数字信号处理(DSP)硬件)、现场可编程门阵列或任何其他处理器的一个或多个附加处理器1015耦合到第一总线1016。在一个实施例中,第二总线1020可以是低引脚数(LPC)总线。在一个实施例中,各种设备可耦合到第二总线1020,这些设备包括例如键盘和/或鼠标1022、通信设备1027以及存储硬件1028,该存储硬件1028诸如可包括指令/代码和数据1030的盘驱动器或者其他大容量存储设备。此外,音频I/O 1024可以被耦合到第二总线1020。注意,其他架构是可能的。例如,代替图10的点对点架构,系统可以实现多分支总线或其他此类架构。
现在参考图11,示出的是根据本发明的实施例的第二更具体的示例性系统1100的框图。图10和图11中的类似元件使用类似的附图标记,并且从图11中省略了图10的某些方面以避免混淆图11的其他方面。
图11图示处理器1070、1080可分别包括集成存储器和I/O控制逻辑(“CL”)1072和1082。因此,CL 1072、1082包括集成存储器控制器硬件,并包括I/O控制逻辑。图11图示不仅存储器1032、1034耦合到CL 1072、1082,而且I/O设备1114也耦合到控制逻辑1072、1082。传统I/O设备1115被耦合到芯片组1090。
现在参考图12,示出的是根据本发明的实施例的SoC 1200的框图。图8中的类似要素使用类似的附图标记。另外,虚线框是更先进的SoC上的任选的特征。在图12中,互连硬件1202被耦合到:应用处理器1210,其包括一个或多个核的集合802A-N以及共享高速缓存硬件806;系统代理硬件810;总线控制器硬件816;集成存储器控制器硬件814;一个或多个协处理器的集合1220,其可包括集成图形逻辑、图像处理器、音频处理器和视频处理器;静态随机存取存储器(SRAM)硬件1230;直接存储器访问(DMA)硬件1232;以及用于耦合到一个或多个外部显示器的显示硬件1240。在一个实施例中,(多个)协处理器1220包括专用处理器,诸如例如,网络或通信处理器、压缩引擎、GPGPU、高吞吐量MIC处理器、或嵌入式处理器,等等。
本文公开的机制的各实施例可以被实现在硬件、软件、固件或此类实现方式的组合中。本发明的实施例可实现为在可编程系统上执行的计算机程序或程序代码,该可编程系统包括至少一个处理器、存储系统(包括易失性和非易失性存储器和/或存储元件)、至少一个输入设备以及至少一个输出设备。
可将程序代码(诸如,图10中图示的代码1030)应用于输入指令,以执行本文中描述的功能并生成输出信息。可以按已知方式将输出信息应用于一个或多个输出设备。为了本申请的目的,处理系统包括具有处理器的任何系统,该处理器诸如例如,数字信号处理器(DSP)、微控制器、专用集成电路(ASIC)或微处理器。
程序代码可以用高级的面向过程的编程语言或面向对象的编程语言来实现,以便与处理系统通信。如果需要,也可用汇编语言或机器语言来实现程序代码。事实上,本文中描述的机制不限于任何特定的编程语言的范围。在任何情况下,该语言可以是编译语言或解释语言。
至少一个实施例的一个或多个方面可以由存储在机器可读介质上的表示性指令来实现,该指令表示处理器中的各种逻辑,该指令在被机器读取时使得该机器制造用于执行本文中所述的技术的逻辑。被称为“IP核”的此类表示可以被存储在有形的机器可读介质上,并可被供应给各个客户或生产设施以加载到实际制造该逻辑或处理器的制造机器中。
此类机器可读存储介质可以包括但不限于通过机器或设备制造或形成的制品的非暂态、有形布置,其包括存储介质,诸如硬盘;任何其他类型的盘,包括软盘、光盘、紧致盘只读存储器(CD-ROM)、可重写紧致盘(CD-RW)以及磁光盘;半导体器件,诸如,只读存储器(ROM)、诸如动态随机存取存储器(DRAM)和静态随机存取存储器(SRAM)的随机存取存储器(RAM)、可擦除可编程只读存储器(EPROM)、闪存、电可擦除可编程只读存储器(EEPROM);相变存储器(PCM);磁卡或光卡;或适于存储电子指令的任何其他类型的介质。
因此,本发明的实施例还包括非暂态的有形机器可读介质,该介质包含指令或包含设计数据,诸如硬件描述语言(HDL),它定义本文中描述的结构、电路、装置、处理器和/或系统特征。这些实施例也被称为程序产品。
在一些情况下,指令转换器可用于将指令从源指令集转换至目标指令集。例如,指令转换器可以将指令变换(例如,使用静态二进制变换、包括动态编译的动态二进制变换)、变形、仿真或以其他方式转换成要由核处理的一条或多条其他指令。指令转换器可以用软件、硬件、固件、或其组合来实现。指令转换器可以在处理器上、在处理器外、或者部分在处理器上且部分在处理器外。
图13是根据本发明的实施例的对照使用软件指令转换器将源指令集中的二进制指令转换成目标指令集中的二进制指令的框图。在所图示的实施例中,指令转换器是软件指令转换器,但替代地,该指令转换器可以用软件、固件、硬件或其各种组合来实现。图13示出可使用x86编译器1304来编译高级语言1302形式的程序,以生成可由具有至少一个x86指令集核的处理器1316原生执行的x86二进制代码1306。具有至少一个x86指令集核的处理器1316表示通过兼容地执行或以其他方式处理以下各项来执行与具有至少一个x86指令集核的英特尔处理器基本相同的功能的任何处理器:1)英特尔x86指令集核的指令集的实质部分,或2)目标为在具有至少一个x86指令集核的英特尔处理器上运行以便取得与具有至少一个x86指令集核的英特尔处理器基本相同的结果的应用或其他软件的目标代码版本。x86编译器1304表示可操作用于生成x86二进制代码1306(例如,目标代码)的编译器,该二进制代码可通过或不通过附加的链接处理在具有至少一个x86指令集核的处理器1316上执行。类似地,图13示出可以使用替代的指令集编译器1308来编译高级语言1302形式的程序,以生成可以由不具有至少一个x86指令集核的处理器1314(例如,具有执行加利福尼亚州桑尼维尔市的MIPS技术公司的MIPS指令集、和/或执行加利福尼亚州桑尼维尔市的ARM控股公司的ARM指令集的核的处理器)原生执行的替代的指令集二进制代码1310。指令转换器1312用于将x86二进制代码1306转换成可以由不具有x86指令集核的处理器1314原生执行的代码。该转换后的代码不大可能与替代的指令集二进制代码1310相同,因为能够这样做的指令转换器难以制造;然而,转换后的代码将完成一般操作,并且由来自替代指令集的指令构成。因此,指令转换器1312通过仿真、模拟或任何其他过程来表示允许不具有x86指令集处理器或核的处理器或其他电子设备执行x86二进制代码1306的软件、固件、硬件或其组合。
虽然已参考特定实现方式描述了一些实施例,但是根据一些实施例,其他实现方式也是可能的。另外,附图中所图示的和/或本文中所描述的元件或其他特征的布置和/或次序无需以所图示和所描述的特定方式来布置。根据一些实施例,许多其他布置也是可能的。
在附图中示出的每个系统中,在一些情况下的元件可各自具有相同的附图标记或不同的附图标记,以表明所表示的元件可以是不同和/或类似的。然而,元件可以足够灵活以具有不同的实现方式,并与本文所示出或所描述的系统中的一些或全部一起工作。附图中所示出的各种元件可以相同或不同。将哪个称为第一元件以及将哪个称为第二元件是任意的。
在说明书和权利要求书中,可使用术语“耦合的”和“连接的”及其衍生词。应当理解,这些术语并不旨在作为彼此的同义词。相反,在特定实施例中,可以使用“连接的”来指示两个或更多个元件彼此处于直接的物理或电接触。“耦合的”可意指两个或更多个元件处于直接的物理或电接触。然而,“耦合的”也可意指两个或更多个元件彼此并不直接接触,但是仍彼此协作或相互作用。
实施例是本发明的实现方式或示例。说明书中对“实施例”、“一个实施例”、“一些实施例”或“其他实施例”的引用表示结合这些实施例描述的特定的特征、结构或特性被包括在本发明的至少一些实施例中,而不必被包括在本发明的所有实施例中。各处出现的“实施例”、“一个实施例”或“一些实施例”不一定全都指代同一实施例。
并非本文中所描述和所图示的所有组件、特征、结构、特性等都需要被包括在特定的一个或多个实施例中。例如,如果说明书陈述“可”、“可能”、“能”或“能够”包括组件、特征、结构或特性,则不要求包括该特定的组件、特征、结构或特性。如果说明书或权利要求书引用“一”或“一个”要素,则这并不意指仅有一个该要素。如果说明书或权利要求书引用“附加”要素,则不排除存在多于一个的该附加要素。
以上对本发明的所图示的实施例的描述(包括在摘要中描述的内容)不旨在是排他性的,也不旨在将本发明限于所公开的精确形式。尽管出于说明的目的在本文中描述了本发明的特定实施例和示例,但是如相关领域技术人员将领会的那样,在本发明的范围内,各种等效的修改是可能的。
可以根据以上具体实施方式对本发明作出这些修改。所附权利要求书中所使用的术语不应当被理解为将本发明限制于说明书和附图中所公开的特定实施例。相反,本发明的范围完全由所附权利要求书来确定,权利要求书根据权利要求解释的既定原则来解释。
Claims (25)
1.一种装置,包括:
微操作uop缓冲器电路,用于基于来自处理流水线的引退uop标识函数以用于记忆化,所述函数与多个uop的函数块相关联;
记忆化引退缓冲器电路,用于生成所述函数的签名,所述签名包括所述函数的输入数据和输出数据以及所述函数块中的所述多个uop的有序序列;
记忆化数据结构,用于将与所述函数相关联的所述签名存储在条目中;以及
预测器电路,用于检测要由所述处理流水线执行的所述函数的实例,并且当与所述函数相关联的置信度水平高于阈值时响应性地将与所述实例相关联的uop的第一子集从执行排除,
其中,数据依赖于所述实例的执行的一条或多条指令被提供来自所述记忆化数据结构的所述函数的所述输出数据。
2.如权利要求1所述的装置,其中,所述uop缓冲器电路耦合至所述处理流水线的重排序缓冲器ROB以存储所述引退uop。
3.如权利要求2所述的装置,其中,所述ROB与引退宽度相关联,并且所述uop缓冲器电路包括尺寸为所述ROB的所述引退宽度的两倍的存储结构。
4.如权利要求3所述的装置,其中,所述uop缓冲器电路用于在所述存储结构中跟踪调用uop的出现以标识所述函数以用于记忆化。
5.如权利要求1-4中任一项所述的装置,其中,当所述函数包含系统调用或浮点计算时,所述函数被从记忆化排除。
6.如权利要求1-4中任一项所述的装置,其中,所述实例的uop的第二子集保持在所述处理流水线中以供执行。
7.如权利要求6所述的装置,其中,所述第二子集包括存储uop和/或全局加载uop。
8.如权利要求1-4中任一项所述的装置,其中,所述预测器电路进一步用于在所述处理流水线中插入虚设uop以代替被从所述处理流水线排除的所述多个uop的所述第一子集,所述虚设uop能用于收集与所述实例相关联的输入值和输出值,所述输入值和所述输出值能用于验证对所述实例的记忆化。
9.如权利要求8所述的装置,进一步包括验证电路,用于针对存储在所述记忆化数据结构中的所述函数的所述输入数据和所述输出数据来验证由所述虚设uop收集的所述输入值和所述输出值。
10.如权利要求9所述的装置,其中,所述虚设uop包括记忆化数据结构标识符,用于定位所述记忆化数据结构中的所述条目。
11.如权利要求9所述的装置,其中,响应于所述验证电路的肯定验证,所述虚设uop被从所述处理流水线移除,并且由所述预测器电路跟踪的所述实例的置信度水平被递增。
12.如权利要求9所述的装置,其中,响应于所述验证电路的否定验证,所述函数的所述实例被重新插入所述处理流水线中以供执行。
13.如权利要求1-4中任一项所述的装置,其中,所述函数的所述输入数据和所述输出数据包括由与所述函数相关联的所述函数块中的uop访问的寄存器和/或存储器位置。
14.一种方法,包括:
基于来自处理流水线的引退微操作uop标识函数以用于记忆化,所述函数与多个uop的函数块相关联;
生成所述函数的签名,所述签名包括所述函数的输入数据和输出数据以及所述函数块中的所述多个uop的有序序列;
在记忆化数据结构中将与所述函数相关联的所述签名存储在条目中;以及
检测要由所述处理流水线执行的所述函数的实例,并且当与所述函数相关联的置信度水平高于阈值时响应性地将与所述实例相关联的uop的第一子集从执行排除;以及
向数据依赖于所述实例的执行的一条或多条指令提供来自所述记忆化数据结构的所述函数的所述输出数据。
15.如权利要求14所述的方法,进一步包括将所述引退uop存储在耦合至所述处理流水线的重排序缓冲器ROB的uop缓冲器中。
16.如权利要求15所述的方法,其中,所述ROB与引退宽度相关联,并且所述方法进一步包括将所述uop缓冲器的尺寸设置为所述ROB的所述引退宽度的两倍。
17.如权利要求15所述的方法,进一步包括在所述uop缓冲器中跟踪调用uop的出现以标识所述函数以用于记忆化。
18.如权利要求14-17中任一项所述的方法,进一步包括当所述函数包含系统调用或浮点计算时将所述函数从记忆化排除。
19.如权利要求14-17中任一项所述的方法,进一步包括使所述实例的uop的第二子集留在所述处理流水线中以供执行。
20.如权利要求19所述的方法,其中,所述第二子集包括存储uop和/或全局加载uop。
21.如权利要求14-17中任一项所述的方法,进一步包括在所述处理流水线中插入虚设uop以代替被从所述处理流水线排除的所述多个uop的所述第一子集,所述虚设uop能用于收集与所述实例相关联的输入值和输出值,所述输入值和所述输出值能用于验证对所述实例的记忆化。
22.如权利要求21所述的方法,进一步包括针对存储在所述记忆化数据结构中的所述函数的所述输入数据和所述输出数据来验证由所述虚设uop收集的所述输入值和所述输出值。
23.如权利要求22所述的方法,进一步包括使用所述虚设uop中的记忆化数据结构标识符来定位所述记忆化数据结构中的所述条目。
24.如权利要求22所述的方法,进一步包括响应于肯定验证而从所述处理流水线移除所述虚设uop并且使所述实例的置信度水平递增。
25.如权利要求22所述的方法,进一步包括响应于否定验证而将所述函数的所述实例重新插入所述处理流水线中以供执行。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US17/133,899 US12020033B2 (en) | 2020-12-24 | 2020-12-24 | Apparatus and method for hardware-based memoization of function calls to reduce instruction execution |
US17/133,899 | 2020-12-24 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114675889A true CN114675889A (zh) | 2022-06-28 |
Family
ID=82070492
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111407634.5A Pending CN114675889A (zh) | 2020-12-24 | 2021-11-24 | 用于对函数调用的基于硬件的记忆化的装置和方法 |
Country Status (2)
Country | Link |
---|---|
US (1) | US12020033B2 (zh) |
CN (1) | CN114675889A (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11880231B2 (en) * | 2020-12-14 | 2024-01-23 | Microsoft Technology Licensing, Llc | Accurate timestamp or derived counter value generation on a complex CPU |
US20220291964A1 (en) * | 2021-03-12 | 2022-09-15 | International Business Machines Corporation | Workflow memoization |
US11809425B1 (en) * | 2022-06-08 | 2023-11-07 | Snowflake Inc. | Function memoization in query processing system |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7802236B2 (en) * | 2002-09-09 | 2010-09-21 | The Regents Of The University Of California | Method and apparatus for identifying similar regions of a program's execution |
US20130024674A1 (en) * | 2011-07-20 | 2013-01-24 | International Business Machines Corporation | Return address optimisation for a dynamic code translator |
-
2020
- 2020-12-24 US US17/133,899 patent/US12020033B2/en active Active
-
2021
- 2021-11-24 CN CN202111407634.5A patent/CN114675889A/zh active Pending
Also Published As
Publication number | Publication date |
---|---|
US12020033B2 (en) | 2024-06-25 |
US20220206816A1 (en) | 2022-06-30 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107368286B (zh) | 用于多精度算术的simd整数乘法累加指令 | |
US12020033B2 (en) | Apparatus and method for hardware-based memoization of function calls to reduce instruction execution | |
US11531542B2 (en) | Addition instructions with independent carry chains | |
CN107003853B (zh) | 用于数据推测执行的系统、装置和方法 | |
CN107003850B (zh) | 用于数据推测执行的系统、装置和方法 | |
US9996356B2 (en) | Method and apparatus for recovering from bad store-to-load forwarding in an out-of-order processor | |
US20180173534A1 (en) | Branch Predictor with Branch Resolution Code Injection | |
US11188341B2 (en) | System, apparatus and method for symbolic store address generation for data-parallel processor | |
WO2014169032A1 (en) | Systems and methods for flag tracking in move elimination operations | |
KR20140113577A (ko) | 조건부 쇼트 포워드 브랜치들을 산술적으로 동등한 술어적 명령어들로 변환 | |
US20160283247A1 (en) | Apparatuses and methods to selectively execute a commit instruction | |
EP3767462A1 (en) | Detecting a dynamic control flow re-convergence point for conditional branches in hardware | |
US11048516B2 (en) | Systems, methods, and apparatuses for last branch record support compatible with binary translation and speculative execution using an architectural bit array and a write bit array | |
CN113535236A (zh) | 基于指令集体系结构的和自动的加载跟踪的方法和装置 | |
US10579378B2 (en) | Instructions for manipulating a multi-bit predicate register for predicating instruction sequences | |
US20220413860A1 (en) | System, Apparatus And Methods For Minimum Serialization In Response To Non-Serializing Register Write Instruction | |
US10083033B2 (en) | Apparatus and method for efficient register allocation and reclamation | |
US11169809B2 (en) | Method and apparatus for converting scatter control elements to gather control elements used to sort vector data elements | |
US20170192791A1 (en) | Counter to Monitor Address Conflicts | |
US9904549B2 (en) | Method and apparatus for loop-invariant instruction detection and elimination | |
US9710389B2 (en) | Method and apparatus for memory aliasing detection in an out-of-order instruction execution platform | |
US20240103878A1 (en) | Short pipeline for fast recovery from a branch misprediction | |
US11797309B2 (en) | Apparatus and method for speculative execution information flow tracking | |
US20220091851A1 (en) | System, Apparatus And Methods For Register Hardening Via A Micro-Operation | |
US20230409335A1 (en) | Selective disable of history-based predictors on mode transitions |
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 |