CN1717663A - 管理缓存旁路的方法和装置 - Google Patents
管理缓存旁路的方法和装置 Download PDFInfo
- Publication number
- CN1717663A CN1717663A CNA038256983A CN03825698A CN1717663A CN 1717663 A CN1717663 A CN 1717663A CN A038256983 A CNA038256983 A CN A038256983A CN 03825698 A CN03825698 A CN 03825698A CN 1717663 A CN1717663 A CN 1717663A
- Authority
- CN
- China
- Prior art keywords
- load instructions
- buffer memory
- bypass
- loads
- delay
- 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.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0888—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches using selective caching, e.g. bypass
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/443—Optimisation
- G06F8/4441—Reducing the execution time required by the program code
- G06F8/4442—Reducing the number of cache misses; Data prefetching
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/3004—Arrangements for executing specific machine instructions to perform operations on memory
- G06F9/30043—LOAD or STORE instructions; Clear instruction
-
- 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/30181—Instruction operation extension or modification
- G06F9/30185—Instruction operation extension or modification according to one or more bits in the instruction, e.g. prefix, sub-opcode
-
- 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/34—Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes
- G06F9/345—Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes of multiple operands or results
- G06F9/3455—Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes of multiple operands or results using stride
-
- 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, look ahead
- G06F9/3824—Operand accessing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0893—Caches characterised by their organisation or structure
- G06F12/0897—Caches characterised by their organisation or structure with two or more cache hierarchy levels
Abstract
公开了管理第一缓存旁路的方法和装置。在一种这样的方法中,标识出具有大于或等于预定阈值的预期延迟的加载指令。然后请求将标识出的加载指令调度为具有预定延迟。然后调度软件程序。然后将已调度的软件程序中与加载指令相关联的实际延迟与预定延迟进行比较。如果所述实际延迟大于或等于预定延迟,则将加载指令标记为旁路第一缓存。
Description
技术领域
本发明一般地涉及计算机,更具体地说涉及管理缓存(cache)旁路的方法和装置。
背景技术
典型的计算机具有随机访问存储器层次结构,包括一级或多级处理器上的缓存存储器、主存储器(位于处理器芯片外)和大容量存储设备(例如硬盘驱动器等等)。一般地,访问一级缓存存储器(L1缓存)最快(具有最低的延迟),而访问大容量存储设备最慢。与访问存储器层次结构的中间级别相关联的延迟位于存储访问延迟的这两个极端之间。在延迟时间的增加之外,存储器层次结构的各个级别的大小从存储器层次结构的最高级别到最低级别一般也增加。
现代高性能处理器(例如英特尔ItaniumTM处理器系列以及其他EPIC(显式并行指令计算)处理器)具有多级片上缓存存储器。例如,ItaniumTM处理器包括三级片上缓存。由于未来的处理器操作频率极端地高,因此,为了支持从存储器系统到高速处理器的寄存器的一周期加载,一级缓存(这里称为“μ缓存”的L1缓存)通常在存储大小上很小。例如,μ缓存一般具有存储1K(千字节)或更少数据的容量。
适当地管理小而快的μ缓存对它所服务的主机处理器的整体性能来说很重要。具体地说,在许多情形下,相当数量的加载指令要求立即从存储器系统获取数据,以推进程序执行而不会遇到流水线停滞。这种指令在它们所需要的数据存储在μ缓存时将会受益。
在一般的情形下,缓存存储器具有包含(inclusive)性。因此,当从存储器系统的给定级别(例如μ缓存)获取数据时,将所述数据写进该缓存的所有更低的级别中(例如二级(L2)缓存、三级(L3)缓存等等)。这种方法最大化了后续指令所需的数据存在于最高级别的缓存中的可能性,因而减少了对较慢存储器资源的访问次数以及缓存缺失(即从不包含所期望的数据的缓存级别获取该数据的失败的尝试)的次数。
附图说明
图1是示例性计算机的示意图。
图2是管理μ缓存旁路的示例性装置的示意图。
图3的流程图示出了实现图2的装置的示例性程序。
图4的流程图示出了图3的程序所调用的Find_WB_Loads例程。
图5是示例性控制流的示意图。
图6是另一个示例性控制流的示意图。
图7的流程图示出了图3的程序所调用的示例性Find_SQ_Loads_In_Region例程。
图8的流程图示出了图7的程序所调用的示例性SQ Identify(Single Path)例程。
图9示出了示例性的依赖性图。
图10的流程图示出了图8的程序所调用的示例性Select_Loads_From_Candidates例程。
图11示出了示例性的精简的依赖性图。
图12的流程图示出了图3的程序所调用的示例性Find_LB_Loads_In_Region例程。
图13的流程图示出了图12的程序所调用的示例性Find_LB_Loads_In_Path例程。
图14的流程图示出了图3的程序所调用的示例性Find_MB_Loads例程。
具体实施方式
图1是示例性计算机10的方框图,计算机10能够实现这里公开的装置和方法。计算机10可以是个人数字助理(PDA)、膝上型计算机、笔记本计算机、桌面计算机、服务器、因特网家电或任何其他类型的计算设备。
本实施例的计算机10包括处理器12,处理器12例如由一个或多个Intel微处理器实现。在所示出的实施例中,处理器12是静态调度良序处理器,例如来自英特尔的Itanium处理器系列的处理器。英特尔Itanium系列中的处理器的体系结构是优选的,因为它们支持加载指令格式中的一种标志。如果该标志未设置,则加载指令将访问μ缓存。否则,加载指令将旁路μ缓存而直接访问L2缓存。
传统上,处理器12可通过总线18与主存储器通信,主存储器包括易失性存储器14和非易失性存储器16。易失性存储器14可由同步动态随机访问存储器(SDRAM)、动态随机访问存储器(DRAM)、RAMBUS动态随机访问存储器(RDRAM)和/或任何其他类型的随机访问存储器件实现。非易失性存储器16可由闪存或任何其他所需类型的存储器件实现。对主存储器14、16的访问通常以传统方式受控于存储器控制器(未示出)。
示例性计算机10还包括传统接口电路20。接口电路20可由任何类型的公知接口标准实现,例如以太网接口和/或通用串行总线(USB)和/或第三代输入/输出(3GIO)接口(也称为PCI Express)。
一个或多个输入设备22连接到接口电路20。输入设备22允许用户输入数据和命令到处理器12中。输入设备例如可由键盘、鼠标、触摸屏、轨迹板、轨迹球、轨迹筒(isopoint)和/或语音识别系统实现。
一个或多个输出设备24也连接到接口电路20。输出设备24例如可由显示设备(例如液晶显示器、阴极射线管显示器(CRT)等等)、打印机和/或扬声器实现。接口电路20因此一般包括图形驱动器卡。
接口电路20还包括通信设备例如调制解调器或网络接口卡,以辅助于通过网络26(例如以太网连接、数字用户线路(DSL)、电话线、同轴电缆、蜂窝电话系统等等)与外部计算机的数据交换。
计算机10还包括一个或多个大容量存储设备28,用于存储软件和数据。这种大容量存储设备28的实施例包括软盘驱动器、硬盘驱动器、光盘驱动器和数字多功能盘(DVD)驱动器。
如所已知的,示例性计算机10的存储器系统安排成层次结构的方式。例如,处理器12包括3级板上缓存存储器。一级缓存是最高级存储器,具有最低的访问时间。一级板上缓存存储器还是最小的缓存,这里称为μ缓存。其他级缓存在大小和访问时间上逐步增加。在本实施例中,处理器12包括第二级和三级片上缓存(即L2和L3缓存)。计算机10还包括第四级(L4)缓存,其可位于与处理器12相同的芯片上,或可具有它自己的芯片。L4缓存大于μ缓存、L2缓存和L3缓存,且访问也比它们慢。例如,L4缓存可由SRAM实现。第5级缓存(主存储器)大于L4缓存,访问时间也比L4慢。例如,主存储器可由DRAM实现。在图4的实施例中,L4缓存和主存储器由随机访问存储器14代表。
为了执行程序指令,处理器12一般使得将任何所需的数据从大容量存储设备加载到缓存中。当数据加载到给定级别的缓存中时,它通常被写到所有更低级的缓存中,以增加某级缓存持有将来可能会再次需要的数据的可能性。这种冗余性或包含性特征通常减少了对大容量存储设备28的访问次数,而大容量存储设备28在存储器的任何部分中通常具有最慢的访问时间。
当处理器12需要执行指令时,该指令所需的任何数据从缓存(如果存在的话)或大容量存储设备28(如果不存在与缓存中)加载到处理器12的一个或多个寄存器中,在此根据该指令的规定对数据进行操作。
在本专利的中,μ缓存的延迟称为T1,L2缓存的延迟称为T2,L3缓存的延迟称为T3,等等。示例性命中延迟(即当所请求的数据位于对应缓存中)是T1=1周期,T2=3周期,T3=10周期。在本专利中,加载指令指整数加载指令。存储操作和浮点加载直接访问L2缓存(即总是旁路μ缓存),因为存储操作通常不是时间关键性的,而浮点加载总是涉及大于T1的延迟。由于其小容量,μ缓存应只存储不能由更低级缓存(例如L2缓存-主存储器)及时提供的数据。换言之,如果给定加载指令所访问的数据不会在接下来的T2个周期中使用,则它应直接从L2缓存访问。这一经验方法将少了μ缓存的压力,因此可在其中存储更具时间关键性的数据。
另外,即使所加载的结果立即被一使用指令所使用,但是如果对应的初始加载指令在μ缓存中缺失(即所加载的数据不在μ缓存中),并且没有后续的加载指令会访问所加载的缓存线(line),则初始加载指令应旁路μ缓存而直接访问L2缓存。直接访问L2缓存确保所获取的数据没有被写到μ缓存。μ缓存的旁路是适当的,因为初始的加载指令必须访问L2缓存以得到结果(即数据一开始不存在与μ缓存中),并且不存在与将数据取到μ缓存中相关联的预取效果,因此不需要因为这一数据而加重μ缓存的负担。具有这些特性的加载这里称为缺失旁路(MB)加载。
而且,具有特定特性的步长加载指令也应旁路μ缓存。步长加载指令是位于具有主步长的循环内的加载指令。加载指令的步长是步长加载指令发射的两个连续数据地址之间的差。如果整个循环的趟数和/或主步长大小相对于μ缓存的大小而言足够大,则步长加载指令如果不旁路μ缓存则会扰乱μ缓存。因此,这些步长加载指令应被标记为旁路μ缓存。
用于在执行软件程序时,管理μ缓存旁路以减少μ缓存缺失的示例性装置40示出在图2中。如图2所示,示例性装置40对将被管理的软件程序进行操作,该软件程序当前至少部分存储于存储器14的某部分中。
为了标识出所述软件程序内的候选加载指令以在可能时旁路μ缓存,装置40设置了候选加载标识器42。候选加载标识器42在编译器调度软件前检查该软件以发现候选加载指令。候选加载标识器42标识出具有(1)预期大于或等于第一预定阈值(例如≥T2个周期)的延迟,和(2)大于或等于第二阈值的旁路概率的加载指令,作为候选加载指令。候选加载标识器42通过给定加载指令在依赖性图中的松弛因子(slack),确定给定加载指令的预期延迟。例如,如果考察中的加载指令最早可能在周期1执行,而相关联的使用指令最迟可能在周期10执行,则松弛因子是10个周期。由于候选加载标识器42检查的指令尚未被调度,因此它们尚未与确切的调度周期相关联。相反,这些指令可能在执行序列中相对于其他指令被前移或后移。因此,给定加载指令的“松弛因子”是给定加载指令和需要所加载的数据的使用指令之间可能被调度的时间差。
所示出的装置40还设置了调度器44。调度器44工作为传统编译器中的传统调度器44,同时具有一个修改。具体地说,图2的调度器44尝试将候选加载指令(即候选加载标识器42所标识的加载指令)调度为具有大于或等于预定阈值的延迟。在本实施例中,调度器44所使用的预定阈值是T2,即L2缓存的延迟。尽管调度器44尝试了这一技术,但其他约束可使得不是所有的候选加载指令都具有所需延迟。事实上,可能候选加载指令中的全部、无一或一些被如此调度。
为了标记加载指令为旁路μ缓存,图2的装置40还设置了最终加载标识器46。最终加载标识器46对调度器44调度的代码进行操作,以标识出最终加载指令。最终加载标识器46标识出具有(1)大于或等于第一预定阈值(例如≥T2个周期)的实际(所调度的)延迟,和(2)大于或等于第二预定阈值的旁路概率的加载指令,作为最终加载指令。最终加载标识器46通过确定加载指令被调度执行的时间和对该使用指令所加载的数据进行操作的使用指令被调度执行的时间之间的时间差,确定给定加载指令的实际延迟。最终加载标识器46在支持加载指令中的标志的实现方式(例如使用来自Itanium的处理器的实现方式)中,通过设置每个这些加载指令中的所述标志,将加载指令标记为旁路μ缓存。
为了从未调度的软件程序生成目标码,图2的装置40还设置了目标码生成器48。目标码生成器48像在传统编译器中那样实现,并以传统方式工作。
为了将步长加载指令标记为旁路μ缓存,图2的装置40还设置了步长加载标识器50。如果:(1)步长加载指令位于循环中,并且(2)步长加载指令在该循环被执行时使用多于预定量的μ缓存,则步长加载标识器50将步长加载标记为旁路μ缓存。步长加载标识器50通过下述操作来确定在执行循环时步长加载指令是否使用多于预定量的μ缓存:(1)确定在其中执行步长加载指令的整个循环的趟数;(2)将趟数与和步长加载指令相关联的步长相乘,以得到步长大小值;(3)将步长大小值除以代表μ缓存大小的值,得到存储器使用率百分比;以及(4)将存储器使用率百分比与预定μ缓存量相比较。在所示出的实施例中,步长加载标识器50在候选加载标识器42之前对软件进行操作,从而可减少需要候选加载标识器42和最终加载标识器46进行分析的代码量,同时简化了调度器44的任务。
如图2所示,装置40还设置了缺失旁路加载标识器52。假设最终加载标识器46所标识的加载旁路了μ缓存,通过执行目标码一次或多次而得出特定的性能分析数据(profiledata),之后缺失旁路加载标识器52进行操作。缺失旁路加载标识器52标识出下述加载指令,其在μ缓存中产生缺失,并且其中所述加载指令所加载的缓存线未被重用。对于来自前面的标识阶段的未旁路μ缓存的每个加载指令,缺失旁路加载标识器52将(a)加载指令在μ缓存中产生缺失,并且该加载指令所加载的缓存线未被重用的次数,除以(b)所述加载指令被执行的次数,从而得到一个比值。如果该比值大于或等于预定比率阈值,则缺失旁路加载标识器52将加载指令标记为旁路μ缓存。
一旦缺失旁路加载标识器52分析了所有代码,目标码生成器48对由最终加载标识器46、步长加载标识器50、调度器44和缺失旁路加载标识器52修改过的程序或中间代码进行操作,以生成包括被标记为旁路μ缓存的加载指令的目标码。这结束了将源代码编译为目标码,以管理μ缓存旁路来降低μ缓存缺失次数的过程。
如上所说明,所示出的装置40采用多种编译器技术例如依赖性分析和性能分析来标识出应旁路μ缓存而直接访问L2缓存的加载。因此,示例性装置40是对中间代码进行操作,以产生可更有效地利用μ缓存,因而具有更少缓存缺失的目标码的编译器。
用于实现图2的装置的示例性软件程序示出在图3-14中。在本实施例中,该程序用于由处理器12执行,并包括在存储于可感知介质例如CD-ROM、软盘、硬盘驱动器、数字多功能盘(DVD)或与处理器12相关联的存储器上的软件中,但是本领域的普通技术人员将会很容易地认识到整个程序或其一些部分还可以公知的方式由处理器12之外的设备执行,并且/或者包括在固件和/或专用硬件中。例如,候选加载标识器42、调度器44、最终加载标识器46、目标码生成器48、步长加载标识器50和/或隔离的(isolated)加载标识器52中的任何一个或全部都可由软件、硬件和/或固件实现。而且,虽然该示例性程序是参考图3-14示出的流程图描述的,但是本领域的普通技术人员很容易会认识到,也可使用其他方法来实现图2的装置40。例如,各个方框的执行顺序可以改变,并且/或者所描述的方框可被改变、去除或结合。
参考图3,装置40通过将集合Final_Bypass_Loads清空为空集(方框102)来启动第一趟编译(方框100)。然后激活步长加载标识器50(方框104)来标识出旁路μ缓存的步长加载指令(方框104)。具体地说,如图4所示,步长加载标识器50首先将集合WB_Loads清空为空集(方框110)。然后步长加载标识器50开始检查考察中的程序以标识出加载指令。如果程序中没有加载指令(方框112),则步长加载标识器50返回WB_Loads为空集,控制返回到方框130(图3)。
假设处理中的程序包括加载指令(方框112),则步长加载标识器50取得被检查的加载指令(方框114),以确定它是否位于循环中(方框116)。如果该加载指令不在循环中(方框116),则步长加载标识器50继续搜索该程序以发现下一个加载指令。如果没有其他加载指令(方框118),则控制返回到图3的方框130。如果存在其他的加载指令,则控制继续循环通过方框114-118,直到没有其他加载指令(方框118),或者直到标识出位于循环中的加载指令(方框116)。
如果标识出位于循环中的加载指令(方框116),则步长加载标识器50确定该加载指令是否是步长化的(方框120)。加载指令如果具有主步长则是步长化的。主步长是比其他步长频繁得多地发生的步长。加载指令的步长是该加载指令发射的两个连续地址之间的差。如果加载指令不是步长化的(方框120),则步长加载标识器50继续搜索步长加载指令(方框114-120),或者如果已检查了最后的加载指令(方框118)则退出。
如果加载指令是步长化的(方框120),则步长加载标识器50确定步长加载指令在循环被执行时是否使用多于预定量的μ缓存。具体地说,步长加载标识器50通过将软件进行包括所述加载指令的循环的趟的数量(即趟数)乘以加载指令的主步长来计算步长大小值(SWS)(方框122)。步长加载标识器50然后将步长大小值(SWS)除以μ缓存的大小,并将结果与预定阈值(例如值为5或更大的参数)进行比较(方框124)。如果步长大小值(SWS)超过阈值(方框124),则步长加载标识器50通过将该加载指令添加到集合WB_Loads(方框126)来将它标识为应旁路μ缓存的加载。控制然后返回到方框118。如果补偿大小值(SWS)未超过阈值(方框124),则控制返回到方框118而不将该加载添加到集合WB_Loads。
控制继续循环通过方框114-126,直到每个加载指令都被分析以了解它是否是应旁路μ缓存的步长加载指令。当这一工作完成时(方框118),控制返回到图3的方框130。
在方框130,最终加载标识器46将步长加载指令集合{WB_Loads}添加到集合最终旁路加载{Final_Bypass_Loads}。
本领域的普通技术人员将会认识到,程序的一些部分只由单执行路径,而其他部分则由于一个或多个对通过某部分的控制流进行引导而分支的判决而导出多个路径。在本专利中,软件程序具有一个或多个控制流路径、一个或多个退出点和单个入口点的部分称为“区域”。程序在区域内只具有一个在单个入口点和单个退出点之间的控制流的部分称为“路径”。区域可包括一个或多个路径。
在方框130后,装置40从程序的开始处开始检查程序,以得到具有大于或等于预定阈值的延迟的候选加载指令。现有技术中的编译器通常假设加载会命中μ缓存,并用T1延迟来调度该加载。如果加载具有T2个周期的调度松弛因子,则该加载可用T2个周期的延迟来调度而不会影响关键路径长度。(具有这种调度松弛因子的加载在这里称为“松弛因子适格(qualified)加载”或“候选旁路加载”。)不是每个具有调度松弛因子T2的加载都是松弛因子适格加载。当具有足够的松弛因子的加载被标识为松弛因子适格加载,并且其延迟增加时,其他加载的松弛因子可能会被影响(例如原来具有T2个周期的松弛因子的加载在另一个松弛因子适格加载被指定了T2个周期的延迟后可能不再具有T2个周期的松弛因子)。依赖于松弛因子适格加载被标识出的顺序,不同标识顺序可能会产生不同的松弛因子适格加载集合。因此,装置40具有下述目的:(1)最大化松弛因子旁路加载(由它们的执行频度进行了加权)的数量;以及(2)最小化总调度长度的增长。
如图3所示,在方框236,调用Find_SQ_Loads_In_Region例程。如果加载处于调度中的区域的多个控制流路径上,则我们首先确定它对于各个路径是否应该是松弛因子适格加载,然后结合来自所有路径的信息,确定该加载对于所述区域是否是松弛因子适格加载。为此,我们定义参数SQ_PROB,其值在0和1之间。一个加载当且仅当它在所述路径(由路径频度进行了加权)的SB_PROB部分上可被旁路时才是松弛因子适格加载。更精确地说,设旁路区域概率(BRP)是在其上加载应被旁路的路径的总频度对区域进入频度的比率。一个加载当且仅当BRP(加载)>SQ_PROB时才是对于给定区域的松弛因子适格加载。
两种情形下,加载可具有小BRP因而不能旁路。第一种情形示出在图5中。加载和它的使用位于所示出的区域中的相同路径上,但频度与区域频度比起来要低。在此情形下,指令调度器44不可能将该加载从低频块b3移到高频块b1,或将所述使用从块b3移到b4,即使对所述加载和使用都有调度松弛因子。第二种情形示出在图6中。加载在多个路径中被使用,但只在低频路径上存在松弛因子。在此情形下,加载应不应被标识为对于所述区域的松弛因子适格加载,因为如果这样做的话将会损害该加载在更频繁的、所述加载在其中不应被旁路的路径上的执行。
参考图7,Find_SQ_Loads_In_Region例程在候选加载标识器42将集合SQ_Loads_Region清空为空集时开始(方框240)。候选加载标识器42然后将区域频度变量设置为该区域的入口块被执行的频度(方框242)。对于区域中的每个加载指令,候选加载标识器42然后将对应加载的Bypass_Freq设置为等于0(方框244)。
候选加载标识器42然后选择路径中的一个路径进行分析(方框246)。它然后调用SQ Identify(Single Path)例程(方框248)。SQ_Identify(Single Path)例程得出具有超过特定阈值的松弛因子的候选加载集合。这些候选加载被SQ Identify(Single Path)例程在集合SQ_Loads中返回。
参考图8,SQ_Identify(Single Path)例程在候选加载标识器42将集合SQ_Loads清空为空集(方框140),并将阈值(T)设置为T2(即L2缓存的延迟)(方框142)时开始。候选加载标识器42然后构建分析中的控制流图路径的依赖性图(方框144)。示例性的依赖性图示出在图9中。在本实施例中,每个圆圈代表一个指令。有标号的指令例如是使用指令(即对先前加载到缓存中的数据进行操作的指令,例如加法指令)。标号后标记有“Ld”的指令是加载指令。连接两个指令的线代表图中较低指令对较高位置指令的依赖性。例如,在图9中,指令2依赖于指令1,因而在指令1被执行前不能执行。依赖性图建立后,将集合“Universe”定义为包括路径中的每个加载指令(例如Ld1、Ld2、Ld3、Ld4和Ld5)(方框144)。
在方框146,候选加载标识器42确定集合Universe是否有任何元素。如果没有(方框146),则SQ_Identify(Single Path)例程终结,并且控制返回到图7的方框250。如果集合Universe具有至少一个元素(方框146),则候选加载标识器42将集合Possible_Loads清空为空集(方框148)。
候选加载标识器42然后从集合Universe取得一个加载(例如Ld1)(方框150),并计算该加载的松弛因子(方框152)。所述松弛因子被计算为所述加载在依赖性图中最迟和最早的周期之间的差。计算出松弛因子后(方框152),候选加载标识器42将该松弛因子与阈值进行比较(方框154)。如果松弛因子大于或等于阈值T(方框154),则加载(例如Ld1)被添加到集合Possbile_Loads(方框156)。如果松弛因子小于阈值T(方框154),则该加载(例如Ld1)不是可能的候选加载,因此不被添加到集合Possible_Loads。在确定正在被分析的加载(例如Ld1)是否具有足够的松弛因子以成为可能的候选加载后(方框154),候选加载标识器42确定依赖性图中是否有其他加载指令(方框158)。如果存在其他加载,则控制返回到方框150,开始下一个加载指令的松弛因子的分析。否则,当已分析了最后一个加载指令时(方框158),控制前进到方框160。
在方框160,候选加载标识器42确定集合Possible_Loads是否具有任何元素。如果它不具有任何元素(方框160),则控制前进到方框172,在此例如将阈值T减一个周期。候选加载标识器42然后确定阈值T是否已低于预定最小值(方框174)。如果是,则SQ_Identify(single path)例程终结,并且控制返回到图7的方框250。否则,控制返回到方框146。本领域的普通技术人员将会认识到,降低阈值T可能会增加可被标识为可能的候选加载的加载指令的数量,因为进行如此的指定需要较小的松弛因子(见方框154)。通过降低阈值来将更多的加载指令置入可能的候选者集合可能会增加程序的调度长度。但是,用调度长度来换取缓存性能可提高程序的整体性能。
返回到方框160,假设集合Possible_Loads非空,则候选加载标识器42从可能的候选者集合(即集合Possible_Loads)选择一个加载(方框162)。在可能的候选加载之间进行选择的最优方案可能是NP难题。但是,一个可能的候选加载相对于其他可能的候选加载依赖性越低,则可能的候选加载被所述候选加载的延迟增加的影响就越小。因此,如果某个可能的候选加载对另一个候选加载没有依赖性,则它总是可被选为候选加载。利用这些原理,候选加载标识器42从可能的候选加载中选择一个加载,如图10所示。
参考图10,候选加载标识器42通过仅使用来自集合Possible_Loads的加载指令来构建精简的依赖性图,开始从可能的候选者中选择一个加载的处理(方框180)。基于图9的实施例的示例性精简依赖性图示出在图11中。图11的实施例假设加载指令Ld1-Ld4(见图9)处于集合Possible_Candidates中,而加载指令Ld5(见图9)没有足够的松弛因子,因而未被包括在该集合中。建立精简依赖性图后(方框180),候选加载标识器42使用传统排序算法从该图中选出具有最少依赖性边的加载指令(方框182)。在图11的实施例中,加载指令Ld1和Ld4都具有一条依赖性边,而加载指令Ld2和Ld3都没有依赖性边。因此,候选加载标识器42将选择加载指令Ld2和加载指令Ld3中之一。如果两个或更多加载指令具有相同数量的依赖性边,则可在这些指令之间进行任意的选择。
回到图8,候选加载标识器42将从集合Possible_Loads中选择的加载指令(例如Ld2)添加到候选或松弛因子适格加载集合SQ_Loads(方框186)。它还将所选择的加载从集合“Universe”中去除(方框188)。候选加载标识器42然后进行检查以看集合“Universe”是否为空(方框146)。如果非空,则控制返回到方框148,在此清空集合Possbile_Loads,并且重复剩余在集合Universe中的加载的松弛因子的处理,以在考虑添加到集合SQ_Loads中的加载的增加的延迟的条件下,看集合Universe中的任何加载是否应该被标识为可能的候选加载。
控制继续循环通过方框146-188,直到“Universe”变为空(方框146)或在方框160确定集合“Possible_Loads”没有元素。在第一种情形下,处理终结。在第二种情形下,将阈值T减少一个周期(方框172),并与预定阈值比较(方框174),如上所述。如果仍超过阈值(方框174),则控制循环回到方框146。否则,SQ_Identify(Single Path)例程终结,并且控制返回到方框250(图7)。
回到图7,在执行SQ_Identify(Single Path)例程后(方框248),候选加载标识器42确定集合SQ_Loads是否具有任何元素(方框250)。如果集合SQ_Loads中没有元素(方框250),则控制前进到方框260。否则,控制前进到方框252。
例如,假设集合SQ_Loads非空(方框250),则候选加载标识器42从集合SQ_Loads中取得一个候选加载(方框252)。然后它将该加载位于其上的路径被执行的频度加到所述加载针对于考察中的加载的Bypass_Freq(方框254)。候选加载标识器42然后确定集合SQ_Loads中是否有任何其他加指令(方框256)。如果有,则控制再次循环通过方框252-256。控制继续循环通过方框252-256,直到SQ_Loads中的所有加载都已被分析(方框256)。
候选加载标识器42然后将集合SQ_Loads添加到集合SQ_Candidates(方框258),并确定区域中是否还有任何其他路径需要分析(方框260)。如果存在其他路径要分析(方框260),则控制返回到方框256,,如上所述地分析下一个路径。控制继续循环通过方框246-260,直到区域中的每个路径都进行了分析以发现候选加载(方框260)。
所有路径都已被分析后(方框260),候选加载标识器42检查确定集合SQ_Candidates是否包括任何元素(方框262)。如果它不包括任何元素(方框262),则区域中未标识出候选加载。因此,将阈值TR减小一个周期(方框274),并与预定阈值比较(方框276)。如果仍超过阈值(方框276),则控制循环回到方框244,确定如果采用较低的松弛因子阈值是否会标识出任何候选加载。否则,Find_SQ_Loads_In_Region例程终结,控制返回到图3的方框280。
为了说明的目的,假设集合SQ_Candidates非空(方框262),则候选加载标识器42进入循环(方框264-272),分析集合SQ_Candidates中的每个加载,以看它是否具有大于或等于预定概率阈值的旁路概率。具体地说,候选加载标识器42从集合SQ_Candidates中取得第一加载(方框264)。它然后通过将该Load’s_Bypass_Frequency除以区域的频度,计算该加载的旁路区域概率(BRP)(方框266)。候选加载标识器42然后将所计算出的BRP与概率阈值(SQ_PROB)比较(方框268)。SQ_PROB是在0和1之间的值(例如0.1)。
如果加载的BRP超过阈值SQ_PROB(方框268),则候选加载标识器42通过将加载添加到集合SQ_Loads_Region,将它标识未候选加载(方框270)。如果加载的BRP未超过阈值SQ_PROB(方框268),则控制前进到方框272。
如果集合SQ_Candidates中有其他的加载要分析(方框272),则控制再次循环通过方框264-272。否则,Find_SQ_Loads_In_Region例程终结,控制返回到图3的方框280。
回到图3,当Find_SQ_Loads_In_Region例程返回时(方框236),调度器44调度所述区域(方框280)。这样做时,调度器44尝试对SQ_Loads_Region中的每个候选加载调度T2的延迟。如上所述,由于各种约束,调度器44可将SQ_Loads_Region中的无一、一些或所有候选加载调度为具有T2的延迟。
为了确定所调度的区域中哪些加载是延迟旁路加载,调用Find_LB_Loads_In_Region例程,所返回的结果置于LB_LOADS_Region中(方框282)。如果一个加载位于调度中的区域的多个控制流路径上,则我们首先确定它对于各个路径是否应该是延迟旁路加载,然后结合来自所有路径的信息,确定该加载对于所述调度区域是否是延迟旁路加载。为此,我们定义参数SQ_PROB,其值在0和1之间。旁路加载概率(BLP)是在其上加载应被旁路的路径的总频度对加载频度的比率。一个加载当且仅当BLP(加载)>LB_PROB时才是对于区域的延迟旁路加载,其中LB_PROB是用于标识延迟旁路加载的概率阈值。注意,BLP稍微不同于BRP。对于图5所示的情形,BLP是100%而BRP仅是10%。即使加载的路径频度与区域频度比较来是低,但是由于指令调度已完成,并且该加载及其使用已相距至少T2个周期,因此所述加载仍应被旁路。对于图6所示的情形,BLP和BRP都是10%。
参考图12,Find_LB_Loads_In_Region例程在最终加载标识器46将集合LB_Loads_Region清空为空集时开始(方框340)。对于区域中的每个加载指令,最终加载标识器46然后将对应的变量Load’s_Bypass_Freq设置为等于0(方框344)。
最终加载标识器46然后选择区域中的路径之一进行分析(方框346)。它然后调用Find_LB Loads_In_Path例程(方框348)。Find_LB Loads_In_Path例程得出具有大于或等于特定阈值的调度延迟的延迟旁路加载集合。这些延迟旁路加载被Find_LB Loads_In_Path例程在集合LB_Loads中返回。
在指令之间的依赖性约束之外,许多其他体系结构性或微体系结构性的约束(例如机器宽度和捆绑(bundling)限制)也可能会影响指令调度后的最终调度。具体地说,未被标识未松弛因子适格加载的加载可以下述方式被调度,该方式使得它的结果在接下来的T2个周期中不被使用。这些加载应被标识为旁路μ缓存的延迟旁路加载。当这种情况发生时,未被候选加载标识器42标识的加载被选择为延迟旁路加载。另一方面,候选加载标识器42选择的候选加载(即松弛因子适格加载)并不会确保将被调度器44调度有T2的延迟。由于微体系结构性或其他约束,指令调度器44可能不能利用可获得的松弛因子。在这样的情况中,所述松弛因子适格加载将不会被标识微最终旁路加载。
标识延迟旁路加载比标识候选加载容易,因为标识顺序不重要。一个加载当且仅当它的所有使用都至少在考察中的加载指令被调度的T2个周期之后时才是延迟旁路加载,独立于其他延迟旁路加载。
参考图13,当最终加载标识器46构建路径的依赖性图时启动Find_LB_Loads_In_Path例程(方框200)。该依赖性图类似于图9所示的依赖性图,除了在本情形中,所述依赖性图基于调度器44得出的调度之外。因此,在方框202得出的依赖性图中的加载和使用指令的顺序通常将不同于在图8的方框144得出的依赖性图中的步骤的顺序。
得出依赖性图后(方框200),最终加载标识器46将集合LB_Loads_Path清空为空集(方框202)。最终加载标识器46然后确定路径上是否有任何加载(方框203)。如果路径上没有加载(方框203),则Find_LB_Loads_In_Path例程终结。否则,最终加载标识器46取得路径上第一个被调度的加载,确定它是否是如上所述的延迟旁路加载(方框204)。具体地说,标识出路径上最后的指令(方框206)。如果正被分析的加载指令和最后的指令之间的周期数目(加上最后的指令的延迟)小于预定阈值(例如T2)(方框208),则控制前进到方框220。如果路径上没有其他加载指令(方框220),则Find_LB_Loads_In_Path例程终结。否则,控制返回到方框204。
假设正被分析的加载指令和最后的指令之间的周期数目(加上最后的指令的延迟)大于或等于阈值(方框208),则最终加载标识器46确定考察中的加载指令所加载的数据是否被路径中的指令所使用(方框210)。如果该数据未被使用(方框210),则控制前进到方框222,将加载指令标识为延迟旁路加载。否则,控制前进到方框212。
假设所述加载被使用了(方框210),则最终加载标识器46确定使用所述加载指令所加载的数据的任何指令和所述加载指令本身之间的调度延迟是否小于所述阈值(方框214)。如果是,则该加载指令不是延迟旁路加载,因此控制退出方框212-216所定义的循环,这时,最终加载标识器46确定依赖性图中是否有任何其他的加载指令要分析(方框220)。但是,如果加载指令和路径上对该加载指令所加载的数据进行操作的每个使用指令之间的周期数目都大于或等于阈值(例如T2)(方框216),则最终加载标识器46将该加载指令添加到集合LB_Loads_Path(方框222)。控制然后前进到方框220。
更具体地说,在方框212,最终加载标识器46取得第一个对考察中的加载指令所加载的数据进行操作的使用指令。最终加载标识器46然后确定考察中的加载指令和该使用指令之间的周期数目是否大于或等于阈值(例如T2)(方框214)。如果是,则控制前进到方框220。否则,最终加载标识器46确定加载指令所加载的数据是否被路径中的任何其他使用指令所使用(方框216)。如果该数据被另一个指令所使用(方框218),则控制返回到方框212,取得(方框212)该使用指令(方框218),并进行分析(方框214),如上所述。控制继续循环通过方框204-222,直到路径上的每个加载指令都已被分析(方框220)。分析完成后,LB_Loads_In_Path例程结束,控制返回到方框350(图12)。
执行Find_LB_Loads_In_Path例程后(方框348),最终加载标识器46确定集合LB_Loads_Path是否具有任何元素(方框350)。如果集合LB_Loads_Path中没有元素(方框350),则控制前进到方框360。否则,控制前进到方框352。
例如,假设集合LB_Loads_Path非空(方框350),则最终加载标识器46从集合LB_Loads_Path取得一个最后加载(方框352)。它然后将该加载位于其上的路径被执行的频度添加到该加载的Bypass_Freq(方框354)。最终加载标识器46然后确定集合LB_Loads_Path中是否有任何其他加载指令(方框356)。如果是,则控制再次循环通过方框352-356。控制继续循环通过方框352-356,直到LB_Loads_Path中的所有加载都已被分析(方框356)。
最终加载标识器46然后将集合LB_Candidates设置为LB_Loads_Path(方框358),并确定区域中是否有任何其他路径要分析(方框360)。如果存在其他路径要分析(方框360),则控制返回到方框346,如上所述地分析下一个路径。控制继续循环通过方框346-360,直到区域中的每个路径都以被分析以发现候选加载(方框360)。
如此分析了所有的路径后(方框360),最终加载标识器46检查确定集合LB_Candidates是否包括任何元素(方框362)。如果它不包括任何元素(方框362),则区域中没有候选加载,Find_LB_Loads_In_Region例程终结,控制返回到图3的方框380。
为了说明的目的,假设集合LB_Candidates非空(方框362),则最终加载标识器46进入循环(方框364-372),它分析集合LB_Candidates中的每个加载,看它是否具有大于或等于预定阈值的旁路概率。具体地说,最终加载标识器46从集合LB_Candidates中取得第一加载(方框364)。它然后通过将该加载的Bypass_Freq除以该加载被执行的频度Load_Freq,计算该加载的延迟旁路区域概率(LBP)(方框366)。最终加载标识器46然后将计算出的LBP与概率阈值(LB_PROB)比较(方框368)。LB_Prob是在0和1之间的值(例如0.1)。
如果加载的LBP超过阈值LB_Prob(方框368),则最终加载标识器46通过将加载添加到集合LB_Loads_Region,将其标识为延迟旁路加载(方框370)。如果加载的LBP未超过阈值LB_Prob(方框368),则控制前进到方框372。
如果集合LB_Candidates中有其他加载要分析(方框372),则控制再次循环通过方框364-372。否则,Find_LB_Loads_In_Region例程终结,控制返回到图3的方框380。最终加载标识器46然后通过将集合LB_Loads_Region中的延迟旁路加载置入集合Final_Bypass_Loads中,将这些加载标识为最终旁路加载(方框380)。
如果已分析了软件中的每个区域(方框381),则控制前进到方框382。否则,控制返回到方框236,如上所述地分析下一个区域。控制继续循环通过方框236-381,直到已调度整个的软件程序。
假设已调度并分析了整个软件程序以发现延迟旁路加载(方框381),则目标码生成器48然后将已调度的软件程序转换为目标码(方框382)。然后执行目标码。对程序进行性能分析,以标识频繁在μ缓存中产生缺失并且未被重用的缺失旁路加载。缓存性能分析为每个加载收集加载在μ缓存中产生缺失并且所加载的缓存线未被重用的次数。它还收集该加载被执行的总次数。采用Johnson et al.,“运行时间缓存旁路(Run-time cachebypassing)”,IEEE Transactions On Computers,Volume 48,Issue 12,Dec.1999中建议的算法来标识在μ缓存中产生缺失并且未被重用的缺失旁路加载。Final_Bypass_Loads中的加载集合未被进行分析,并且在缓存性能分析期间不访问μ缓存。
加载可能只在它的执行的一部分中在μ缓存中产生缺失并且未被重用。缺失且未重用概率(MNRP)是加载在μ缓存中产生缺失且未被重用的次数对该加载被执行的总次数的比率。加载当且仅当MNRP(加载)>MB_PROB时才是缺失旁路加载,其中MB_PROB是用于缺失旁路加载的阈值。这些缺失旁路加载被指定了T2的延迟,并标记有μ缓存旁路标志。
注意,缺失旁路加载集合可能与步长加载集合重叠。当加载指令如上所述地扫过μ缓存时,它将被标识为步长加载。步长加载比缺失旁路加载易于被标识出来。
利用所编译出的性能分析数据,通过调用Find_MB_Loads例程(方框388)来启动第二趟编译(方框386)。如图14所示,Find_MB_Loads例程在缺失旁路加载标识器52确定正被分析的软件程序中是否有任何已被进行性能分析的加载指令(方框390)时开始。如果不存在这样的指令(方框390),则Find_MB_Loads例程终结,控制返回到图3的方框408。
为了说明的目的,假设软件中存在进行了性能分析的加载指令(方框390),则缺失旁路加载标识器52将集合MB_Loads清空为空集(方框392)。它然后取得软件程序中的第一个进行性能分析的加载指令(方框394)。缺失旁路加载标识器52然后将该加载指令在μ缓存中产生缺失,并且所加载的数据未被重用的次数除以该加载指令被执行的频度(Load_Freq),以确定缺失且未重用概率(MNRP)(方框396)。
缺失旁路加载标识器52然后比较所计算出的MNRP值和阈值(MB_PROB)(方框398)。如果正被分析的加载的MNRP超过阈值(方框398),则通过将加载指令添加到集合MB_Loads中,将其标识为缺失旁路(MB)指令(方框400)。如果加载的MNRP未超过阈值MB_Prob(方框398),则跳过方框400,控制前进到方框402。
在方框402,缺失旁路加载标识器52确定是否还有其他已进行了性能分析的加载指令要分析。如果是,则控制返回到方框394。否则,Find_MB_Loads例程终结。控制继续循环通过方框394-402,直到所有的加载都已被分析(方框402)。
回到图3,Find_MB_Loads例程终结后,缺失旁路(MB)被添加到集合Final_Bypass_Loads(方框408)。目标码生成器48然后在Final_Bypass_Loads中标识出的加载被标记为旁路μ缓存的情况下,生成软件的目标码。图3的处理然后终结。
候选加载和延迟旁路加载的集合对于应用程序和所使用的编译器优化来说是固有的,独立于缓存配置。另一方面,步长加载和缺失旁路加载是缓存配置的函数。μ缓存越小,就有更多的加载具有大于μ缓存大小的步长化工作集,并且可能有更多的步长加载被标识为旁路μ缓存。类似地,μ缓存越小,就有更多的加载会在μ缓存中产生缺失,并且可能会标识出更多的缺失旁路加载。
注意,编译器只可将加载或者标识为旁路μ缓存,或者标识为不旁路μ缓存,而不会同时是二者。加载指令可能只沿着一些执行路径被旁路,而沿着其他路径时不能被旁路。换言之,候选(松弛因子适格)加载和/或延迟旁路加载的旁路概率可小于100%。试验结果表明加载通常具有或大于90%,或小于10%的旁路概率。这一双峰(bimodal)属性使得选择具有大于50%的旁路概率的加载的简单编译器启发操作可很好地工作。
类似地,缓存性能分析可确定加载指令可在一部分时间上被旁路。试验结果表明缺失旁路加载的旁路概率通常很低。只有小部分的加载具有高于50%的旁路概率。对于其他加载,静态地将它们标记为旁路μ缓存可能是低效的,可能需要更为动态的方案。
一种有趣的现象是,即使μ缓存旁路减少了μ缓存缺失,但是被旁路的加载不会增加L2或L3缓存中的缓存缺失。这一点很重要,因为旁路μ缓存的加载将总会访问L2缓存。为了使μ缓存旁路可改进性能,被旁路的加载不应增加L2或L3缓存缺失。对这一独立性属性的部分解释在于缓存配置的包含性。
试验表明编译器管理的μ缓存旁路可显著减少μ缓存缺失次数以及缺失率。平均上大约40%、30%、24%和22%的加载引用被分别标识为旁路256B、1K、4K和8K的缓存。这将μ缓存缺失次数降低了64%、53%、45%和43%,将μ缓存缺失率降低了39%、32%、28%和26%,并将加载一使用停滞周期的总数降低了13%、9%、6%和5%。同时,程序的调度长度在初步实现中只增加了3%,而L2和L3缓存缺失几乎保持不变。
虽然这里已描述了根据本发明的教导而建立的特定装置,但是本专利的覆盖范围并不局限于此。相反,本专利覆盖本发明的教导在完全相同或等同原则下落在所附权利要求的范围内的所有实施方案。
Claims (55)
1.一种编译软件程序以减少第一缓存的缺失的方法,包括:
标识出具有大于或等于预定阈值的预期延迟的加载指令;
请求将该加载指令调度为具有预定延迟;
调度所述软件程序;
将所述已调度的软件程序中与所述加载指令相关联的实际延迟与所述预定延迟进行比较;以及
如果所述实际延迟大于或等于所述预定延迟,则将所述加载指令标记为旁路所述第一缓存。
2.如权利要求1所述的方法,其中请求将所述加载指令调度为具有所述预定延迟的步骤包括:如果所述加载指令的旁路概率大于或等于概率阈值,则请求将所述加载指令调度为具有所述预定延迟。
3.如权利要求1所述的方法,其中将所述加载指令标记为旁路所述第一缓存的步骤包括:如果所述加载指令的旁路概率大于或等于概率阈值,则将所述加载指令标记为旁路所述第一缓存。
4.如权利要求1所述的方法,其中标识出具有大于或等于预定阈值的预期延迟的加载指令的步骤包括:确定所述加载指令的松弛因子,以及比较所确定的松弛因子和所述预定阈值。
5.如权利要求1所述的方法,其中所述预定延迟是大于和等于与从第二缓存加载数据相关联的延迟时间中的至少一个。
6.如权利要求1所述的方法,其中比较所述实际延迟和所述预定延迟的步骤包括:确定所述加载指令和对所述加载指令所加载的数据进行操作的使用指令之间的时间差,以及比较所确定的时间差和所述预定延迟。
7.如权利要求1所述的方法,其中将所述加载指令标记为旁路所述第一缓存的步骤包括:在所述加载指令中设置标志。
8.如权利要求1所述的方法,还包括:
标识位于循环中的步长加载指令;
确定所述步长加载指令在所述循环被执行时是否使用多于预定量的所述第一缓存;以及
如果所述步长加载指令使用多于所述第一缓存的所述预定量,则将所述步长加载指令标记为旁路所述第一缓存。
9.如权利要求8所述的方法,其中确定所述步长加载指令在所述循环被执行时是否使用多于所述第一缓存的所述预定量的步骤包括:
确定通过在其中执行所述步长加载指令的循环的趟数;
将所述趟数与和所述步长加载指令相关联的步长相乘,以得出步长大小值;
将所述步长大小值除以代表所述第一缓存的大小的值,以得出存储器使用率百分比;以及
比较所述存储器使用率百分比和所述第一缓存的所述预定量。
10.如权利要求1所述的方法,还包括:
在将所述加载指令标记为旁路所述第一缓存后,从所述软件生成目标码;
执行所述目标码以得出性能分析数据;
标识出下述第二加载指令,其在所述第一缓存中产生缺失,并且其中所述第二加载指令所加载的缓存线未被另一个加载指令所使用;
将所述第二加载指令在所述第一缓存中产生缺失,并且所述第二加载指令所加载的缓存线未被另一个加载指令所使用的次数除以所述第二加载指令被执行的次数,以得出一个比值;以及
如果所述比值是大于和等于预定比值阈值中的一个,则将所述第二加载指令标识为旁路所述第一缓存。
11.如权利要求10所述的方法,还包括:将所述第二加载指令标识为旁路所述第一缓存后,从所述软件生成目标码。
12.一种编译软件程序以减少第一缓存的缺失的方法,包括:
在调度所述软件前,标识出第一组可能旁路所述第一缓存的加载指令;
尝试将所述软件程序调度成使得所述第一组加载指令至少具有预定延迟;
在所调度的软件程序中标识出第二组至少具有所述预定延迟的加载指令;以及
将所述第二组加载指令标记为旁路所述第一缓存。
13.如权利要求12所述的方法,还包括:
将所调度的软件程序转换成目标码;
通过执行所述目标码,收集缓存性能分析数据;以及
使用所述缓存性能分析数据,尝试标识出额外的加载指令以标记为旁路所述第一缓存。
14.如权利要求12所述的方法,还包括:
标识步长加载指令;
如果所述步长加载指令满足预定条件,则将所述步长加载指令标识为旁路所述第一缓存。
15.如权利要求14所述的方法,其中所述预定条件包括:所述步长加载指令所加载的数据需要多于所述第一缓存的预定百分比。
16.如权利要求15所述的方法,其中确定所述步长加载指令是否满足所述预定条件的步骤包括:
确定在其中执行所述步长加载指令的循环的趟数;
将所述趟数与和所述步长加载指令相关联的步长相乘,以得出步长大小值;
将所述步长大小值除以代表所述第一缓存的大小的值,以得出存储器使用率百分比;以及
比较所述存储器使用率百分比和所述第一缓存的所述预定百分比。
17.如权利要求12所述的方法,其中标识出所述第一组可能旁路所述第一缓存的加载指令的步骤包括:标识出至少具有预期延迟的加载指令。
18.如权利要求17所述的方法,其中标识出所述第一组可能旁路所述第一缓存的加载指令的步骤还包括:标识出具有大于或等于频度阈值的执行频度的加载指令。
19.如权利要求17所述的方法,其中标识出至少具有预期延迟的加载指令的步骤包括:确定第一加载指令的松弛因子,以及比较所确定的松弛因子和预定阈值。
20.如权利要求12所述的方法,其中将所述第二组加载指令标记为旁路所述第一缓存的步骤包括:如果所述第二组加载指令的旁路概率大于或等于概率阈值,则将所述加载指令标记为旁路所述第一缓存。
21.如权利要求12所述的方法,其中所述预定延迟是大于和等于与从第二缓存加载数据相关联的延迟时间中的至少一个。
22.如权利要求12所述的方法,其中在所调度的软件程序中标识出第二组至少具有所述预定延迟的加载指令包括:确定第一加载指令和对所述第一加载指令所加载的数据进行操作的使用指令之间的时间差,以及比较所确定的时间差和所述预定延迟。
23.如权利要求12所述的方法,其中将所述第二组加载指令标记为旁路所述第一缓存的步骤包括:在所述第二组中每个加载指令中设置标志。
24.如权利要求12所述的方法,还包括:
在将所述第二组加载指令标记为旁路所述第一缓存后,从所述调度软件程序生成目标码;
执行所述目标码,以得出假定在所述第二组指令旁路所述第一缓存的情况下的性能分析数据;
标识出下述第一加载指令,其在所述第一缓存中产生缺失,并且其中所述第一加载指令所加载的缓存线未被重用;
将所述第一加载指令在所述第一缓存中产生缺失,并且所述第一加载指令所加载的缓存线未被另一个加载指令所使用的次数除以所述第一加载指令被执行的次数,以得出一个比值;以及
如果所述比值是大于和等于预定比值阈值中的一个,则将所述第一加载指令标识为旁路所述第一缓存。
25.如权利要求24所述的方法,还包括:将所述第一加载指令标识为旁路所述第一缓存后,从所述软件生成目标码。
26.一种用于减少执行中的软件程序对第一缓存的缺失的装置,包括:
候选加载标识器,用于标识出可能旁路所述第一缓存的候选加载指令;
调度器,用于调度所述软件程序,其中所述调度器尝试来将每个所述候选加载指令调度为具有大于或等于预定阈值的延迟;
最终加载标识器,用于将加载指令标记为旁路所述第一缓存;以及
目标码生成器,用于从所调度的软件程序得出目标码,所述目标码包含由所述最终加载标识器标记为旁路所述第一缓存的加载指令。
27.如权利要求26所述的装置,其中所述候选加载标识器标识出具有大于或等于第一预定阈值的预期延迟的加载指令。
28.如权利要求27所述的装置,其中所述候选加载标识器通过确定第一候选加载指令的松弛因子来确定所述第一加载指令的预期延迟。
29.如权利要求27所述的装置,其中所述第一预定阈值是大于和等于与从第二缓存加载数据相关联的延迟时间中的至少一个。
30.如权利要求26所述的装置,其中所述候选加载标识器将具有(1)大于或等于第一预定阈值的预期延迟,以及(2)大于或等于第二预定阈值的旁路概率的加载指令标识为候选加载指令。
31.如权利要求30所述的装置,其中所述候选加载标识器通过确定第一候选加载指令的松弛因子来确定所述第一加载指令的预期延迟。
32.如权利要求30所述的装置,其中所述第一预定阈值是大于和等于与从第二缓存加载数据相关联的延迟时间中的至少一个。
33.如权利要求26所述的装置,其中所述最终加载标识器将具有(1)大于或等于第一预定阈值的实际延迟,以及(2)大于或等于第二预定阈值的旁路概率的加载指令标识为最终加载指令。
34.如权利要求33所述的装置,其中所述最终加载标识器通过确定第一加载指令和对所述第一加载指令所加载的数据进行操作的使用指令之间的时间差,确定所述第一加载指令的实际延迟。
35.如权利要求26所述的装置,其中所述最终加载标识器通过在每个要被标记的加载指令中设置标志,将所述加载指令标记为旁路所述第一缓存。
36.如权利要求26所述的装置,还包括:步长加载标识器,用于如果(1)步长加载指令位于循环中;并且(2)所述步长加载指令在所述循环被执行时使用多于所述第一缓存的预定量,则将所述步长加载指令标记为旁路所述第一缓存。
37.如权利要求36所述的装置,其中所述步长加载标识器通过下述操作来确定所述步长加载指令在所述循环被执行时是否使用多于所述第一缓存的所述预定量:(1)确定通过在其中执行所述步长加载指令的循环的趟数;(2)将所述趟数与和所述步长加载指令相关联的步长相乘,以得出步长大小值;(3)将所述步长大小值除以代表所述第一缓存的大小的值,以得出存储器使用率百分比;以及(4)比较所述存储器使用率百分比和所述第一缓存的所述预定量。
38.如权利要求26所述的装置,还包括:缺失旁路加载标识器,用于标识出下述缺失旁路加载指令,该指令在所述第一缓存中产生缺失,并且其中所述缺失旁路加载指令所加载的缓存线未被重用。
39.如权利要求38所述的装置,其中所述缺失旁路加载标识器(1)将(a)所述缺失旁路加载指令在所述第一缓存中产生缺失,并且所述缺失旁路加载指令所加载的数据未被重用的次数,除以(b)所述缺失旁路加载指令被执行的次数,从而得到一个比值,并且(2)如果该比值大于或等于预定比率阈值,则将所述缺失旁路加载指令标记为旁路所述第一缓存。
40.如权利要求39所述的装置,其中所述目标码生成器生成包含所述被标记的缺失旁路加载指令的目标码。
41.一种可感知介质,存储包括下述内容的机器可读指令:
第一软件,用于标识出可能旁路第一缓存的候选加载指令;
第二软件,用于调度软件程序,其中所述第二软件尝试来将每个所述候选加载指令调度为具有大于或等于预定阈值的延迟;
第三软件,用于将加载指令标记为旁路所述第一缓存;以及
第四软件,用于从所调度的软件程序得出目标码,所述目标码包含由所述第三软件标记为旁路所述第一缓存的加载指令。
42.如权利要求41所述的可感知介质,其中所述第一软件标识出具有大于或等于第一预定阈值的预期延迟的加载指令。
43.如权利要求42所述的可感知介质,其中所述第一软件通过确定第一候选加载指令的松弛因子来确定所述第一加载指令的预期延迟。
44.如权利要求42所述的可感知介质,其中所述第一预定阈值是大于和等于与从第二缓存加载数据相关联的延迟时间中的至少一个。
45.如权利要求41所述的可感知介质,其中所述第一软件将具有(1)大于或等于第一预定阈值的预期延迟,以及(2)大于或等于第二预定阈值的旁路概率的加载指令标识为候选加载指令。
46.如权利要求45所述的可感知介质,其中所述第一软件通过确定第一候选加载指令的松弛因子来确定所述第一加载指令的预期延迟。
47.如权利要求45所述的可感知介质,其中所述第一预定阈值是大于和等于与从第二缓存加载数据相关联的延迟时间中的至少一个。
48.如权利要求41所述的可感知介质,其中所述第三软件将具有(1)大于或等于第一预定阈值的实际延迟,以及(2)大于或等于第二预定阈值的旁路概率的加载指令标识为最终加载指令。
49.如权利要求48所述的可感知介质,其中所述第三软件通过确定第一加载指令和对所述第一加载指令所加载的数据进行操作的使用指令之间的时间差,确定所述第一加载指令的实际延迟。
50.如权利要求41所述的可感知介质,其中所述第三软件通过在每个所述加载指令中设置标志,将所述加载指令标记为旁路所述第一缓存。
51.如权利要求41所述的可感知介质,还包括:第五软件,用于如果(1)步长加载指令位于循环中;并且(2)所述步长加载指令在所述循环被执行时使用多于所述第一缓存的预定量,则将所述步长加载指令标记为旁路所述第一缓存。
52.如权利要求51所述的可感知介质,其中所述第五软件通过下述操作来确定所述步长加载指令在所述循环被执行时是否使用多于所述第一缓存的所述预定量:(1)确定通过在其中执行所述步长加载指令的循环的趟数;(2)将所述趟数与和所述步长加载指令相关联的步长相乘,以得出步长大小值;(3)将所述步长大小值除以代表所述第一缓存的大小的值,以得出存储器使用率百分比;以及(4)比较所述存储器使用率百分比和所述第一缓存的所述预定量。
53.如权利要求41所述的可感知介质,还包括:第五软件,用于标识出下述缺失旁路加载指令,该指令在所述第一缓存中产生缺失,并且其中所述缺失旁路加载指令所加载的缓存线未被重用。
54.如权利要求53所述的可感知介质,其中所述第五软件(1)将(a)所述缺失旁路加载指令在所述第一缓存中产生缺失,并且所述缺失旁路加载指令所加载的缓存线未被重用的次数,除以(b)所述缺失旁路加载指令被执行的次数,从而得到一个比值,并且(2)如果该比值大于或等于预定比率阈值,则将所述缺失旁路加载指令标记为旁路所述第一缓存。
55.如权利要求54所述的可感知介质,其中所述第四软件生成包含所述被标记的缺失旁路加载指令的目标码。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US10/278,682 | 2002-10-22 | ||
US10/278,682 US7467377B2 (en) | 2002-10-22 | 2002-10-22 | Methods and apparatus for compiler managed first cache bypassing |
PCT/US2003/028783 WO2004038583A2 (en) | 2002-10-22 | 2003-09-12 | Methods and apparatus to manage cache bypassing |
Publications (2)
Publication Number | Publication Date |
---|---|
CN1717663A true CN1717663A (zh) | 2006-01-04 |
CN1717663B CN1717663B (zh) | 2010-05-12 |
Family
ID=32093426
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN038256983A Expired - Fee Related CN1717663B (zh) | 2002-10-22 | 2003-09-12 | 管理缓存旁路的方法和装置 |
Country Status (7)
Country | Link |
---|---|
US (2) | US7467377B2 (zh) |
CN (1) | CN1717663B (zh) |
AU (1) | AU2003288904A1 (zh) |
DE (1) | DE10393481B4 (zh) |
GB (1) | GB2410582B (zh) |
HK (1) | HK1074686A1 (zh) |
WO (1) | WO2004038583A2 (zh) |
Families Citing this family (47)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6970985B2 (en) | 2002-07-09 | 2005-11-29 | Bluerisc Inc. | Statically speculative memory accessing |
US7191291B2 (en) * | 2003-01-16 | 2007-03-13 | Ip-First, Llc | Microprocessor with variable latency stack cache |
US7136990B2 (en) * | 2003-01-16 | 2006-11-14 | Ip-First, Llc. | Fast POP operation from RAM cache using cache row value stack |
US7139876B2 (en) | 2003-01-16 | 2006-11-21 | Ip-First, Llc | Microprocessor and apparatus for performing fast speculative pop operation from a stack memory cache |
US7139877B2 (en) | 2003-01-16 | 2006-11-21 | Ip-First, Llc | Microprocessor and apparatus for performing speculative load operation from a stack memory cache |
US20050114850A1 (en) | 2003-10-29 | 2005-05-26 | Saurabh Chheda | Energy-focused re-compilation of executables and hardware mechanisms based on compiler-architecture interaction and compiler-inserted control |
US7996671B2 (en) | 2003-11-17 | 2011-08-09 | Bluerisc Inc. | Security of program executables and microprocessors based on compiler-architecture interaction |
US8607209B2 (en) | 2004-02-04 | 2013-12-10 | Bluerisc Inc. | Energy-focused compiler-assisted branch prediction |
US7302528B2 (en) * | 2004-11-19 | 2007-11-27 | Intel Corporation | Caching bypass |
US7805708B2 (en) * | 2005-05-13 | 2010-09-28 | Texas Instruments Incorporated | Automatic tool to eliminate conflict cache misses |
US20070130114A1 (en) * | 2005-06-20 | 2007-06-07 | Xiao-Feng Li | Methods and apparatus to optimize processing throughput of data structures in programs |
WO2007020577A1 (en) * | 2005-08-16 | 2007-02-22 | Nxp B.V. | A method and system for accessing memory using an auxiliary memory |
US8612957B2 (en) * | 2006-01-26 | 2013-12-17 | Intel Corporation | Scheduling multithreaded programming instructions based on dependency graph |
US7631149B2 (en) * | 2006-07-24 | 2009-12-08 | Kabushiki Kaisha Toshiba | Systems and methods for providing fixed-latency data access in a memory system having multi-level caches |
US8843906B1 (en) * | 2006-10-16 | 2014-09-23 | The Mathworks, Inc. | Inferring data types from compiler call site |
US8683139B2 (en) | 2006-10-31 | 2014-03-25 | Hewlett-Packard Development Company, L.P. | Cache and method for cache bypass functionality |
US20080126766A1 (en) | 2006-11-03 | 2008-05-29 | Saurabh Chheda | Securing microprocessors against information leakage and physical tampering |
US20080140934A1 (en) * | 2006-12-11 | 2008-06-12 | Luick David A | Store-Through L2 Cache Mode |
US8037466B2 (en) | 2006-12-29 | 2011-10-11 | Intel Corporation | Method and apparatus for merging critical sections |
KR101300657B1 (ko) * | 2007-07-06 | 2013-08-27 | 삼성전자주식회사 | 비휘발성 메모리 및 버퍼 메모리를 포함하는 메모리 시스템및 그것의 데이터 읽기 방법 |
US7908375B2 (en) * | 2007-07-11 | 2011-03-15 | Microsoft Corporation | Transparently externalizing plug-in computation to cluster |
US20090055628A1 (en) * | 2007-08-21 | 2009-02-26 | International Business Machine Corporation | Methods and computer program products for reducing load-hit-store delays by assigning memory fetch units to candidate variables |
US8789031B2 (en) * | 2007-09-18 | 2014-07-22 | Intel Corporation | Software constructed strands for execution on a multi-core architecture |
US9298636B1 (en) * | 2011-09-29 | 2016-03-29 | Emc Corporation | Managing data storage |
US8972645B2 (en) * | 2012-09-19 | 2015-03-03 | Hewlett-Packard Development Company, L.P. | Request sent to storage device based on moving average |
US9223714B2 (en) | 2013-03-15 | 2015-12-29 | Intel Corporation | Instruction boundary prediction for variable length instruction set |
US9342284B2 (en) * | 2013-09-27 | 2016-05-17 | Intel Corporation | Optimization of instructions to reduce memory access violations |
WO2015094389A1 (en) | 2013-12-16 | 2015-06-25 | Empire Technology Development, Llc | Sequential access of cache data |
US9785568B2 (en) | 2014-05-19 | 2017-10-10 | Empire Technology Development Llc | Cache lookup bypass in multi-level cache systems |
US9600442B2 (en) | 2014-07-18 | 2017-03-21 | Intel Corporation | No-locality hint vector memory access processors, methods, systems, and instructions |
US20170139716A1 (en) * | 2015-11-18 | 2017-05-18 | Arm Limited | Handling stalling event for multiple thread pipeline, and triggering action based on information access delay |
US10389837B2 (en) * | 2016-06-17 | 2019-08-20 | International Business Machines Corporation | Multi-tier dynamic data caching |
WO2019089816A2 (en) | 2017-10-31 | 2019-05-09 | Micron Technology, Inc. | System having a hybrid threading processor, a hybrid threading fabric having configurable computing elements, and a hybrid interconnection network |
US11513838B2 (en) | 2018-05-07 | 2022-11-29 | Micron Technology, Inc. | Thread state monitoring in a system having a multi-threaded, self-scheduling processor |
US11126587B2 (en) | 2018-05-07 | 2021-09-21 | Micron Technology, Inc. | Event messaging in a system having a self-scheduling processor and a hybrid threading fabric |
US11119972B2 (en) | 2018-05-07 | 2021-09-14 | Micron Technology, Inc. | Multi-threaded, self-scheduling processor |
US11132233B2 (en) | 2018-05-07 | 2021-09-28 | Micron Technology, Inc. | Thread priority management in a multi-threaded, self-scheduling processor |
US11074078B2 (en) | 2018-05-07 | 2021-07-27 | Micron Technology, Inc. | Adjustment of load access size by a multi-threaded, self-scheduling processor to manage network congestion |
US11119782B2 (en) | 2018-05-07 | 2021-09-14 | Micron Technology, Inc. | Thread commencement using a work descriptor packet in a self-scheduling processor |
US11157286B2 (en) | 2018-05-07 | 2021-10-26 | Micron Technology, Inc. | Non-cached loads and stores in a system having a multi-threaded, self-scheduling processor |
US11513840B2 (en) | 2018-05-07 | 2022-11-29 | Micron Technology, Inc. | Thread creation on local or remote compute elements by a multi-threaded, self-scheduling processor |
US11513839B2 (en) | 2018-05-07 | 2022-11-29 | Micron Technology, Inc. | Memory request size management in a multi-threaded, self-scheduling processor |
US11513837B2 (en) | 2018-05-07 | 2022-11-29 | Micron Technology, Inc. | Thread commencement and completion using work descriptor packets in a system having a self-scheduling processor and a hybrid threading fabric |
US11068305B2 (en) | 2018-05-07 | 2021-07-20 | Micron Technology, Inc. | System call management in a user-mode, multi-threaded, self-scheduling processor |
US11113207B2 (en) * | 2018-12-26 | 2021-09-07 | Samsung Electronics Co., Ltd. | Bypass predictor for an exclusive last-level cache |
US11609858B2 (en) * | 2018-12-26 | 2023-03-21 | Samsung Electronics Co., Ltd. | Bypass predictor for an exclusive last-level cache |
US11126437B2 (en) * | 2019-12-06 | 2021-09-21 | Microsoft Technology Licensing, Llc | Load instruction with final read indicator field to invalidate a buffer or cache entry storing the memory address holding load data |
Family Cites Families (36)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5625793A (en) * | 1991-04-15 | 1997-04-29 | International Business Machines Corporation | Automatic cache bypass for instructions exhibiting poor cache hit ratio |
US5357618A (en) * | 1991-04-15 | 1994-10-18 | International Business Machines Corporation | Cache prefetch and bypass using stride registers |
GB2273181A (en) * | 1992-12-02 | 1994-06-08 | Ibm | Cache/non-cache access control. |
US5499354A (en) * | 1993-05-19 | 1996-03-12 | International Business Machines Corporation | Method and means for dynamic cache management by variable space and time binding and rebinding of cache extents to DASD cylinders |
EP0675436B1 (en) * | 1994-03-31 | 1999-10-27 | STMicroelectronics, Inc. | Recoverable set associative cache |
US6226722B1 (en) * | 1994-05-19 | 2001-05-01 | International Business Machines Corporation | Integrated level two cache and controller with multiple ports, L1 bypass and concurrent accessing |
DE69615279T2 (de) * | 1995-06-06 | 2002-06-27 | Hewlett Packard Co | Cache-Speicheranordnung mit gleichzeitigem Etikettenvergleich |
US5751946A (en) * | 1996-01-18 | 1998-05-12 | International Business Machines Corporation | Method and system for detecting bypass error conditions in a load/store unit of a superscalar processor |
US6269426B1 (en) | 1997-06-24 | 2001-07-31 | Sun Microsystems, Inc. | Method for operating a non-blocking hierarchical cache throttle |
US6052775A (en) | 1997-06-25 | 2000-04-18 | Sun Microsystems, Inc. | Method for non-intrusive cache fills and handling of load misses |
US6230317B1 (en) | 1997-07-11 | 2001-05-08 | Intel Corporation | Method and apparatus for software pipelining of nested loops |
US6014737A (en) * | 1997-11-19 | 2000-01-11 | Sony Corporation Of Japan | Method and system for allowing a processor to perform read bypassing while automatically maintaining input/output data integrity |
US6202204B1 (en) | 1998-03-11 | 2001-03-13 | Intel Corporation | Comprehensive redundant load elimination for architectures supporting control and data speculation |
US6332214B1 (en) | 1998-05-08 | 2001-12-18 | Intel Corporation | Accurate invalidation profiling for cost effective data speculation |
US6134710A (en) * | 1998-06-26 | 2000-10-17 | International Business Machines Corp. | Adaptive method and system to minimize the effect of long cache misses |
US6516462B1 (en) * | 1999-02-17 | 2003-02-04 | Elbrus International | Cache miss saving for speculation load operation |
US6571385B1 (en) | 1999-03-22 | 2003-05-27 | Intel Corporation | Early exit transformations for software pipelining |
US6961930B1 (en) * | 1999-09-22 | 2005-11-01 | Hewlett-Packard Development Company, L.P. | Efficient, transparent and flexible latency sampling |
US6668372B1 (en) | 1999-10-13 | 2003-12-23 | Intel Corporation | Software profiling method and apparatus |
US6625725B1 (en) | 1999-12-22 | 2003-09-23 | Intel Corporation | Speculative reuse of code regions |
US6446145B1 (en) * | 2000-01-06 | 2002-09-03 | International Business Machines Corporation | Computer memory compression abort and bypass mechanism when cache write back buffer is full |
US6848100B1 (en) | 2000-03-31 | 2005-01-25 | Intel Corporation | Hierarchical software path profiling |
US6698015B1 (en) * | 2000-06-13 | 2004-02-24 | Cisco Technology, Inc. | Apparatus and method for improving performance of critical code execution |
US6629314B1 (en) | 2000-06-29 | 2003-09-30 | Intel Corporation | Management of reuse invalidation buffer for computation reuse |
US6836841B1 (en) | 2000-06-29 | 2004-12-28 | Intel Corporation | Predicting output of a reuse region using prior execution results associated with the reuse region |
US7383543B2 (en) | 2000-06-29 | 2008-06-03 | Intel Corporation | Management of reuse invalidation buffer for computation reuse |
US6564299B1 (en) * | 2001-07-30 | 2003-05-13 | Lsi Logic Corporation | Method and apparatus for defining cacheable address ranges |
US6959435B2 (en) | 2001-09-28 | 2005-10-25 | Intel Corporation | Compiler-directed speculative approach to resolve performance-degrading long latency events in an application |
US7039909B2 (en) | 2001-09-29 | 2006-05-02 | Intel Corporation | Method and apparatus for performing compiler transformation of software code using fastforward regions and value specialization |
US6964043B2 (en) | 2001-10-30 | 2005-11-08 | Intel Corporation | Method, apparatus, and system to optimize frequently executed code and to use compiler transformation and hardware support to handle infrequently executed code |
US20030126591A1 (en) | 2001-12-21 | 2003-07-03 | Youfeng Wu | Stride-profile guided prefetching for irregular code |
US20030145314A1 (en) | 2002-01-31 | 2003-07-31 | Khoa Nguyen | Method of efficient dynamic data cache prefetch insertion |
US20030204840A1 (en) | 2002-04-30 | 2003-10-30 | Youfeng Wu | Apparatus and method for one-pass profiling to concurrently generate a frequency profile and a stride profile to enable data prefetching in irregular programs |
US20050149915A1 (en) | 2003-12-29 | 2005-07-07 | Intel Corporation | Methods and apparatus for optimizing a program undergoing dynamic binary translation using profile information |
US7120749B2 (en) | 2004-03-18 | 2006-10-10 | Intel Corporation | Cache mechanism |
US7428731B2 (en) | 2004-03-31 | 2008-09-23 | Intel Corporation | Continuous trip count profiling for loop optimizations in two-phase dynamic binary translators |
-
2002
- 2002-10-22 US US10/278,682 patent/US7467377B2/en not_active Expired - Fee Related
-
2003
- 2003-09-12 AU AU2003288904A patent/AU2003288904A1/en not_active Abandoned
- 2003-09-12 WO PCT/US2003/028783 patent/WO2004038583A2/en not_active Application Discontinuation
- 2003-09-12 CN CN038256983A patent/CN1717663B/zh not_active Expired - Fee Related
- 2003-09-12 GB GB0508442A patent/GB2410582B/en not_active Expired - Fee Related
- 2003-09-12 DE DE10393481T patent/DE10393481B4/de not_active Expired - Fee Related
- 2003-12-17 US US10/739,500 patent/US7448031B2/en not_active Expired - Fee Related
-
2005
- 2005-08-11 HK HK05106929A patent/HK1074686A1/xx not_active IP Right Cessation
Also Published As
Publication number | Publication date |
---|---|
US7448031B2 (en) | 2008-11-04 |
WO2004038583A9 (en) | 2005-06-09 |
HK1074686A1 (en) | 2005-11-18 |
AU2003288904A1 (en) | 2004-05-13 |
DE10393481T5 (de) | 2005-09-01 |
GB2410582A (en) | 2005-08-03 |
GB2410582B (en) | 2006-01-04 |
WO2004038583A2 (en) | 2004-05-06 |
WO2004038583A3 (en) | 2004-11-25 |
DE10393481B4 (de) | 2009-02-12 |
CN1717663B (zh) | 2010-05-12 |
US20040078790A1 (en) | 2004-04-22 |
US7467377B2 (en) | 2008-12-16 |
AU2003288904A8 (en) | 2004-05-13 |
GB0508442D0 (en) | 2005-06-01 |
US20040133886A1 (en) | 2004-07-08 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN1717663A (zh) | 管理缓存旁路的方法和装置 | |
CN1185582C (zh) | 调度无用单元收集的方法 | |
Calder et al. | Cache-conscious data placement | |
CN1304941C (zh) | 用于自主硬件辅助的线程栈跟踪的装置与方法 | |
US6591414B2 (en) | Binary program conversion apparatus, binary program conversion method and program recording medium | |
US10592430B2 (en) | Memory structure comprising scratchpad memory | |
US20060123423A1 (en) | Borrowing threads as a form of load balancing in a multiprocessor data processing system | |
CN1234551A (zh) | 动态优化字节编码程序的方法和装置 | |
CN1853165A (zh) | 用于多线程的编译器创建辅助线程的方法和装置 | |
CN101743534A (zh) | 通过增长和收缩资源分配来进行调度 | |
CN1853166A (zh) | 用于多线程的线程管理的方法和装置 | |
CN1162148A (zh) | 微处理器的功率估算器 | |
CN103559148B (zh) | 面向多任务嵌入式系统的片上便笺式存储器管理方法 | |
CN1236921A (zh) | 用于计算机存储器的世代动态管理的方法和装置 | |
US7765524B2 (en) | Method and system for global constant management | |
US9280350B2 (en) | Methods and apparatus to perform adaptive pre-fetch operations in managed runtime environments | |
CN108595258A (zh) | 一种gpgpu寄存器文件动态扩展方法 | |
CN1849584A (zh) | 混合模式指令的动态最佳匹配编译的方法和设备 | |
CN111414138A (zh) | 一种固态硬盘磨损均衡方法和装置 | |
CN102520915B (zh) | 非统一内存访问系统中线程化串行程序的方法及装置 | |
CN108139929B (zh) | 用于调度多个任务的任务调度装置和方法 | |
CN112256441B (zh) | 神经网络推理的内存分配方法及装置 | |
US8429371B2 (en) | System and method for robust and efficient free chain management | |
CN114860449B (zh) | 数据处理方法、装置、设备和存储介质 | |
CN105260165A (zh) | 基于smt的线程级推测系统中推测线程数目的动态控制方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
C17 | Cessation of patent right | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20100512 Termination date: 20130912 |