CN1890635A - 用于降低软件应用中的存储器延迟的方法和装置 - Google Patents
用于降低软件应用中的存储器延迟的方法和装置 Download PDFInfo
- Publication number
- CN1890635A CN1890635A CNA200480035709XA CN200480035709A CN1890635A CN 1890635 A CN1890635 A CN 1890635A CN A200480035709X A CNA200480035709X A CN A200480035709XA CN 200480035709 A CN200480035709 A CN 200480035709A CN 1890635 A CN1890635 A CN 1890635A
- Authority
- CN
- China
- Prior art keywords
- instruction
- thread
- compiler
- helper thread
- helper
- 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
- 238000000034 method Methods 0.000 title claims abstract description 51
- 230000015654 memory Effects 0.000 title claims abstract description 49
- 230000007246 mechanism Effects 0.000 claims abstract description 29
- 230000037431 insertion Effects 0.000 claims description 4
- 238000003780 insertion Methods 0.000 claims description 3
- 230000005055 memory storage Effects 0.000 claims 1
- 230000008901 benefit Effects 0.000 abstract description 2
- 230000008569 process Effects 0.000 description 15
- 238000010586 diagram Methods 0.000 description 9
- 238000012545 processing Methods 0.000 description 6
- 238000011156 evaluation Methods 0.000 description 4
- 239000002245 particle Substances 0.000 description 4
- 238000012360 testing method Methods 0.000 description 4
- 230000006870 function Effects 0.000 description 2
- 238000007689 inspection Methods 0.000 description 2
- 241001269238 Data Species 0.000 description 1
- 230000006399 behavior Effects 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000004044 response Effects 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
Images
Classifications
-
- 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/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3824—Operand accessing
- G06F9/383—Operand 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/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/3851—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution from multiple instruction streams, e.g. multistreaming
-
- 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/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4843—Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
-
- 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/46—Multiprogramming arrangements
- G06F9/52—Program synchronisation; Mutual exclusion, e.g. by means of semaphores
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Multimedia (AREA)
- Memory System Of A Hierarchy Structure (AREA)
- Devices For Executing Special Programs (AREA)
- Debugging And Monitoring (AREA)
Abstract
公开了用于降低软件应用中的存储器延迟的方法和装置。被公开的系统使用一个或更多个助手线程为主线程预取变量,以便降低因存储器延迟和/或缓存未命中所致的性能瓶颈。使用性能分析工具对软件应用的资源使用进行评测,并标识软件应用中经历性能瓶颈的区域。在软件应用中产生编译器运行时指令,用于生成和管理助手线程。助手线程预取被标识的软件应用的经历性能瓶颈的区域中的数据。计数机制被插入助手线程并且计数机制被插入主线程,以便利用主线程协调助手线程的执行,并帮助确保在主线程能够利用被预取的数据之前所述被预取的数据没有从缓存中被去除。
Description
技术领域
本公开涉及助手线程(helper thread),并且更具体地,涉及用于降低软件应用中的存储器延迟的方法和装置。
背景
消费者不断要求更快的计算机。例如并发多线程(SMT)的多线程技术是对处理器管芯(die)面积影响有限的提升吞吐量性能的有效方法。SMT通过并行执行多个处理线程来提高处理器的吞吐量。但是很多软件应用并未受益于SMT,因为它们是单线程的,并因此没有利用多线程技术。
此外,处理器和存储器速度之间的差距不断加大,处理器速度超过了存储器速度。结果,计算机性能日益由处理器缓存层次结构的有效性来确定。预取(Prefetching)是公知的且有效地改善缓存层次结构有效性的技术,预取是一种过程,通过预取过程将指令从系统存储器转移到缓存存储器。但是,只有预取不能确保软件应用能够受益于缓存存储器的速度。此外,需要某种努力来防止在软件应用已经能够使用被预取的变量之前,所述被预取的变量从高速缓存中被去除。
附图简要说明
图1是示出被公开系统的使用环境的示例性计算机系统的框图。
图2是示出被公开系统的使用环境的另一个示例性计算机系统的框图。
图3是代表示例性机器可读指令的流程图,所述机器可读指令可以被设备执行以实现降低软件应用中的存储器延迟的示例性方法。
图4是代表示例性机器可读指令的流程图,所述机器可读指令可以被设备执行以实现管理与助手线程相关的主线程的执行的示例性方法。
图5是代表示例性机器可读指令的流程图,所述机器可读指令可以被设备执行以实现管理与主线程相关的助手线程的执行的示例性方法。
详细描述
总的来说,所述被公开系统使用助手线程来预取软件应用的主线程内的变量和/或指令,以便降低存储器延迟。针对缓存未命中和长存储器延迟时间来分析软件应用,并且将编译器运行时指令添加到软件应用中,以生成助手线程并管理所述助手线程和主线程。从主线程产生助手线程,用于预取变量和/或指令并缓存被预取的变量和/或指令供主线程访问。为了防止被缓存的变量和/或指令在主线程能够访问缓存之前从缓存中被去除,添加计数机制到主线程和助手线程中,以协调主线程和助手线程的执行。
图1是示出被公开系统的使用环境的示例性计算机系统的框图。计算机系统100可以是个人计算机(PC)或者任何其他的计算设备。在所示实施例中,计算机系统100包括由电源104供电的主处理单元102。主处理单元102可以包括处理器106,所述处理器106在电气上通过系统互连108耦合到主存储器设备110、闪存存储器设备112,以及一个或更多个接口电路114。在实施例中,系统互连108是地址/数据总线。当然,本领域的普通技术人员将很容易理解,可以使用除了总线以外的其他互连将处理器106连接到其他的设备110、112和114。例如,可以使用一条或更多条专用线路和/或纵横结构(crossbar)将处理器106连接到其他设备110、112和114。
处理器106可以是任何类型的公知处理器,例如来自Intel Pentium微处理器系列、IntelItanium微处理器系列、Intel Centrino微处理器系列,和/或Intel Xscale微处理器系列的处理器。此外,处理器106可以包括任何类型的公知缓存存储器,例如静态随机访问存储器(SRAM)。主存储器设备110可以包括动态随机访问存储器(DRAM)和/或任何其他形式的随机访问存储器。例如,主存储器设备110可以包括双数据率随机访问存储器(DDRAM)。主存储器设备110还可以包括非易失性存储器。在实施例中,主存储器设备110以公知的方式储存由处理器106执行的软件程序。闪存存储器设备112可以是任何类型的闪存存储器设备。闪存存储器设备112可以储存用来引导计算机系统100的固件。
可以使用任何类型的公知接口标准来实现接口电路114,接口标准例如以太网接口和/或通用串行总线(USB)接口。一个或更多个输入设备116可以连接到接口电路114,用于将数据和命令输入主处理单元102。例如,输入设备116可以是键盘、鼠标、触摸屏、跟踪板(track pad)、跟踪球、指向柱(isopoint)和/或语音识别系统。
一个或更多个显示器、打印机、扬声器,和/或其他输出设备118也可以通过接口电路114中的一个或更多个连接到主处理单元102。显示器118可以是阴极射线管(CRT)、液晶显示器(LCD),或任何其他类型的显示器。显示器118可以产生在主处理单元102工作期间所产生的数据的可见指示。所述可见指示可以包括操作人员输入提示(prompt)、计算出的值、检测到的数据,等等。
计算机系统100还可以包括一个或更多个储存设备120。例如,计算机系统100可以包括一个或更多个硬盘驱动器、致密盘(CD)驱动器、数字多功能盘驱动器(DVD),和/或其他的计算机媒体输入/输出(I/O)设备。
计算机系统100还可以通过到网络124的连接与其他设备122交换数据。所述网络连接可以是任何类型的网络连接,例如以太网连接、数字用户线(DSL)、电话线、同轴电缆等。网络124可以是任何类型的网络,例如国际互联网、电话网络、有线网络(cablenetwork)、和/或无线网络。网络设备122可以是任何类型的网络设备122。例如,网络设备122可以是客户(client)、服务器、硬盘驱动器等。
可以使用计算机系统100来执行软件应用。在计算机系统100上可以使用各种类型的软件应用,例如字处理器、计算机游戏,和/或工程开发工具。此外,计算机系统100可以执行软件评测工具(profiler)和/或软件性能分析,以确定软件应用执行的良好程度。计算机系统100还可以执行已经在计算机系统100被优化以改善性能的软件应用。
图2是示出被公开系统的使用环境的另一个示例性计算机系统的框图。在该实施例中,计算机系统200包括处理器202、编译器204、主存储器206、性能分析工具208,以及软件应用210。
再次重申,处理器202可以是任何类型的公知处理器,例如来自Intel Pentium微处理器系列、Intel Itanium微处理器系列、Intel Centrino微处理器系列,和/或Intel Xscale微处理器系列的处理器。主存储器设备206可以包括动态随机访问存储器(DRAM)和/或任何其他形式的随机访问存储器。主存储器设备206还可以包括用于缓存层次结构的存储器。缓存层次结构可以由单个缓存组成,或者可以是几个层次的具有不同尺寸和/或访问速度的缓存。例如,缓存层次结构可以由三个层次的板载(on-board)缓存存储器组成。第一层次的缓存可以是最小的缓存,具有最快的访问时间。其他层次的缓存在尺寸和访问时间上渐进地增加。
通常,编译器204可以是任何类型的用于解释例如C、C++、Java或Basic的任意类型编程语言的编译器。编译器204通过读取软件应用的代码列表并产生处理器202和/或计算机系统200能够解释和执行的指令,从软件应用的代码列表产生软件应用210。
性能分析工具208是提供关于软件应用的运行时性能的反馈的工具。当处理器202和/或计算机系统200正在执行软件应用210时,性能分析工具208监视计算机系统的使用(例如处理器使用、存储器使用、定时器、数据总线等)。性能分析工具208提供关于软件应用的性能瓶颈和/或资源使用的反馈。例如,反馈可以包括缓存命中(hit)率、缓存未命中(miss)率、处理器使用、存储器延迟时间、存储器使用,以及花在软件应用210的每一段上的时间。
图3是代表示例性机器可读指令的流程图,所述机器可读指令可以被设备执行以实现降低软件应用中的存储器延迟的示例性方法。优选地,所示过程300被具体实施在一个或更多个软件程序中,所述一个或更多个软件程序储存在一个或更多个存储器(例如闪存存储器112和/或硬盘120)中,并由一个或更多个处理器(例如处理器106和/或202)以公知的方式执行。但是,过程300的框中的一些或者全部可以人工地执行和/或由某个其他设备执行。尽管参考图3中所示流程图来描述过程300,本领域的普通技术人员将很容易理解,可以使用很多其他的执行过程300的方法。例如,这些框中很多的顺序可以被更改,一个或更多个框的操作可以被改变,框可以被组合和/或框可以被去掉。
总的来说,示例性过程300使用性能分析工具208来确定软件应用210的因存储器访问时间和/或高速缓存未命中而具有性能瓶颈的区域。使用这种性能信息,编译器204产生编译器运行时指令,并将所述指令插入软件应用210。编译器运行时指令产生助手线程,用于通过预取被性能分析工具208标识为造成瓶颈的变量来帮助缓和性能瓶颈。编译器204还将一部分计数机制插入助手线程,并将一部分计数机制插入主线程,以防止助手线程的执行点(execution point)过于领先或过于落后于主线程的执行点。
示例性过程300通过分析软件应用210开始(框302)。使用性能分析工具208来标识软件应用210的因高速缓存未命中和/或存储器延迟时间而遭遇性能瓶颈的区域。示例性的性能分析工具208是VtuneTM性能分析工具。VtuneTM性能分析工具给用户提供例如多少时间花费在软件的区域上、软件应用210中软件函数(function)之间的关系、资源使用(例如软件应用210正在使用多少RAM或者软件应用210正使用的CPU时间百分比)的信息,以及关于大的多线程应用中各个线程的性能的信息。
性能分析工具208完成分析软件应用210以后,评测信息(profiling information)被发送到编译器204(框304)。编译器204处理来自性能分析工具208的评测信息,并确定编译器204将修改软件应用210的哪些区域来帮助缓和性能瓶颈。在示例性实现中,编译器204可以接收列表,所述列表标识软件应用的因缓存未命中和/或存储器延迟而经历性能瓶颈的区域。然后,编译器204确定代码的具有最高缓存未命中率和/或最大存储器访问时间的区域,并修改软件应用210的这些区域。
编译器204尝试通过产生编译器运行时指令并将所述指令插入主线程以生成和管理助手线程来缓和性能瓶颈(框306),生成和管理所述助手线程是为了预取软件应用210的被性能分析工具208标识的区域中的变量。一种实现生成助手线程的示例性方法是产生指令_ssp_begin,并将所述指令插入主线程。这个指令生成线程组(thread team)(例如线程及由线程派生的助手线程),所述线程组最初仅由主线程组成。第二编译器运行时指令_ssp_spawn_helper也被产生并被插入主线程,以便从由计算机系统200维护的线程池(thread pool)产生助手线程。第三编译器运行时指令_ssp_end在软件应用210中产生,用于终止所有和主线程相关联的助手线程。
在编译器产生编译器运行时指令并将所述指令插入主线程以产生助手线程之后,产生助手线程代码(例如构成助手线程的软件指令)。一种生成助手线程代码的示例性方法是使编译器204使用从性能分析工具208接收到的评测信息,并标识软件应用的区域内引起缓存未命中的变量。在造成缓存未命中的变量被标识以后,编译器在助手线程主体(body)内产生用于访问所述变量的指令(例如将变量分配给寄存器),并缓存所述变量。
另一种生成助手线程代码的示例性方法是允许软件开发者生成助手线程代码并使用pragma语句来管理助手线程和主线程(例如产生新线程、控制主线程和/或助手线程的执行等)。可以使用线程图(thread graph)来使代码能在允许软件开发者生成助手线程代码的方法和允许编译器产生助手线程代码的方法之间重用。线程图是指令序列或代码区域的表示,并示出了线程和助手线程之间的线程派生(thread-spawning)关系。被用户插入的编译指示语句和被编译器产生的编译器运行时指令将共享线程图,并允许共享助手线程代码产生模块。
编译器204还将计数机制插入助手线程和主线程(框308)。计数机制允许助手线程和主线程的并行执行得到协调,以防止一个线程的执行过于领先或落后于另一线程的执行。主线程和助手线程的相对同步帮助防止变量被助手线程预取且缓存,并在主线程有机会访问该变量之前从缓存中被去除。因此,主线程和助手线程的相对同步降低了主线程遭遇缓存未命中的机会,为防止所述缓存未命中生成了助手线程。
作为示例性过程300的结果,产生了可以在计算机系统100上执行的经过优化的软件应用。所述已优化的软件应用被优化成利用多线程技术,并且包括产生用于预取变量的助手线程和用于协调助手线程和主线程的执行的计数机制的指令。
图4和图5示出了使用软件计数器和编译器运行时指令在助手线程和主线程中实现计数机制的示例性方法,所述计数机制响应于计数器的值来控制助手线程和主线程的执行。本领域的普通技术人员将很容易理解,可以使用很多其他的实现计数机制的方法。例如,计数器的数量可以被改变,或者可以使用邮箱系统来协调助手线程和主线程的执行。在实现所述计数机制的示例性方法中,所述计数机制包括并行工作的两半。所述计数机制的第一半用来控制主线程的执行(例如过程400),并在图4中示出。所述计数机制的第二半用来控制助手线程的执行(例如过程500),并在图5中示出。
总的来说,计数机制尝试控制主线程和助手线程的相对执行。主线程使用对计数器对来保持主线程的执行点落后于助手线程的执行点某个距离,以留出足够多的时间量供预取变量。助手线程使用第二计数器对来保持助手线程的执行点距主线程的执行点预定的距离,以允许主线程从预取中受益。
图4示出在主线程中实现的用于控制主线程的执行的计数机制的第一半400。首先,确定先行值(run-ahead value)(例如X)(框402)。先行值是预先定义的阈值,指示主线程和助手线程在执行中可以领先或落后于彼此多少地工作。可以通过分析评测信息以经验为主地确定先行值,或者可以利用编译器204中的选项设置所述先行值。两个计数器(例如mc和M)被插入主线程并被初始化(例如mc=X和M=1)(框404)。
主线程通常包括执行某些数据处理(例如计算、操作变量、排序等)的循环,所述数据处理涉及在循环内引起性能瓶颈的变量。主线程检查是否存在任何剩余的数据要被处理(框406)。如果没有数据剩余,则主线程调用编译器运行时指令(例如_ssp_end)来终止任何和主线程相关联的助手线程(框408)。
如果有数据剩余(框406),则主线程执行数据处理(框410),然后递增计数器mc(框412)。将计数器mc与计数器M被先行阈值比例缩放的值(例如M*X)进行比较,看计数器mc是否大于计数器M被缩放的值(例如mc>M*X)(框414)。
如果计数器mc大于M*X,则表明主线程的执行过于领先助手线程的执行。然后,递增计数器M(框416),并且调用编译器运行时指令(例如_ssp_post)来激活助手线程(框418)。主线程通过取回下一个数据元素(框420)并重复通过数据处理循环(框406、408、410、412、414、416、418和420)来继续执行。
如果计数器mc小于或等于M*X,则表明主线程的执行在预先定义的先行阈值以内。主线程通过取回下一个数据元素(框420)并重复通过数据处理循环(框406、408、410、412、414、416、418和420)来继续执行。
图5示出在助手线程中实现的用于控制助手线程执行的计数机制的第二半500。在计数机制的第二半500开始后,两个计数器(hc和H)被初始化(hc=0且H=1)(框502),然后,助手线程检查是否仍有数据要被预取(框504)。如果没有数据剩余,则助手线程结束。
如果数据仍要被预取(框504),则助手线程预取数据(例如读取变量并将该变量的值放入缓存的某个指令)被执行(框506)。计数器hc的值被递增,并且主线程的计数器mc的值被取回(框508)。
将计数器hc与计数器H按先行阈值X缩放的值进行比较(例如是hc>H*X),并且计数器hc与计数器mc的值进行比较(例如是hc>mc)(框510)。如果两个条件都满足,则助手线程过于领先主线程。助手线程通过递增计数器H(框512)并执行编译器运行时指令(例如_ssp_wait)以等待并允许主线程追赶(catch up)(框514)而继续。然后,助手线程继续取回下一个数据元素以便预取(框516),并继续重复通过循环。
如果两个条件(hc>H*X和hc>mc)不都满足(框510),则助手线程将计数器hc与计数器mc进行比较(例如是hc<=mc)(框518)。如果计数器hc小于计数器mc,则助手线程落后于主线程。然后,助手线程将执行编译器运行时指令(例如_ssp_catchup),以允许助手线程追赶(框520)。一种实现追赶指令的方法是使追赶指令将计数器hc、计数器H以及正被预取的数据的值设置为分别等于计数器mc、计数器M以及正在主线程中被处理的数据的值。通过如此修改计数器值,助手线程跳过预取已经被主线程取出的变量的操作。然后取回下一个数据元素(框516),并且助手线程继续重复通过循环(框504、506、508、510、512、514以及516)。
尽管上面公开了包括除其他以外在硬件上执行的软件的示例性系统,但是应该注意,这些系统仅仅是说明性的,并且不应该被视为限制性的。例如,可以预期,所公开的硬件和软件组件(component)的全部或一些能够被排他地具体实施在专用硬件中、专门地具体实施在软件中、专门地具体实施在固件中或硬件、固件和/或软件的某种组合中。
此外,尽管这里已经描述了某些方法、装置和制品,但是本专利的覆盖范围不限于此。相反,本专利覆盖了所有在字面上或在等同原则之下明确地落入所附权利要求书范围内的方法、装置和制品。
Claims (34)
1.一种降低软件应用中的存储器延迟的方法,所述方法包括:
分析所述软件应用并确定遭遇缓存未命中的第一软件指令区域;
产生助手线程;
产生第一组编译器运行时指令,并将所述第一组编译器运行时指令插入主线程;
产生第二组编译器运行时指令,并将所述第二组编译器运行时指令插入所述助手线程;以及
在所述主线程和所述助手线程中插入计数机制,所述计数机制被构造成协调所述主线程和所述助手线程的相对执行点。
2.如权利要求1所述的方法,还包括分析所述软件应用并确定遭遇存储器装载延迟的第二软件指令区域。
3.如权利要求2所述的方法,其中,所述第一软件指令区域和所述第二软件指令区域不同。
4.如权利要求2所述的方法,其中,所述第一软件指令区域包括所述第二软件指令区域。
5.如权利要求2所述的方法,其中,分析所述软件应用的操作包括:
使用性能分析工具测量与所述软件应用相关联的缓存未命中率;
使用所述性能分析工具测量和所述软件应用相关联的存储器装载延迟;
向编译器报告遭遇所述缓存未命中的所述第一软件指令区域;以及
报告遭遇所述存储器装载延迟的所述第二软件指令区域。
6.如权利要求1所述的方法,其中,产生助手线程的操作包括产生线程图。
7.如权利要求6所述的方法,其中,所述线程图显现代表所述主线程和所述助手线程之间的关系的数据结构。
8.如权利要求6所述的方法,其中,所述线程图辅助代码重用。
9.如权利要求1所述的方法,其中,所述第一组编译器运行时指令的至少一部分包括所述第二组编译器运行时指令的至少一部分。
10.如权利要求1所述的方法,其中,被插入所述主线程的所述第一组编译器运行时指令包括用于派生所述助手线程、终止所述助手线程和协调所述助手线程和所述主线程的执行的指令。
11.如权利要求1所述的方法,其中,被插入所述助手线程的所述第二组编译器运行时指令包括用于协调所述助手线程和所述主线程的执行的指令。
12.如权利要求1所述的方法,其中,所述计数机制包括软件计数器。
13.如权利要求12所述的方法,其中,所述第一组编译器运行时指令和所述第二组编译器运行时指令中的至少一个包括基于与所述软件计数器相关联的值来控制所述助手线程的执行速率的指令。
14.如权利要求12所述的方法,其中,所述第一组编译器运行时指令和所述第二组编译器运行时指令中的至少一个包括基于与所述软件计数器相关联的值来控制所述主线程的执行速率的指令。
15.如权利要求14所述的方法,其中,所述用于控制执行速率的编译器运行时指令包括延时指令、追赶指令,以及强制执行指令。
16.一种用于降低存储器延迟的系统,所述系统包括:
处理器;
可操作地耦合到所述处理器的存储器:
所述存储器储存被构造成标识应用程序中遭遇数据缓存未命中的代码区域;
可操作地耦合到所述软件工具的编译器,所述编译器被构造成从所述软件工具接收信息和产生助手线程;
一组要被产生并被插入所述应用程序的编译器运行时指令,所述编译器运行时指令用于管理所述助手线程和管理主线程;以及
供插入所述主线程和所述助手线程的计数机制,所述计数机制用于辅助与所述助手线程和所述主线程相关联的执行点的协调。
17.如权利要求16所述的系统,其中,所述软件工具包括VtuneTM性能分析器。
18.如权利要求16所述的系统,其中,所述编译器从所述软件工具接收到的所述信息包括与所述被标识的代码区域相关联的数据缓存未命中率。
19.如权利要求16所述的系统,其中,所述编译器从所述软件工具接收到的所述信息包括与所述被标识的代码区域相关联的存储器装载延迟时间。
20.如权利要求16所述的系统,其中,所述助手线程被构造成预取被包括在所述被标识的代码区域中的变量。
21.如权利要求16所述的系统,其中,所述编译器运行时指令组包括用于生成所述助手线程、终止所述助手线程、推迟所述助手线程的执行,以及激活所述助手线程的指令。
22.如权利要求16所述的系统,其中,所述编译器运行时指令组包括用于协调所述助手线程和所述主线程的执行的指令。
23.一种储存指令的机器可读介质,所述指令引起机器:
分析包括主线程的软件应用;
标识所述软件应用中的代码区域;
产生助手线程;
产生第一组编译器运行时指令并将其插入所述主线程,以管理所述助手线程和所述主线程;
产生第二组编译器运行时指令并将其插入所述助手线程,以管理所述助手线程和所述主线程;以及
管理所述助手线程和所述主线程的执行点。
24.如权利要求22所述的机器可读指令,其中,所述被储存的指令被构造成引起所述机器基于缓存未命中率来标识所述代码区域。
25.如权利要求22所述的机器可读指令,其中,所述被储存的指令被构造成引起所述机器基于存储器装载延迟来标识所述代码区域。
26.如权利要求22所述的机器可读指令,其中,所述被储存的指令被构造成引起所述机器产生所述助手线程,以用于预取所述被标识的代码区域内的指令。
27.如权利要求22所述的机器可读指令,其中,所述被储存的指令被构造成引起所述机器产生用于派生所述助手线程、终止所述助手线程、协调所述助手线程和所述主线程的执行的编译器运行时指令。
28.如权利要求22所述的机器可读指令,其中,所述被储存的指令被构造成引起所述机器通过将计数机制的第一部分插入所述主线程并将计数机制的第二部分插入所述助手线程来管理所述主线程和所述助手线程的执行。
29.一种用于降低存储器延迟的装置,所述装置包括:
被构造成标识应用程序中的遭遇数据缓存未命中的代码区域的软件工具;
可操作地耦合到所述软件工具的编译器,所述编译器被构造成从所述软件工具接收信息和产生助手线程;
一组要被产生并被插入所述应用程序中的编译器运行时指令,所述编译器运行时指令用于管理所述助手线程和管理主线程;以及
供插入所述主线程和所述助手线程的计数机制,所述计数机制用于辅助与所述助手线程和所述主线程相关联的执行点的协调。
30.如权利要求29所述的装置,其中所述编译器从所述软件工具接收到的所述信息包括与所述被标识的代码区域相关联的数据缓存未命中率。
31.如权利要求29所述的装置,其中所述编译器从所述软件工具接收到的所述信息包括与所述被标识的代码区域相关联的存储器装载延迟时间。
32.如权利要求29所述的装置,其中所述助手线程被构造成预取包含在所述被标识的代码区域中的变量。
33.如权利要求29所述的装置,其中所述编译器运行时指令组包括用于生成所述助手线程、终止所述助手线程、推迟所述助手线程的执行,以及激活所述助手线程的指令。
34.如权利要求29所述的装置,其中,所述编译器运行时指令组包括用于协调所述助手线程和所述主线程的执行的指令。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US10/677,414 | 2003-10-02 | ||
US10/677,414 US7328433B2 (en) | 2003-10-02 | 2003-10-02 | Methods and apparatus for reducing memory latency in a software application |
PCT/US2004/032212 WO2005033926A2 (en) | 2003-10-02 | 2004-09-29 | Methods and apparatus for reducing memory latency in a software application |
Publications (2)
Publication Number | Publication Date |
---|---|
CN1890635A true CN1890635A (zh) | 2007-01-03 |
CN1890635B CN1890635B (zh) | 2011-03-09 |
Family
ID=34422137
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN200480035709XA Expired - Fee Related CN1890635B (zh) | 2003-10-02 | 2004-09-29 | 用于降低软件应用中的存储器延迟的方法和装置 |
Country Status (5)
Country | Link |
---|---|
US (1) | US7328433B2 (zh) |
EP (1) | EP1678610A2 (zh) |
JP (2) | JP4783291B2 (zh) |
CN (1) | CN1890635B (zh) |
WO (1) | WO2005033926A2 (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101807144A (zh) * | 2010-03-17 | 2010-08-18 | 上海大学 | 一种前瞻多线程并行执行优化方法 |
CN101639799B (zh) * | 2008-07-31 | 2013-02-13 | 英赛特半导体有限公司 | 集成电路表征系统及方法 |
CN106776047A (zh) * | 2017-01-19 | 2017-05-31 | 郑州轻工业学院 | 面向非规则数据密集应用的群组式线程预取方法 |
CN110352406A (zh) * | 2017-03-10 | 2019-10-18 | 华为技术有限公司 | 无锁参考计数 |
Families Citing this family (40)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20040128489A1 (en) * | 2002-12-31 | 2004-07-01 | Hong Wang | Transformation of single-threaded code to speculative precomputation enabled code |
US20040243767A1 (en) * | 2003-06-02 | 2004-12-02 | Cierniak Michal J. | Method and apparatus for prefetching based upon type identifier tags |
US7707554B1 (en) * | 2004-04-21 | 2010-04-27 | Oracle America, Inc. | Associating data source information with runtime events |
US7506325B2 (en) | 2004-10-07 | 2009-03-17 | International Business Machines Corporation | Partitioning processor resources based on memory usage |
US20060080661A1 (en) * | 2004-10-07 | 2006-04-13 | International Business Machines Corporation | System and method for hiding memory latency |
US7809991B2 (en) * | 2005-01-11 | 2010-10-05 | Hewlett-Packard Development Company, L.P. | System and method to qualify data capture |
US7752016B2 (en) * | 2005-01-11 | 2010-07-06 | Hewlett-Packard Development Company, L.P. | System and method for data analysis |
US7849453B2 (en) * | 2005-03-16 | 2010-12-07 | Oracle America, Inc. | Method and apparatus for software scouting regions of a program |
US7950012B2 (en) * | 2005-03-16 | 2011-05-24 | Oracle America, Inc. | Facilitating communication and synchronization between main and scout threads |
US7472256B1 (en) | 2005-04-12 | 2008-12-30 | Sun Microsystems, Inc. | Software value prediction using pendency records of predicted prefetch values |
US20070130114A1 (en) * | 2005-06-20 | 2007-06-07 | Xiao-Feng Li | Methods and apparatus to optimize processing throughput of data structures in programs |
US7784040B2 (en) * | 2005-11-15 | 2010-08-24 | International Business Machines Corporation | Profiling of performance behaviour of executed loops |
US7856622B2 (en) * | 2006-03-28 | 2010-12-21 | Inventec Corporation | Computer program runtime bottleneck diagnostic method and system |
US7383401B2 (en) * | 2006-06-05 | 2008-06-03 | Sun Microsystems, Inc. | Method and system for identifying multi-block indirect memory access chains |
US7383402B2 (en) * | 2006-06-05 | 2008-06-03 | Sun Microsystems, Inc. | Method and system for generating prefetch information for multi-block indirect memory access chains |
US7596668B2 (en) * | 2007-02-20 | 2009-09-29 | International Business Machines Corporation | Method, system and program product for associating threads within non-related processes based on memory paging behaviors |
US8447933B2 (en) * | 2007-03-06 | 2013-05-21 | Nec Corporation | Memory access control system, memory access control method, and program thereof |
US8886887B2 (en) * | 2007-03-15 | 2014-11-11 | International Business Machines Corporation | Uniform external and internal interfaces for delinquent memory operations to facilitate cache optimization |
US8271963B2 (en) * | 2007-11-19 | 2012-09-18 | Microsoft Corporation | Mimicking of functionality exposed through an abstraction |
CN101482831B (zh) * | 2008-01-08 | 2013-05-15 | 国际商业机器公司 | 对工作线程与辅助线程进行相伴调度的方法和设备 |
US8359589B2 (en) * | 2008-02-01 | 2013-01-22 | International Business Machines Corporation | Helper thread for pre-fetching data |
US8312442B2 (en) * | 2008-12-10 | 2012-11-13 | Oracle America, Inc. | Method and system for interprocedural prefetching |
US20100153934A1 (en) * | 2008-12-12 | 2010-06-17 | Peter Lachner | Prefetch for systems with heterogeneous architectures |
US8327325B2 (en) * | 2009-01-14 | 2012-12-04 | International Business Machines Corporation | Programmable framework for automatic tuning of software applications |
CA2680597C (en) * | 2009-10-16 | 2011-06-07 | Ibm Canada Limited - Ibm Canada Limitee | Managing speculative assist threads |
US8572337B1 (en) * | 2009-12-14 | 2013-10-29 | Symantec Corporation | Systems and methods for performing live backups |
JP5541491B2 (ja) * | 2010-01-07 | 2014-07-09 | 日本電気株式会社 | マルチプロセッサ、これを用いたコンピュータシステム、およびマルチプロセッサの処理方法 |
US8423750B2 (en) | 2010-05-12 | 2013-04-16 | International Business Machines Corporation | Hardware assist thread for increasing code parallelism |
US8468531B2 (en) | 2010-05-26 | 2013-06-18 | International Business Machines Corporation | Method and apparatus for efficient inter-thread synchronization for helper threads |
US8612730B2 (en) | 2010-06-08 | 2013-12-17 | International Business Machines Corporation | Hardware assist thread for dynamic performance profiling |
US20120005457A1 (en) * | 2010-07-01 | 2012-01-05 | International Business Machines Corporation | Using software-controlled smt priority to optimize data prefetch with assist thread |
FR2962567B1 (fr) * | 2010-07-12 | 2013-04-26 | Bull Sas | Procede d'optimisation d'acces memoire, lors de la reprise d'execution d'une application, dans un microprocesseur comprenant plusieurs coeurs logiques et programme d'ordinateur mettant en oeuvre un tel procede |
US8683129B2 (en) * | 2010-10-21 | 2014-03-25 | Oracle International Corporation | Using speculative cache requests to reduce cache miss delays |
US20130086564A1 (en) * | 2011-08-26 | 2013-04-04 | Cognitive Electronics, Inc. | Methods and systems for optimizing execution of a program in an environment having simultaneously parallel and serial processing capability |
US9021152B2 (en) * | 2013-09-30 | 2015-04-28 | Google Inc. | Methods and systems for determining memory usage ratings for a process configured to run on a device |
KR102525295B1 (ko) | 2016-01-06 | 2023-04-25 | 삼성전자주식회사 | 데이터 관리 방법 및 장치 |
JP6845657B2 (ja) * | 2016-10-12 | 2021-03-24 | 株式会社日立製作所 | 管理サーバ、管理方法及びそのプログラム |
KR20200100958A (ko) | 2019-02-19 | 2020-08-27 | 삼성전자주식회사 | 어플리케이션을 프리페치하는 전자 장치 및 방법 |
US11816500B2 (en) * | 2019-03-15 | 2023-11-14 | Intel Corporation | Systems and methods for synchronization of multi-thread lanes |
US11132268B2 (en) * | 2019-10-21 | 2021-09-28 | The Boeing Company | System and method for synchronizing communications between a plurality of processors |
Family Cites Families (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5590293A (en) * | 1988-07-20 | 1996-12-31 | Digital Equipment Corporation | Dynamic microbranching with programmable hold on condition, to programmable dynamic microbranching delay minimization |
US5835947A (en) * | 1996-05-31 | 1998-11-10 | Sun Microsystems, Inc. | Central processing unit and method for improving instruction cache miss latencies using an instruction buffer which conditionally stores additional addresses |
US5809566A (en) * | 1996-08-14 | 1998-09-15 | International Business Machines Corporation | Automatic cache prefetch timing with dynamic trigger migration |
US6199154B1 (en) * | 1997-11-17 | 2001-03-06 | Advanced Micro Devices, Inc. | Selecting cache to fetch in multi-level cache system based on fetch address source and pre-fetching additional data to the cache for future access |
US6223276B1 (en) * | 1998-03-31 | 2001-04-24 | Intel Corporation | Pipelined processing of short data streams using data prefetching |
US6643766B1 (en) * | 2000-05-04 | 2003-11-04 | Hewlett-Packard Development Company, L.P. | Speculative pre-fetching additional line on cache miss if no request pending in out-of-order processor |
-
2003
- 2003-10-02 US US10/677,414 patent/US7328433B2/en not_active Expired - Fee Related
-
2004
- 2004-09-29 WO PCT/US2004/032212 patent/WO2005033926A2/en active Application Filing
- 2004-09-29 JP JP2006534105A patent/JP4783291B2/ja not_active Expired - Fee Related
- 2004-09-29 CN CN200480035709XA patent/CN1890635B/zh not_active Expired - Fee Related
- 2004-09-29 EP EP04789368A patent/EP1678610A2/en not_active Withdrawn
-
2010
- 2010-12-22 JP JP2010286087A patent/JP5118744B2/ja not_active Expired - Fee Related
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101639799B (zh) * | 2008-07-31 | 2013-02-13 | 英赛特半导体有限公司 | 集成电路表征系统及方法 |
CN101807144A (zh) * | 2010-03-17 | 2010-08-18 | 上海大学 | 一种前瞻多线程并行执行优化方法 |
CN101807144B (zh) * | 2010-03-17 | 2014-05-14 | 上海大学 | 一种前瞻多线程并行执行优化方法 |
CN106776047A (zh) * | 2017-01-19 | 2017-05-31 | 郑州轻工业学院 | 面向非规则数据密集应用的群组式线程预取方法 |
CN106776047B (zh) * | 2017-01-19 | 2019-08-02 | 郑州轻工业学院 | 面向非规则数据密集应用的群组式线程预取方法 |
CN110352406A (zh) * | 2017-03-10 | 2019-10-18 | 华为技术有限公司 | 无锁参考计数 |
Also Published As
Publication number | Publication date |
---|---|
JP2007507807A (ja) | 2007-03-29 |
JP2011090705A (ja) | 2011-05-06 |
US20050086652A1 (en) | 2005-04-21 |
CN1890635B (zh) | 2011-03-09 |
WO2005033926A3 (en) | 2005-12-29 |
EP1678610A2 (en) | 2006-07-12 |
US7328433B2 (en) | 2008-02-05 |
JP5118744B2 (ja) | 2013-01-16 |
JP4783291B2 (ja) | 2011-09-28 |
WO2005033926A2 (en) | 2005-04-14 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN1890635B (zh) | 用于降低软件应用中的存储器延迟的方法和装置 | |
Mittal | A survey of recent prefetching techniques for processor caches | |
US7424578B2 (en) | Computer system, compiler apparatus, and operating system | |
Lau et al. | Transition phase classification and prediction | |
US7950012B2 (en) | Facilitating communication and synchronization between main and scout threads | |
Iacobovici et al. | Effective stream-based and execution-based data prefetching | |
JP5473768B2 (ja) | マルチパス動的プロファイリングのためのコンピュータに実行させる方法、システム及びコンピュータ・プログラム | |
US20130332705A1 (en) | Profiling asynchronous events resulting from the execution of software at code region granularity | |
Khairy et al. | Exploring modern GPU memory system design challenges through accurate modeling | |
Luo et al. | Laser: Light, accurate sharing detection and repair | |
US8266605B2 (en) | Method and system for optimizing performance based on cache analysis | |
US20090320006A1 (en) | Learning and cache management in software defined contexts | |
Marin et al. | Diagnosis and optimization of application prefetching performance | |
Chen et al. | Data access history cache and associated data prefetching mechanisms | |
US20120226892A1 (en) | Method and apparatus for generating efficient code for scout thread to prefetch data values for a main thread | |
Xu et al. | Machine learning guided optimal use of GPU unified memory | |
Sair et al. | A decoupled predictor-directed stream prefetching architecture | |
Yeh et al. | Performing file prediction with a program-based successor model | |
Liu et al. | Photon: A fine-grained sampled simulation methodology for GPU workloads | |
Xu et al. | XUnified: A Framework for Guiding Optimal Use of GPU Unified Memory | |
Garbatov et al. | Data access pattern analysis and prediction for object-oriented applications | |
Guo et al. | Accelerating BFS via data structure-aware prefetching on GPU | |
Huangfu et al. | Warp-based load/store reordering to improve GPU data cache time predictability and performance | |
Paul et al. | Improving efficiency of embedded multi-core platforms with scratchpad memories | |
Al-Marakeby | Cache memory loaclity optimization for implementation of computer vision and image processing algorithms |
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 | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20110309 Termination date: 20180929 |