CN102109980B - 在托管运行时环境中执行自适应预取操作的方法和装置 - Google Patents
在托管运行时环境中执行自适应预取操作的方法和装置 Download PDFInfo
- Publication number
- CN102109980B CN102109980B CN201010620175.4A CN201010620175A CN102109980B CN 102109980 B CN102109980 B CN 102109980B CN 201010620175 A CN201010620175 A CN 201010620175A CN 102109980 B CN102109980 B CN 102109980B
- Authority
- CN
- China
- Prior art keywords
- size
- threshold
- definition
- prefetch operation
- amount
- 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.)
- Expired - Fee Related
Links
- 238000000034 method Methods 0.000 title claims abstract description 51
- 230000003044 adaptive effect Effects 0.000 title abstract description 11
- 230000006870 function Effects 0.000 claims description 106
- 238000010586 diagram Methods 0.000 description 14
- 230000008569 process Effects 0.000 description 10
- 238000005516 engineering process Methods 0.000 description 8
- 230000004044 response Effects 0.000 description 6
- 238000004891 communication Methods 0.000 description 5
- 238000013459 approach Methods 0.000 description 3
- 230000000712 assembly Effects 0.000 description 3
- 238000000429 assembly Methods 0.000 description 3
- 238000012545 processing Methods 0.000 description 3
- 230000008901 benefit Effects 0.000 description 2
- 239000003990 capacitor Substances 0.000 description 2
- 230000008859 change Effects 0.000 description 2
- 239000002699 waste material Substances 0.000 description 2
- 102100034761 Cilia- and flagella-associated protein 418 Human genes 0.000 description 1
- 101100439214 Homo sapiens CFAP418 gene Proteins 0.000 description 1
- 239000000654 additive Substances 0.000 description 1
- 230000000996 additive effect Effects 0.000 description 1
- 230000002411 adverse Effects 0.000 description 1
- 230000003139 buffering effect Effects 0.000 description 1
- 230000001143 conditioned effect Effects 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 239000012634 fragment Substances 0.000 description 1
- 230000005236 sound signal Effects 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 239000013589 supplement Substances 0.000 description 1
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/3802—Instruction prefetching
-
- 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/0862—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with prefetch
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/50—Control mechanisms for virtual memory, cache or TLB
- G06F2212/502—Control mechanisms for virtual memory, cache or TLB using adaptive policy
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Memory System Of A Hierarchy Structure (AREA)
- Devices For Executing Special Programs (AREA)
- Tone Control, Compression And Expansion, Limiting Amplitude (AREA)
Abstract
本文公开了用于在托管运行时环境中执行自适应预取操作的方法和装置。一种用于预取操作的示例预取单元包括:由处理器执行的第一大小函数,用于确定与预取操作相关联的对象的大小;比较器,用于将与预取操作相关联的对象的大小与多个阈值中的第一阈值作比较;以及读取器,用于在比较器确定对象的大小小于第一阈值时,预取多个大小定义中与该第一阈值相对应的第一大小定义所定义的量的存储器。
Description
发明领域
本发明一般涉及预取操作,尤其涉及用于在托管运行时环境中执行自适应预取操作的方法和装置。
背景
对增加的软件程序便携性的需要已导致对运行时环境的开发和利用的增加。便携性是指在具有不同硬件和操作系统的各种计算机平台上执行给定软件程序的能力。运行时环境可以是运行时系统和/或虚拟机。运行时环境允许软件程序以平台无关方式由目标执行平台(例如,计算机系统的硬件和/或操作系统)执行。具体地,源代码指令不是被静态地直接编译和链接成由目标执行平台执行的本地或机器代码。相反,指令被静态地编译成中间语言(例如,字节代码),而中间语言随后可由运行时环境内的即时(JIT)编译器解释或编译成可由目标执行平台执行的本地或机器代码。
运行时环境连同其他类型的系统有时在分配用于在执行期间使用的存储器时采用预取操作。虽然不同的预取操作在复杂性和/或规模上不同,但预取一般包括在处理器需要一存储位置处所存储的指令或数据之前将该存储位置加载到高速缓存和/或其他类型的快速存取存储器中。例如,预取可结合分支预测方案使用,分支预测方案尝试基于计算的可能结果来预测处理器接下来将需要哪个存储位置。预取用在附加以及替换类型的系统中且结合附加和替换的处理方案或技术使用。
附图简述
图1是其上可实现本文描述的示例方法、装置、系统和/或有形制品的示例软件编译和执行系统的框图。
图2是图1的示例硬件平台的示例实现的框图。
图3是图1的示例虚拟机的示例实现的框图。
图4是图3的示例存储器清除单元的示例实现的框图。
图5是代表可使用机器可读指令执行以实现图3的示例存储器清除单元的示例过程的流程图。
图6是示出图4的示例预取单元的示例实现的框图。
图7是代表可使用机器可读指令执行以实现图4和/或6的示例预取单元的示例过程的流程图。
详细描述
尽管下文公开了除其他组件外包括固件和/或在硬件上执行的软件的示例方法、装置、系统和/或制品,但是应注意,这些方法、装置、系统和/或制品仅仅是说明性的且不应被视为限制。例如,构想了任何或所有这些固件、硬件和/或软件组件可排他性地实施在硬件中、排他性的实施在软件中、排他性的实施在固件中,或实施在硬件、软件和/或固件的任何组合中。因此,虽然下文描述了示例方法、装置、系统和/或制品,但所提供的示例并非是实现这些方法、装置、系统和/或制品的仅有方式。
预取是用计算系统中的意在提高处理指令和/或数据的速度的技术。一般地,预取涉及例如从主存储器读取一个或多个指令和/或数据并将该指令和/或数据写入高速缓存。常规系统预取固定量的存储器(例如,数个指令或地址)。在一些计算系统中,当系统确定或意识到该固定量的预取存储器太小时,系统执行取回附加的固定量的存储器的一个或多个附加预取操作。在一些示例中,在此类次级预取中预取的附加的固定量的存储器显著大于在初级中预取的固定量。这种递增地预取固定量的存储器的方法往往导致高速缓存资源的浪费,因为经常预取了多于必需的存储器。例如,预取的第一固定量的存储器可能只是稍微不足(例如,在需要预取的存储器的量方面)。在这些情形中,在次级中预取的第二固定量的存储器(在许多先前系统中,其大于在初级中预取的存储器的量)可能导致总共预取了所需量的几乎两倍的存储器量。对高速缓存资源的这种过度使用会不利地影响处理器的性能。
为了避免高速缓存资源的这种浪费,本文描述的示例方法、装置、系统和/或制品将与关联于预取操作的对象有关的参数自适应地纳入对要预取的存储器的量的确定。具体而言,本文描述的示例方法、装置、系统和/或制品确定与预取操作相关联的对象的大小,并使用该大小信息来选择结合该特定对象要预取的存储器量。由此,不同于在初始固定量不足时反应性地预取固定增量的附加存储器的常规系统,本文描述的示例方法、装置、系统和/或制品根据例如与预取操作相关联的对象的大小主动地变更要预取的存储器的量。附加地或替换地,本文描述的示例方法、装置、系统和/或制品可将与近期遭遇的对象有关的大小趋势纳入对要预取的存储器的量的确定。
如以下更详细地描述的,本文描述的自适应和/或主动预取方法实现了比常规或先前预取单元产生更准确(例如,关于在合适时间用于与预取操作相关联的对象的合适存储器的量)预取且能更好地处理大对象的预取操作。例如,使用本文描述的自适应和/或主动预取,计算系统的预取单元在遭遇(例如,由处理器在例如分支预测方案中标识为与应预取的指令有关的)大对象时不会过度取存储器。相反,本文描述的自适应和/或主动预取使得预取单元能将与关联于预取操作的对象大小相称的量的存储器加载到高速缓存中。本文描述的示例方法、装置、系统和/或制品的附加和替换优点将从以下描述变得明显。
图1-5示出其上可实现本文描述的自适应预取方法、装置、系统和/或制品的示例系统。具体地,图1-5示出示例托管运行时环境。虽然图1-5提供了其上可实现本文描述的自适应预取的示例系统,本文描述的示例可在一个或多个不同类型的计算系统、平台、环境、处理器等上实现或与之关联。
图1示出示例软件程序编译和执行系统100。该软件程序编译和执行系统100包括编译器120,编译器120将源代码110(例如,Java字节代码或通用中间语言(CIL)代码)编译成中间语言代码130。在一些示例中,编译器120是在计算机系统上运行的软件系统,并且中间语言代码130被存储在计算机系统的存储器中。
软件程序编译和执行系统100包括虚拟机140和硬件平台150。虚拟机140进一步将中间语言代码130编译成本地代码。在所示的示例中,本地代码是具体架构或平台特有的机器代码。虚拟机140可被实现为软件系统。在所示的示例中,虚拟机140在硬件平台150上运行。虚拟机140可以是例如Java虚拟机、small talk(闲谈)运行时系统、或其他运行时系统。替换地,虚拟机140可使用其他技术来实现(例如,实现为固件系统)。
硬件平台150执行由虚拟机140编译的本机代码。硬件平台150例如可由个人计算机、个人数字助理、网络计算机、服务器计算机、笔记本计算机、工作站、主机计算机、超级计算机、和/或具有数据处理能力的任何其他电子系统来实现。中间语言代码130可经由通信链路(例如局域网、因特网、和/或无线通信网络)被递送给硬件平台150。如以下更详细地描述的,示例硬件平台150还包括预取单元430,用于便于本文描述的示例自适应预取操作。
图2是图1的示例硬件平台150的示例实现的框图。示例平台150包括处理数据信号的处理器201。处理器201可以是复杂指令集计算机微处理器、精简指令集计算微处理器、超长指令字微处理器、实现指令集组合的处理器和/或其他处理器设备。在一些示例中,平台150可以用多个处理器进行操作。图2的示例处理器201耦合到CPU总线210,CPU总线210在处理器201与平台150中的其他组件之间传送数据信号。在一些示例中,处理器201可实现线程级并行以增加对处理器执行资源的利用。通过利用同时多线程技术,软件应用的多个线程可同时和/或基本上同时地在处理器201上运行。
平台150包括由动态随机存取存储器设备、静态随机存取存储器设备、只读存储器、和/或其他存储器设备中的一个或多个实现的存储器213。在所示的示例中,存储器213存储由将由处理器201执行的数据信号表示的指令和代码。高速缓存202驻留在处理器201内,其存储在存储器213中所存储的数据信号。高速缓存202通过利用其访问的本地性来加速处理器201的存储器访问。在一些示例中,高速缓存202驻留在处理器201外部。处理器201可使用存储缓冲器(未示出)来保持要写入高速缓存202的数据以备将其存入存储器213。
桥存储器控制器211耦合到CPU总线210和存储器213。桥存储器控制器211在处理器201、存储器213以及平台150中的其他组件之间引导数据信号,并桥接CPU总线210、存储器213以及第一输入输出(IO)总线220之间的数据信号。
第一IO总线220(例如,单条总线或者多条总线的组合)提供平台150中的组件之间的通信链路。具体地,耦合到第一IO总线220的网络控制器221能够将平台150链接到计算机网络(未示出)并支持机器间通信。此外,耦合到第一IO总线220的显示设备控制器222允许将显示设备(未示出)耦合到平台150并充当显示设备与软件编译和执行系统100之间的接口。
第二IO总线230(例如,单条总线或者多条总线的组合)也提供平台150中的组件之间的通信链路。具体地,数据存储设备231耦合到第二IO总线230并且可由硬盘驱动器、软盘驱动器、CD-ROM设备、闪存设备和/或任何类型的海量存储设备来实现。输入接口232耦合到第二IO总线230并且可由例如键盘和/或鼠标控制器和/或任何其它类型的输入接口来实现。输入接口232可以是专用设备或者可驻留在诸如总线控制器或其他控制器之类的另一设备中。输入接口232允许将输入设备耦合到平台150并将数据信号从输入设备传送到平台150。耦合到第二IO总线230的音频控制器233协调对音频信号的记录和播放。总线桥233将第一IO总线220耦合到第二IO总线230并且缓冲和桥接第一IO总线220与第二IO总线230之间的数据信号。
图3是图1的示例虚拟机140的示例实现的框图。虚拟机140包括可用作虚拟机140的主核的示例主引擎310。示例主引擎310监视对中间语言代码的编译和执行,并且在需要时协调对虚拟机140中的其他模块的使用。
在图3所示的示例中,虚拟机140还包括类加载器320,其加载类和/或执行与加载类相关联的附加或替换功能。例如,类加载器320还可验证所加载的类。
示例虚拟机140还包括类库330,其可用于在程序可包括一种以上的类(例如,应用专用类和共享类)时存储共享类。
图3的示例虚拟机140还包括即时编译器340。在图3所示的示例中,即时编译器340编译中间语言代码以在运行时生成由硬件平台(例如,图1的示例硬件平台150)执行的本机或机器代码。一般地,“即时”是指即时编译器340在每种方法或类被用于执行时将其编译或转译成本机代码。即时编译器340还可将一些经编译本机代码存储在即时存储器内高速缓存中(图3中未示出)。以此方式,虚拟机140可重用与被调用或召集一次以上的先前编译的方法或对象相关联的本机代码。
示例虚拟机140还包括存储器管理器350,其可用于管理存储器内被称为堆或堆空间的特定存储器空间。图3的示例存储器管理器350包括堆分配模块351和垃圾收集器353。在所示的示例中,堆分配模块351用于从存储器中的堆空间分配对象。
堆分配模块351包括存储器清除单元352。在一些示例中,存储器清除单元352在为线程创建线程局部区域(TLA)时清除存储器中的第一部分。第一部分的大小是可调(例如,可编程和/或可调整)清除大小以及线程的一方面或参数的函数。此外,在一些示例中,在线程的对象的大小大于线程局部区域中可用的已清除空间量时,存储器清除单元352响应于向该对象分配存储器而清除存储器中的第二部分。第二部分的大小是对象大小以及可调清除大小的函数。
垃圾收集器353通常用于回收由不再被应用或方法引用的对象使用的堆中的存储器空间。此外,垃圾收集器353还可移动对象以减少堆碎片。
主引擎310、类加载器320、类库330、即时编译器340和存储器管理器350可使用任何已知技术或电路来实现。虚拟机140中还可实现其他组件而没有限制。
图4是图3的示例存储器清除单元352的示例实现的框图。示例存储器清除单元352包括存储器清除管理器410,用于部分地管理存储器清除单元352中的组件的操作。存储器清除单元352还包括水线生成单元420,其部分地生成可由存储器清除单元352用来确定何时清除存储器部分的标记。该标记或水线可用于标记TLA中已被清除或将被清除的区域。在一些示例中,在为线程创建TLA时生成初始水线。可响应于清除大小以及线程的参数生成初始水线。线程的参数可以是例如线程中的任何数据或线程的特性。在一些示例中,随机或伪随机函数可使用线程的参数来确定初始水线。此外,在一些示例中,在跨越先前生成的水线时生成新的水线。当在对象分配之际对象的大小大于由水线指示的TLA中可用的已清除空间大小时,该水线被跨越。可至少基于该对象大小和清除大小来生成新的水线。
存储器清除的时序控制可通过生成水线来调整。例如,可为不同线程不同地设置初始水线。这样做可以减少存储器清除操作期间存储器写操作的冲突。这在使用同时多线程技术的环境中尤其有用。在一些示例中,用于生成一个或多个水线的清除大小可以是可调的固定参数。此外,可向线程的参数应用随机函数以确定该线程的初始水线的独特位置。
存储器清除单元352包括预取单元430。一般地,示例预取单元430执行导致将存储器中的位置写入高速缓存的读操作。在所示的示例中,预取单元430在创建TLA时执行预取。以下结合图5和7更详细地描述预取单元430的示例实现。
存储器清除单元352包括存储器清零单元440。存储器清零单元440可例如通过写0来清除存储器中的部分。在可用时,存储器清零单元440通过写入更新高速缓存的存储缓冲器来清除存储器,该高速缓存更新存储器。在图4所示的示例中,存储器清零单元440在TLA创建时清除第一存储器部分,而当在对象分配之际对象大小大于存储器中的可用已清除空间时清除第二存储器部分。在这些实例中,被清除的存储器部分的大小与TLA大小去耦,以使被清除存储器的大小与TLA大小不同。存储器清除操作可被配置成具有大于对象大小但小于TLA大小的尺寸。处理器中的存储缓冲器的大小可用于确定被清除存储器的大小。
存储器清除单元352包括空闲线生成单元450,其生成空闲线。在所示的示例中,空闲线可由存储器清除单元352用于标记有多少存储器已被分配给对象。此外,可在对象分配时使用空闲线来确定何时执行预取以及何时清除更多存储器。
图5是代表可使用机器可读指令执行以实现图3和/或4的示例存储器清除单元的示例过程的流程图。在所示的示例中,在为线程创建TLA时生成空闲线(框501)。可管理TLA以使得TLA中的地址位置被顺序地分配且空闲线指示TLA中何处可分配下一地址。可生成水线以标记TLA中将被清除或已被清除的区域(框502)。所生成的水线(框502)可被称为“初始水线”。在图5所示的示例中,初始水线的位置是基于可调或可调整参数(诸如清除大小)和线程的函数来确定的。在所示的示例中,响应于生成初始水线而预取存储器中的位置(框503)。以下结合图7和8更详细地描述预取存储位置。
例如通过写入更新高速缓存的存储缓冲器来将存储器清除到所生成的初始水线(框504)。在所示的示例中,随后在分配新对象时生成新的空闲线(框505)。可从先前生成的空闲线的位置以及新对象的大小确定新空闲线的位置。若新空闲线跨越水线(例如,在新对象的大小大于TLA中可用的已清除空间的大小时)(框506),则生成新的水线(框507)。如果新的空闲线没有跨越水线,则控制返回到框505。在所示的示例中,从在框505生成的新空闲线的位置以及清除大小参数确定新水线的位置。
在所示的示例中,在生成新的水线(框507)之后,预取存储器中的位置(框508)。以下结合图7和8更详细地描述预取存储位置。
在所示的示例中,例如通过写入更新高速缓存的存储缓冲器来将存储器清除到所生成的新水线(框509)。
在一些示例中,可使用以下伪代码来实现框501-504表示的示例机器可读指令。
设置空闲线=TLA开始;
在TLA创建时:tla->初始水线=清除大小+
生成初始水线(线程);
预取nta(tla开始,初始水线+预取距离);
清除存储器(tla开始,初始水线);
其中0<生成初始水线(线程)<清除大小;且生成的值是线程的函数。
在一些示例中,可使用以下伪代码来实现框505-509表示的示例机器可读指令。
在对象分配时:
新空闲线=空闲线+对象大小;
If(对象大小+空闲线>水线){
新水线=新空闲线+清除大小;
预取nta(新空闲线,新水线+预取距离);
清除存储器(水线,新水线);}
图6是示出图4的示例预取单元430的示例实现的框图。虽然本文结合图1-5的示例系统进行描述,但示例预取单元430可在附加或替换的系统、环境中实现,和/或结合不同系统、环境、技术等来实现。
图6的示例预取单元430包括大小函数选择器600、对象大小函数单元610、移动平均函数单元620、指数移动平均函数单元630、以及预取器640,预取器640包括大小函数调用器650、比较器660、大小阈值670、大小定义680以及读取器690。虽然图6中已示出实现图4的预取单元430的示例方式,但是图6中所示的这些元件、过程和/或设备中的一个或多个可以任何其他方式来组合、划分、重新安排、省略、消除和/或实现。此外,图6的任何或所有的示例大小函数选择器600、示例对象大小函数单元610、示例移动平均函数单元620、示例指数移动平均函数单元630、示例预取器640、示例大小函数调用器650、示例比较器660、示例大小阈值670、示例大小定义680、示例读取器690和/或更一般地示例预取单元430可由硬件、软件、固件和/或硬件、软件和/或固件的任何组合来实现。因此,例如图6的示例大小函数选择器600、示例对象大小函数单元610、示例移动平均函数单元620、示例指数移动平均函数单元630、示例预取器640、示例大小函数调用器650、示例比较器660、示例大小阈值670、示例大小定义680、示例读取器690和/或更一般地示例预取单元430中的任一个可由一个或多个电路、可编程处理器、专用集成电路(ASIC)、可编程逻辑器件(PLD)和/或现场可编程逻辑器件(FPLD)等来实现。在任何所附装置权利要求诠释为涵盖纯软件和/或固件实现时,图6的示例大小函数选择器600、示例对象大小函数单元610、示例移动平均函数单元620、示例指数移动平均函数单元630、示例预取器640,示例大小函数调用器650、示例比较器660、示例大小阈值670、示例大小定义680、示例读取器690和/或更一般地示例预取单元430中的至少一个由此明确定义成包括诸如存储器、DVD、CD等存储该软件和/或固件的有形机器可读介质。此外,图6的示例预取单元430可包括补充或代替图6中所示的那些的一个或多个元件、过程和/或设备,和/或可包括一个以上任何或所有所示的元件、过程和设备。
本文描述的示例预取单元430实现自适应或主动预取操作,其比常规或先前预取单元(例如,预取固定量的存储器的预取单元)产生更准确的预取并且能更好地处理大对象(例如,通过在遭遇大对象时不过度地取存储器)。具体地,不同于常规或先前预取单元,图6的示例预取单元430避免了在遭遇大对象时过度地取存储器。如上所述,常规或先前预取单元预取固定量的存储器(例如,在初始预取了太小量的存储器时预取一次以上)。
相反,图6的示例预取单元430在将与预取操作相关联的对象的大小纳入到要预取的存储器的量的确定中。在一些示例中,示例预取单元430将与近期预取的对象有关的对象大小趋势纳入到要预取的存储器的量的确定中。通过这样做,示例预取单元430预取与相关联的对象的大小相称的量的存储器。所得预取操作更准确且更好地利用宝贵的高速缓存资源。示例预取单元430的附加和替换优点将从本文描述的示例变得明显。
如图6中所示,示例预取单元430包括多个函数,这些函数能够确定将自适应地纳入到要预取的存储器的量的确定中的对象大小。具体地,示例预取单元430包括对象大小函数单元610、移动平均函数单元620和指数移动平均函数单元630。预取单元430可包括能够返回与关联于预取操作的对象大小有关的附加或替换信息(例如,预取操作中涉及的对象和/或与之相关的其他对象)的附加或替换函数和/或单元。为了选择由大小函数单元610、移动平均函数单元620和/或指数移动平均函数单元630实现的函数中的一个(或多个),示例预取单元430采用大小函数选择器600。示例大小函数选择器600可由程序员、设计者、技术人员、和/或任何其它类型的用户根据调度、随机地、和/或经由任何合适技术来配置,以选择将在确定要预取的存储器的量时使用的单元610、620和630的函数之一。例如,大小函数选择器600可被配置成在第一类型的运行时操作期间选择对象大小函数单元610,在第二类型的运行时操作期间选择移动平均函数单元620,以及在第三类型的运行时操作期间选择指数移动平均函数单元630。不同类型的运行时操作可对应于例如正在由虚拟机140处理的不同类型的指令或类。大小函数选择器600可被配置成基于附加或替换因素选择函数单元610、620和630之一。
图6的示例对象大小函数单元610实现返回触发预取分配请求的对象的大小的函数。在所示的示例中,可使用以下伪代码来表示对象大小函数610实现的函数:
对象大小(当前)=对象.大小.
图6的示例移动平均函数单元620实现返回指示与近期预取操作相关联的对象的大小的N周期移动平均的函数。在所示的示例中,可使用以下伪代码来表示移动平均函数单元620实现的函数:
对象大小(当前)=(对象.大小+N*对象大小(先前))/(N+1),其中‘N’是可编程或可调整变量,其设置成定义在计算对象大小的移动平均时要考虑的先前对象的范围(例如,五十(50)个最近的对象)。
图6的示例指数平均函数单元630实现返回指示与近期预取操作相关联的对象的大小的指数移动平均的函数。在所示的示例中,可使用以下伪代码来表示指数移动平均函数单元630实现的函数:
对象大小(当前)=((N-1)*对象大小(先前)+对象.大小)/N,其中‘N’是可编程或可调整变量,其设置成定义计算对象大小的移动平均时要考虑的先前对象的范围(例如,五十(50)个最近的对象)。
示例大小函数调用器650从大小函数选择器600接收对大小函数单元610、620和630之一的选择。例如,大小函数选择器600可为特定预取操作选择对象大小函数单元610。在这些实例中,在需要将在本文描述的自适应方法中考虑的对象大小时,示例大小函数调用器650调用对象大小函数单元610。在所示的示例中,对象大小函数单元610返回触发预取操作的当前对象的大小(例如,响应于创建TLA)。替换地,在大小函数选择器600选择移动平均函数单元620和指数移动平均函数单元630之一时,大小函数调用器650响应于对所选函数的调用从所选函数接收与当前对象以及关联于先前预取操作的对象有关的信息。
示例大小函数调用器650将从大小函数单元610、620和630中的所选单元接收到的对象大小信息递送给图6的示例比较器660(例如,从大小函数调用器650)。在所示的示例中,比较器660还从大小阈值670接收信息。
阈值可以是例如由程序员、技术人员、设计者等配置的对应于不同大小的对象(例如,通常与预取操作相关联的对象)的可编程或可调整大小。阈值670的值从反映与预取操作相关联的通常大小的对象的第一阈值(例如,与平均对象相关联的大小)开始递增地增加。如以下所描述的,示例阈值670被用于确定与当前预取操作相关联的对象的大小。
图6的示例比较器660将从大小函数调用器650接收到的对象大小信息与阈值670中的第一阈值作比较。在对象大小信息大于或等于(例如,在存储器大小方面)阈值670中的第一阈值时,比较器660前进到将对象大小信息与阈值670中的第二阈值作比较,该第二阈值递增地大于阈值670中的第一阈值。若对象大小信息大于或等于阈值670中的第二阈值,比较器660前进到将对象大小信息与阈值670中的第三阈值作比较,该第三阈值递增地大于阈值670中的第二阈值。图6的示例比较器660继续以此方式将对象大小信息与阈值670作比较,直至对象大小信息小于阈值670中的一个阈值。例如,当比较器660确定与预取操作相关联的对象小于阈值670中的第三阈值且大于阈值670中的第二阈值时,预取单元430就知道该对象的大小了(例如,落在由阈值670中的第三阈值大于阈值670中的第二阈值的增量所定义的特定范围内)。
响应于确定对象大小信息小于阈值670中的第一阈值,比较器660标识与阈值670中的该第一阈值相对应的一个大小定义680。图6的每一个示例大小定义680皆定义要预取的存储器大小。在所示的示例中,每个大小定义680对应于大小阈值670中的一个阈值。在比较器660确定对象大小信息小于例如阈值670中的第一阈值时,标识大小定义680中与阈值670中的第一阈值相对应的第一大小定义。由此,示例预取单元430能标识与第一大小定义680相对应的要预取的存储器量430。由于以上描述的计算(例如,由比较器660进行的比较),所标识的存储器量将包括足以准确地预取对应于与预取操作相关联的对象的信息的存储器(例如,因为对象的大小被确定为小于对应于所标识大小定义的阈值)。
当图6的示例读取器690确定以上描述的比较过程中标识了哪一个大小定义680时,示例读取器690预取所标识的那个大小定义680中所定义的量的存储器。因此,示例预取单元430要预取的存储器的量自适应地基于与预取操作相关联的对象的大小和/或与近期预取相关联的对象大小趋势。
该自适应预取方法例如通过在系统遭遇大对象时避免不必要的大量预取并提高预取操作的准确性来高效利用硬件高速缓存资源。各大小阈值670以及因此各大小定义680相差的增量的大小可被调节或调整以改变预取单元430的精度。具体地,较小增量将减小对象大小(例如,如由大小函数调用器670取回的)与确定为大于所获取对象大小的某个大小阈值670之间的差异。然而,这些较小的增量很可能导致更大量的计算,从而花费较长时间段。例如取决于预取单元430的实现,在一些示例中可为了更好的精度而牺牲时间,而在一些示例中可为了时间而牺牲精度。
图7是代表可被执行以实现图4和/或6的示例预取单元430的示例机器可读指令的流程图。此外,图7的示例流程图可用于实现图5的框503和/或框508。例如,以上结合图5的框503描述的预取操作可始于在图7的示例中选择大小函数(框700)。在所示的示例中,大小函数选择器600(图6)选择对象大小函数单元610(图6)、移动平均函数单元620(图6)以及指数移动平均单元630(图6)之一。一些示例包括能够返回关于可用于确定要预取的存储器量的对象大小的附加或替换信息的附加或替换函数。
示例预取器640(图6)的示例大小函数调用器650(图6)调用由大小函数选择器600选择的大小函数(框702)。取决于大小函数选择器600选择了哪个大小函数,所选大小函数返回与当前对象(例如,与当前预取操作相关联的对象)和/或其他相关对象(例如,与近期预取相关联的对象)有关的信息。如上所述,在确定要预取的存储器量时动态地使用返回的对象大小信息的自适应方法实现了比常规或先前预取单元(例如,预取固定量的存储器的预取单元)产生更准确的预取且能更好地处理大对象的预取操作。
比较器660(图6)将由大小函数调用器600取回的对象大小信息与大小阈值670(图6)中的第一阈值作比较(框704)。在对象大小信息小于(例如,在存储器大小方面)阈值670中的第一阈值时(框704),比较器660标识与阈值670中的第一阈值相对应的一个大小定义680(图6),并且读取器690预取在所标识的那个大小定义680中所定义的存储器量(框706)。在所示的示例中,控制随后返回到图5的框504。
再参照框704,在比较器660确定由大小函数调用器650取回的对象大小信息大于或等于阈值670中的第一阈值时,控制传递到框708并且比较器将对象大小信息与阈值670中的第二阈值作比较(框708)。阈值670中的第二阈值递增地大于阈值670中的第一阈值。在对象大小信息小于(例如,在存储器大小方面)阈值670中的第二阈值时(框704),比较器660标识与阈值670中的第二阈值相对应的一个大小定义680,并且读取器690预取在所标识的那个大小定义680中所定义的存储器量(框710)。在所示的示例中,控制随后返回到图5的框504。
再参照框708,在比较器660确定由大小函数调用器650取回的对象大小信息大于或等于阈值670中的第二阈值时,控制传递到框712并且比较器660将对象大小信息与阈值670中的第N阈值作比较(框712)。即,比较器660将对象大小信息与递增地更大的阈值670作比较直至一个阈值670大于对象大小。作为响应,读取器690预取在标识为对应于该阈值的那个大小定义680中所定义的量的存储器(框714)。因此,示例预取单元430要预取的存储器的量基于与预取操作相关联的对象的大小和/或与近期预取相关联的对象大小趋势。
图5和/或7的示例过程可使用处理器、控制器和/或任何其他合适的处理设备来执行。例如,图5和/或7的示例过程可在存储在与处理器(例如,以上结合图2讨论的示例处理器201)相关联的有形介质上的编码指令中实现,有形介质诸如闪存、只读存储器(ROM)和/或随机存取存储器(RAM)。替换地,图5和/或7的部分或所有示例过程可使用专用集成电路(ASIC)、可编程逻辑器件(PLD)、现场可编程逻辑器件(FPLD)、分立逻辑、硬件、固件等的任何组合来实现。另外,图5和/或7的一些或所有示例过程可手动实现或实现为任何前述技术的任何组合,例如固件、软件、分立逻辑和/或硬件的任何组合。此外,尽管图5和/或7的示例过程是参照图5和/或7的序列图来描述的,但是可采用实现图5和/或7的过程的其他方法。例如,操作的执行顺序可以改变,和/或所描述的一些操作可被改变、消除、细分、或组合。此外,另外,图5和/或7的任何或所有示例过程可例如由单独的处理线程、处理器、设备、分立逻辑、电路等顺序地和/或并行地执行。
尽管本文已描述了特定方法、装置和制品,但本专利的覆盖范围不限于此。相反,本专利覆盖字面上或在等效教义下清楚地落在所附权利要求范围内的所有方法、装置和制品。
Claims (20)
1.一种用于预取操作的方法,包括:
调用待由处理器执行的第一大小函数以确定触发预取操作的对象的大小;
将所述对象的大小与多个阈值中的第一阈值作比较;以及
在所述对象的大小小于所述第一阈值时,将与所述第一阈值相对应的第一大小定义所定义的量的存储数据预取到高速缓存中,其中将所述对象的大小与第一阈值作比较以及预取第一大小定义所定义的量的存储数据造成预取与触发预取操作的对象的大小相称的量的数据。
2.如权利要求1所述的方法,其特征在于,还包括在所述对象的大小大于或等于所述第一阈值时将所述对象的大小与所述多个阈值中的第二阈值作比较,其中所述第二阈值大于所述第一阈值。
3.如权利要求2所述的方法,其特征在于,还包括在所述对象的大小小于所述第二阈值且大于或等于所述第一阈值时预取与所述第二阈值相对应的第二大小定义所定义的第二量的存储数据,其中所述第二大小定义比所述第一大小定义定义更大的数据量。
4.如权利要求1所述的方法,其特征在于,还包括选择所述第一大小函数或第二大小函数之一。
5.如权利要求4所述的方法,其特征在于,所述第二大小函数确定表示关联于当前预取操作之前的其他预取操作的其他对象的大小的移动平均。
6.如权利要求4所述的方法,其特征在于,所述第二大小函数确定代表关联于当前预取操作之前的其他预取操作的其他对象的大小的指数移动平均。
7.如权利要求1所述的方法,其特征在于,所述预取操作是由创建与存储器分配操作相关联的线程局部区域触发的。
8.一种用于预取操作的设备,包括:
用于调用第一大小函数以确定触发预取操作的对象的大小的装置;
用于将所述对象的大小与多个阈值中的第一阈值作比较的装置;以及
用于在所述对象的大小小于所述第一阈值时从存储器预取由与所述第一阈值相对应的第一大小定义所定义的量的数据的装置,其中将所述对象的大小与第一阈值作比较以及预取第一大小定义所定义的量的数据造成预取与触发预取操作的对象的大小相称的量的数据。
9.如权利要求8所述的设备,其特征在于,所述用于比较的装置在所述对象的大小大于或等于所述第一阈值时将所述对象的大小与所述多个阈值中的第二阈值作比较,其中所述第二阈值大于所述第一阈值。
10.如权利要求9所述的设备,其特征在于,所述用于预取的装置在所述对象的大小小于所述第二阈值且大于或等于所述第一阈值时从存储器预取与所述第二阈值相对应的第二大小定义所定义的量的数据,其中所述第二大小定义比所述第一大小定义定义更大的数据量。
11.如权利要求8所述的设备,其特征在于,还包括用于选择所述第一大小函数或第二大小函数之一。
12.如权利要求11所述的设备,其特征在于,所述第二大小函数确定表示关联于当前预取操作之前的其他预取操作的其他对象的大小的移动平均。
13.如权利要求11所述的设备,其特征在于,所述第二大小函数确定表示关联于当前预取操作之前的其他预取操作的其他对象的大小的指数移动平均。
14.如权利要求8所述的设备,其特征在于,所述预取操作是由创建与存储器分配操作相关联的线程局部区域触发的。
15.一种用于执行预取操作的预取单元,包括:
第一大小函数单元,用于确定触发预取操作的对象的大小;
比较器,用于将所述对象的大小与多个阈值中的第一阈值作比较;以及
预取器,用于在所述比较器确定所述对象的大小小于所述第一阈值时,从存储器预取与所述第一阈值相对应的第一大小定义所定义的量的数据,其中将所述对象的大小与第一阈值作比较以及预取第一大小定义所定义的量的数据造成预取与触发预取操作的对象的大小相称的量的数据。
16.如权利要求15所述的预取单元,其特征在于,所述比较器用于在所述对象的大小大于或等于所述第一阈值时将所述对象的大小与所述多个阈值中的第二阈值作比较,其中所述第二阈值大于所述第一阈值。
17.如权利要求16所述的预取单元,其特征在于,所述预取器用于在所述对象的大小小于所述第二阈值且大于或等于所述第一阈值时预取与所述第二阈值相对应的第二大小定义所定义的第二量的数据,其中所述第二大小定义比所述第一大小定义定义更大的数据量。
18.如权利要求15所述的预取单元,其特征在于,还包括大小函数选择器,用于选择所述第一大小函数单元或第二大小函数单元之一。
19.如权利要求18所述的预取单元,其特征在于,所述第二大小函数单元用于确定表示关联于当前预取操作之前的其他预取操作的其他对象的大小的移动平均。
20.如权利要求18所述的预取单元,其特征在于,所述第二大小函数单元用于确定表示关联于当前预取操作之前的其他预取操作的其他对象的大小的指数移动平均。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US12/645,050 | 2009-12-22 | ||
US12/645,050 US8984231B2 (en) | 2009-12-22 | 2009-12-22 | Methods and apparatus to perform adaptive pre-fetch operations in managed runtime environments |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102109980A CN102109980A (zh) | 2011-06-29 |
CN102109980B true CN102109980B (zh) | 2015-08-12 |
Family
ID=43836997
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201010620175.4A Expired - Fee Related CN102109980B (zh) | 2009-12-22 | 2010-12-21 | 在托管运行时环境中执行自适应预取操作的方法和装置 |
Country Status (3)
Country | Link |
---|---|
US (2) | US8984231B2 (zh) |
EP (1) | EP2341441B1 (zh) |
CN (1) | CN102109980B (zh) |
Families Citing this family (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8984231B2 (en) | 2009-12-22 | 2015-03-17 | Intel Corporation | Methods and apparatus to perform adaptive pre-fetch operations in managed runtime environments |
TWI607375B (zh) * | 2012-11-05 | 2017-12-01 | 義隆電子股份有限公司 | 提升處理器之數值比較效能方法及應用在電子裝置進行數值比較的處理器 |
US9304928B2 (en) * | 2013-07-26 | 2016-04-05 | Netapp, Inc. | Systems and methods for adaptive prefetching |
US11281481B2 (en) | 2014-07-25 | 2022-03-22 | Intel Corporation | Using a plurality of conversion tables to implement an instruction set agnostic runtime architecture |
US10353680B2 (en) * | 2014-07-25 | 2019-07-16 | Intel Corporation | System converter that implements a run ahead run time guest instruction conversion/decoding process and a prefetching process where guest code is pre-fetched from the target of guest branches in an instruction sequence |
JP6457836B2 (ja) * | 2015-02-26 | 2019-01-23 | ルネサスエレクトロニクス株式会社 | プロセッサおよび命令コード生成装置 |
CN105049178A (zh) * | 2015-07-23 | 2015-11-11 | 柳州易旺科技有限公司 | 一种多用户信息筛选方法 |
US9892066B1 (en) | 2016-10-31 | 2018-02-13 | International Business Machines Corporation | Dynamically adjusting read data return sizes based on interconnect bus utilization |
US9684461B1 (en) | 2016-10-31 | 2017-06-20 | International Business Machines Corporation | Dynamically adjusting read data return sizes based on memory interface bus utilization |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP0752645A2 (en) * | 1995-07-07 | 1997-01-08 | Sun Microsystems, Inc. | Tunable software control of Harvard architecture cache memories using prefetch instructions |
CN1809817A (zh) * | 2003-06-20 | 2006-07-26 | 飞思卡尔半导体公司 | 用于动态预取缓冲器配置和替换的方法及设备 |
Family Cites Families (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5761464A (en) | 1995-05-22 | 1998-06-02 | Emc Corporation | Prefetching variable length data |
US6427184B1 (en) * | 1997-06-03 | 2002-07-30 | Nec Corporation | Disk drive with prefetch and writeback algorithm for sequential and nearly sequential input/output streams |
US6434674B1 (en) * | 2000-04-04 | 2002-08-13 | Advanced Digital Information Corporation | Multiport memory architecture with direct data flow |
US6963954B1 (en) | 2001-09-19 | 2005-11-08 | Cisco Technology, Inc. | Method and apparatus for optimizing prefetching based on memory addresses |
US7359890B1 (en) | 2002-05-08 | 2008-04-15 | Oracle International Corporation | System load based adaptive prefetch |
US6978351B2 (en) * | 2002-12-30 | 2005-12-20 | Intel Corporation | Method and system to improve prefetching operations |
US7333993B2 (en) * | 2003-11-25 | 2008-02-19 | Network Appliance, Inc. | Adaptive file readahead technique for multiple read streams |
US7539831B2 (en) * | 2004-08-18 | 2009-05-26 | Intel Corporation | Method and system for performing memory clear and pre-fetch for managed runtimes |
US8782629B2 (en) * | 2005-06-29 | 2014-07-15 | Intel Corporation | Associating program execution sequences with performance counter events |
US8984231B2 (en) | 2009-12-22 | 2015-03-17 | Intel Corporation | Methods and apparatus to perform adaptive pre-fetch operations in managed runtime environments |
-
2009
- 2009-12-22 US US12/645,050 patent/US8984231B2/en not_active Expired - Fee Related
-
2010
- 2010-11-29 EP EP10252016.0A patent/EP2341441B1/en not_active Not-in-force
- 2010-12-21 CN CN201010620175.4A patent/CN102109980B/zh not_active Expired - Fee Related
-
2014
- 2014-12-30 US US14/586,369 patent/US9280350B2/en not_active Expired - Fee Related
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP0752645A2 (en) * | 1995-07-07 | 1997-01-08 | Sun Microsystems, Inc. | Tunable software control of Harvard architecture cache memories using prefetch instructions |
CN1809817A (zh) * | 2003-06-20 | 2006-07-26 | 飞思卡尔半导体公司 | 用于动态预取缓冲器配置和替换的方法及设备 |
Also Published As
Publication number | Publication date |
---|---|
EP2341441B1 (en) | 2019-10-16 |
US9280350B2 (en) | 2016-03-08 |
US20150113249A1 (en) | 2015-04-23 |
EP2341441A3 (en) | 2012-04-25 |
US8984231B2 (en) | 2015-03-17 |
US20110153988A1 (en) | 2011-06-23 |
CN102109980A (zh) | 2011-06-29 |
EP2341441A2 (en) | 2011-07-06 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102109980B (zh) | 在托管运行时环境中执行自适应预取操作的方法和装置 | |
US9710246B2 (en) | Just-in-time expensive compilation hints | |
US20030237080A1 (en) | System and method for improved register allocation in an optimizing compiler | |
US9329867B2 (en) | Register allocation for vectors | |
US9298438B2 (en) | Profiling application code to identify code portions for FPGA implementation | |
US9047196B2 (en) | Usage aware NUMA process scheduling | |
CN110008009B (zh) | 在运行时绑定常量以提高资源利用率 | |
US7904661B2 (en) | Data stream prefetching in a microprocessor | |
US8453132B2 (en) | System and method for recompiling code based on locality domain and thread affinity in NUMA computer systems | |
CN101661486B (zh) | 对包含虚拟机的宿主机硬盘进行碎片整理的方法和系统 | |
US20050081207A1 (en) | Methods and apparatuses for thread management of multi-threading | |
CN113688062B (zh) | 用于存储数据的方法和相关产品 | |
CN109154908B (zh) | 具有精确垃圾收集报告的动态大小的局部 | |
US10261918B2 (en) | Process running method and apparatus | |
WO2013112282A1 (en) | Method and apparatus for register spill minimization | |
CN105393217A (zh) | 用于编译器优化的方法和系统 | |
CN114895965A (zh) | 实现工作负载的静态映射的乱序流水线执行的方法和装置 | |
US8510529B2 (en) | Method for generating program and method for operating system | |
US8006238B2 (en) | Workload partitioning in a parallel system with hetergeneous alignment constraints | |
US20070300210A1 (en) | Compiling device, list vector area assignment optimization method, and computer-readable recording medium having compiler program recorded thereon | |
US7240341B2 (en) | Global constant pool to allow deletion of constant pool entries | |
US20030154342A1 (en) | Evaluation and optimisation of code | |
Feng et al. | LAMA: Link-aware hybrid management for memory accesses in emerging CPU-FPGA platforms | |
US7539831B2 (en) | Method and system for performing memory clear and pre-fetch for managed runtimes | |
CN118551816A (zh) | 神经网络处理器的指令执行方法、装置、介质和设备 |
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 | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20150812 Termination date: 20201221 |
|
CF01 | Termination of patent right due to non-payment of annual fee |