CN1890635B - 用于降低软件应用中的存储器延迟的方法和装置 - Google Patents

用于降低软件应用中的存储器延迟的方法和装置 Download PDF

Info

Publication number
CN1890635B
CN1890635B CN200480035709XA CN200480035709A CN1890635B CN 1890635 B CN1890635 B CN 1890635B CN 200480035709X A CN200480035709X A CN 200480035709XA CN 200480035709 A CN200480035709 A CN 200480035709A CN 1890635 B CN1890635 B CN 1890635B
Authority
CN
China
Prior art keywords
thread
counter variable
helper
main thread
helper thread
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
Application number
CN200480035709XA
Other languages
English (en)
Other versions
CN1890635A (zh
Inventor
田新民
S-W·廖
王红
米林德·吉尔卡
约翰·申
佩里·王
格兰特·哈伯
盖罗尔夫·霍夫莱纳
丹尼尔·莱弗里
H·斋藤
桑吉夫·沙阿
D·金
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Intel Corp
Original Assignee
Intel Corp
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Intel Corp filed Critical Intel Corp
Publication of CN1890635A publication Critical patent/CN1890635A/zh
Application granted granted Critical
Publication of CN1890635B publication Critical patent/CN1890635B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3851Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution from multiple instruction streams, e.g. multistreaming
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/443Optimisation
    • G06F8/4441Reducing the execution time required by the program code
    • G06F8/4442Reducing the number of cache misses; Data prefetching
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3824Operand accessing
    • G06F9/383Operand prefetching
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/46Multiprogramming arrangements
    • G06F9/52Program synchronisation; Mutual exclusion, e.g. by means of semaphores

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 
Figure S04835709X20060612D000021
微处理器系列、Intel处理器系列、Intel 
Figure S04835709X20060612D000023
微处理器系列,和/或Intel
Figure S04835709X20060612D000024
微处理器系列的处理器。此外,处理器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微处理器系列、Intel微处理器系列、Intel
Figure S04835709X20060612D000033
微处理器系列,和/或Intel
Figure S04835709X20060612D000034
微处理器系列的处理器。主存储器设备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 (21)

1.一种通过线程组成员执行点的协调来降低软件应用在运行时代码中的存储器延迟的方法,所述方法包括:
基于对主线程的操作的分析来生成一个或更多个助手线程,以预取导致性能瓶颈的数据;
产生限定所述主线程和所述一个或更多个助手线程之间的同步窗的设置点;
监视所述主线程和一个或更多个助手线程的所述执行点;以及
管理所述主线程和所述一个或更多个助手线程的所述执行点,以导致所述主线程和所述一个或更多个助手线程在所述限定的同步窗内开始执行。
2.如权利要求1所述的方法,其中所述设置点是第一设置点,并且还包括使用基于编译器的指令产生第二设置点。
3.如权利要求1所述的方法,其中,管理所述主线程和所述一个或更多个助手线程的所述执行点的操作包括:
监视对所述主线程来说为局部的第一计数器变量和第二计数器变量;以及
监视对于所述一个或更多个助手线程中每一个线程来说为局部的第三计数器变量和第四计数器变量。
4.如权利要求1所述的方法,其中,监视所述主线程和一个或更多个助手线程的所述执行点的操作包括产生代表所述同步窗的先行距离值。
5.如权利要求4所述的方法,其中,管理所述主线程的所述执行点的操作包括:
初始化主线程第一计数器变量;
初始化主线程第二计数器变量;
在所述主线程处理数据后递增所述主线程第一计数器变量;
通过将所述主线程第二计数器变量乘以所述先行距离值来缩放所述主线程第二计数器变量;以及
将所述缩放的主线程第二计数器变量与所述主线程第一计数器变量进行比较,并且,如果所述主线程第一计数器变量大于所述缩放的主线程第二计数器变量则递增所述主线程第二计数器变量,其中生成所述一个或更多个助手线程的操作是在所述主线程第二计数器变量被递增时进行的。
6.如权利要求4所述的方法,其中,管理所述一个或更多个助手线程的所述执行点的操作包括:
初始化助手线程第三计数器变量;
初始化助手线程第四计数器变量;
在所述一个或更多个助手线程预取数据后递增所述助手线程第三计数器变量;
通过将所述助手线程第四计数器变量乘以所述先行距离值来缩放所述助手线程第四计数器变量;以及
将所述助手线程第三计数器变量与所述缩放的助手线程第四计数器变量进行比较;
将所述助手线程第三计数器变量与所述主线程第一计数器变量进行比较;
如果所述助手线程第三计数器变量大于所述缩放的助手线程第四计数器变量并且所述助手线程第三计数器变量大于所述主线程第一计数器变量,则递增所述助手线程第四计数器变量;以及
当所述助手线程第四计数器变量被递增时,导致所述助手线程等待。
7.如权利要求6所述的方法,其中,管理所述一个或更多个助手线程的所述执行点的操作还包括,如果所述助手线程第三计数器变量小于或等于所述主线程第一计数器变量,则强制所述一个或更多个助手线程追赶所述主线程操作。
8.一种用于降低存储器延迟的系统,所述系统包括:
处理器;
可操作地耦合到所述处理器的存储器,所述存储器储存被构造成分析主线程的操作以确定性能瓶颈的软件工具;
可操作地耦合到所述软件工具的编译器,所述编译器被构造成从所述软件工具接收信息、限定同步窗和产生一个或更多个助手线程;
一组要被产生并被插入所述应用程序的编译器运行时指令,所述编译器运行时指令用于监视所述一个或更多个助手线程和监视主线程;以及
供插入所述主线程和所述一个或更多个助手线程的编译器运行时指令,所述编译器运行时指令用于管理与所述一个或更多个助手线程相关联的执行点和所述主线程的执行点,以确保所述执行点留在所述限定的同步窗内。
9.如权利要求8所述的系统,其中,所述软件工具包括性能分析器。
10.如权利要求8所述的系统,其中,所述编译器从所述软件工具接收到的所述信息包括与所述主线程操作相关联的数据缓存未命中率。
11.如权利要求8所述的系统,其中,所述编译器从所述软件工具接收到的所述信息包括与所述主线程操作相关联的存储器装载延迟时间。
12.如权利要求8所述的系统,其中,所述一个或更多个助手线程被构造成预取被包括在所述主线程中的变量。
13.如权利要求8所述的系统,其中,所述编译器运行时指令组包括用于监视所述主线程、生成所述一个或更多个助手线程、终止所述一个或更多个助手线程、管理所述一个或更多个助手线程的执行点,以及激活所述一个或更多个助手线程的指令。
14.如权利要求8所述的系统,其中,所述编译器运行时指令组包括用于管理所述助一个或更多个手线程和所述主线程的执行点的指令。
15.一种用于协调线程组成员的执行点的装置,所述装置包括:
被构造成基于对主线程的操作的分析来生成一个或更多个助手线程以及预取导致性能瓶颈的数据的代码产生器;
被构造成生成设置点的代码产生器,所述设置点限定用于所述主线程和所述一个或更多个助手线程的执行点的同步窗;
被构造成监视所述主线程和一个或更多个助手线程的所述执行点的性能监控模块;以及
被构造成管理所述主线程和所述一个或更多个助手线程的所述执行点,以导致所述主线程和所述一个或更多个助手线程在所述限定的同步窗内开始执行的性能管理模块。
16.如权利要求15所述的装置,其中所述代码产生器被构造成确定用于触发所述主线程和所述一个或更多个助手线程的执行点的效率同步窗。
17.如权利要求15所述的装置,其中所述性能监视模块被构造成:
初始化对于所述主线程来说为局部的第一计数器变量和第二计数器变量;以及
初始化对于所述一个或更多个助手线程中每一个线程来说为局部的第三计数器变量和第四计数器变量。
18.如权利要求15所述的装置,其中,所述性能监视模块被构造成产生代表用于所述主线程执行点和所述一个或更多个助手线程执行点的所述同步窗的先行距离值。
19.如权利要求18所述的装置,其中所述性能管理模块被构造成:
初始化主线程第一计数器变量;
初始化主线程第二计数器变量;
在所述主线程处理数据后递增所述主线程第一计数器变量;
通过将所述主线程第二计数器变量乘以所述先行距离值来缩放所述主线程第二计数器变量;以及
将所述缩放的主线程第二计数器变量与所述主线程第一计数器变量进行比较,并且,如果所述主线程第一计数器变量大于所述缩放的主线程第二计数器变量则递增所述主线程第二计数器变量,其中生成所述一个或更多个助手线程的操作是在所述主线程第二计数器变量被递增时进行的。
20.如权利要求18所述的装置,其中所述性能管理模块被构造成:
初始化助手线程第三计数器变量;
初始化助手线程第四计数器变量;
在所述一个或更多个助手线程预取数据后递增所述助手线程第三计数器变量;
通过将所述助手线程第四计数器变量乘以所述先行距离值来缩放所述助手线程第四计数器变量;以及
将所述助手线程第三计数器变量与所述缩放的助手线程第四计数器变量进行比较;
将所述助手线程第三计数器变量与所述主线程第一计数器变量进行比较;
如果所述助手线程第三计数器变量大于所述缩放的助手线程第四计数器变量并且所述助手线程第三计数器变量大于所述主线程第一计数器变量,则递增所述助手线程第四计数器变量;以及
当所述助手线程第四计数器变量被递增时,导致所述助手线程等待。
21.如权利要求20所述的装置,其中所述性能管理模块被构造成,如果所述助手线程第三计数器变量小于或等于所述主线程第一计数器变量,则强制所述一个或更多个助手线程追赶所述主线程操作。
CN200480035709XA 2003-10-02 2004-09-29 用于降低软件应用中的存储器延迟的方法和装置 Expired - Fee Related CN1890635B (zh)

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 CN1890635A (zh) 2007-01-03
CN1890635B true 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)

Families Citing this family (43)

* Cited by examiner, † Cited by third party
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
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
US7383401B2 (en) * 2006-06-05 2008-06-03 Sun Microsystems, Inc. Method and system for identifying 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
CN101639799B (zh) * 2008-07-31 2013-02-13 英赛特半导体有限公司 集成电路表征系统及方法
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 日本電気株式会社 マルチプロセッサ、これを用いたコンピュータシステム、およびマルチプロセッサの処理方法
CN101807144B (zh) * 2010-03-17 2014-05-14 上海大学 一种前瞻多线程并行执行优化方法
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 株式会社日立製作所 管理サーバ、管理方法及びそのプログラム
CN106776047B (zh) * 2017-01-19 2019-08-02 郑州轻工业学院 面向非规则数据密集应用的群组式线程预取方法
US20180260255A1 (en) * 2017-03-10 2018-09-13 Futurewei Technologies, Inc. Lock-free reference counting
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)

* Cited by examiner, † Cited by third party
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

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
HONG WANG ET AL.speculative precomputation :exploring the use ofmultithreading for latency.intel technology journal.2002,全文. *

Also Published As

Publication number Publication date
JP2011090705A (ja) 2011-05-06
JP5118744B2 (ja) 2013-01-16
JP4783291B2 (ja) 2011-09-28
US20050086652A1 (en) 2005-04-21
US7328433B2 (en) 2008-02-05
JP2007507807A (ja) 2007-03-29
WO2005033926A2 (en) 2005-04-14
EP1678610A2 (en) 2006-07-12
CN1890635A (zh) 2007-01-03
WO2005033926A3 (en) 2005-12-29

Similar Documents

Publication Publication Date Title
CN1890635B (zh) 用于降低软件应用中的存储器延迟的方法和装置
Lee et al. CAWS: Criticality-aware warp scheduling for GPGPU workloads
US7424578B2 (en) Computer system, compiler apparatus, and operating system
Khairy et al. Exploring modern GPU memory system design challenges through accurate modeling
Chen et al. Hybrid analytical modeling of pending cache hits, data prefetching, and MSHRs
Dao et al. A performance model for GPUs with caches
US8266605B2 (en) Method and system for optimizing performance based on cache analysis
Li et al. X: A comprehensive analytic model for parallel machines
Chen et al. Flow-guided file layout for out-of-core pathline computation
Butcher et al. Optimizing for KNL usage modes when data doesn't fit in MCDRAM
Yuan et al. A hybrid analytical DRAM performance model
Dubrulle et al. A low-overhead dedicated execution support for stream applications on shared-memory CMP
Bombieri et al. A fine-grained performance model for GPU architectures
Entezari-Maleki et al. Evaluation of memory performance in numa architectures using stochastic reward nets
Huangfu et al. Warp-based load/store reordering to improve GPU data cache time predictability and performance
US20050050534A1 (en) Methods and apparatus to pre-execute instructions on a single thread
Yu et al. QIG: quantifying the importance and interaction of GPGPU architecture parameters
Lal et al. A quantitative study of locality in GPU caches
Huangfu et al. WCET analysis of GPU L1 data caches
Kim et al. Improving the performance and energy efficiency of gpgpu computing through integrated adaptive cache management
Prisagjanec et al. Reducing competitive cache misses in modern processor architectures
Basthikodi et al. HPC Based Algorithmic Species Extraction Tool for Automatic Parallelization of Program Code
Tsou et al. Optimization of stride prefetching mechanism and dependent warp scheduling on GPGPU
Karlin et al. Strong scaling bottleneck identification and mitigation in Ares
Milenkovic et al. Lazy prefetching

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: 20110309

Termination date: 20180929

CF01 Termination of patent right due to non-payment of annual fee