CN101273332B - 用于线程数据亲和性优化的方法和装置以及编译器 - Google Patents
用于线程数据亲和性优化的方法和装置以及编译器 Download PDFInfo
- Publication number
- CN101273332B CN101273332B CN2006800354616A CN200680035461A CN101273332B CN 101273332 B CN101273332 B CN 101273332B CN 2006800354616 A CN2006800354616 A CN 2006800354616A CN 200680035461 A CN200680035461 A CN 200680035461A CN 101273332 B CN101273332 B CN 101273332B
- Authority
- CN
- China
- Prior art keywords
- trigger condition
- thread
- data
- remote
- compiler
- 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
- 238000005457 optimization Methods 0.000 title claims abstract description 44
- 238000000034 method Methods 0.000 title claims description 29
- 230000014509 gene expression Effects 0.000 claims description 46
- 238000012544 monitoring process Methods 0.000 claims description 42
- 238000005070 sampling Methods 0.000 claims description 6
- 238000004590 computer program Methods 0.000 abstract description 3
- 230000001427 coherent effect Effects 0.000 abstract 1
- 238000003860 storage Methods 0.000 description 15
- 230000008569 process Effects 0.000 description 10
- 238000010586 diagram Methods 0.000 description 8
- 238000012545 processing Methods 0.000 description 8
- 230000005012 migration Effects 0.000 description 3
- 238000013508 migration Methods 0.000 description 3
- 238000004458 analytical method Methods 0.000 description 2
- 150000001875 compounds Chemical class 0.000 description 2
- 238000009826 distribution Methods 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 230000037431 insertion Effects 0.000 description 2
- 230000003068 static effect Effects 0.000 description 2
- 230000001960 triggered effect Effects 0.000 description 2
- XUIMIQQOPSSXEZ-UHFFFAOYSA-N Silicon Chemical compound [Si] XUIMIQQOPSSXEZ-UHFFFAOYSA-N 0.000 description 1
- 230000009471 action Effects 0.000 description 1
- 230000008901 benefit Effects 0.000 description 1
- 238000004364 calculation method Methods 0.000 description 1
- 238000004891 communication Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000005242 forging Methods 0.000 description 1
- 230000006870 function Effects 0.000 description 1
- 230000004927 fusion Effects 0.000 description 1
- 238000003780 insertion Methods 0.000 description 1
- 238000009434 installation Methods 0.000 description 1
- 230000001788 irregular Effects 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 230000004044 response Effects 0.000 description 1
- 229910052710 silicon Inorganic materials 0.000 description 1
- 239000010703 silicon Substances 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/45—Exploiting coarse grain parallelism in compilation, i.e. parallelism between groups of instructions
Landscapes
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
可由编译器在编译要在高速缓存一致性非均匀存储访问(cc-NUMA)平台上执行的计算机程序期间来进行线程数据亲和性优化。在一个实施例中,本发明包括接收待编译的程序。所接收的程序然后在第一遍被编译并执行。在执行期间,编译器采用剖析工具来收集剖析数据。然后,在第二遍,编译器采用所收集的剖析数据来对程序进行线程数据亲和性优化。
Description
技术领域
本文所包含的是受到著作权保护的资料。著作权人不反对任何人复制此专利公开,因为它出现在专利及商标局专利文件或记录中,但在其它方面仍保留所有著作权。
本发明的实施例一般涉及并行处理领域。更具体来说,本发明的实施例涉及多线程环境中的线程数据亲和性。
背景技术
并行处理涉及同时执行两个或两个以上指令线程。使用多个处理器同时进行任务可极大地提高各种应用程序的性能。存在若干并行处理体系结构,包括共享存储器多核处理器、多处理器以及高速缓存一致性非均匀存储访问(cc-NUMA)体系结构。在共享存储器多核处理器和多处理器系统中,多个处理元件(例如中央处理器(CPU))由操作系统并行操作,并经由总线互连来访问存储器。
相反,cc-NUMA多处理体系结构具有分为近存储体和远存储体的存储器。在共享存储器多核处理器和多处理器系统中,所有处理元件以相同速度访问公共存储器。在cc-NUMA中,访问与处理元件在相同的处理器板上的存储器(本地存储器)比访问其它处理器板上的存储器(共享存储器)更快,因而使用术语“非均匀”。因此,cc-NUMA体系结构对于较大数量的处理元件能远比共享存储器多核处理器和多处理器系统更好地进行缩放。“高速缓存一致性NUMA”表示在本地系统中支持高速缓存。在实践方面,大多数大规模NUMA系统是cc-NUMA系统,在本说明书中交替使用NUMA和cc-NUMA。NUMA与cc-NUMA之间的差别对于理解本文所述的本发明的各种实施例没有特别的关联。
图1是示例cc-NUMA体系结构的框图。图1示出节点1-4。较大的并行系统可具有更多节点,但为了简洁起见仅示出四个。每个节点表示为具有作为处理元件5-11示出的一个或多个处理元件(有时又称作“核心”)。每个节点还具有表示为存储器13-16的本地存储器。这只是说明;节点可具有两个以上处理元件以及经由总线连接到这类处理元件的一个以上本地存储器。
一个处理元件本地的存储器对于另一个处理元件可能不是本地的。例如,对于处理元件5,存储器13是本地的并且可快速存取。但是,对于处理元件5,存储器15不是本地的。处理元件5可经由连接节点1和节点3的链路来访问存储器15;但是,这种访问比本地存储器访问具有明显更高的等待时间。从处理元件5访问存储器16甚至具有更高的等待时间,因为必须经过两个独立链路。
因此很明显,希望在本地存储器中具有由执行线程所使用的数据。这种情况的技术术语是“线程数据亲和性”。在多线程系统中,数据可在一个时间由一个处理元件使用,然后在另一个时间由另一个非本地处理元件使用。线程数据亲和性表示将数据移动到采用该数据来执行线程的处理元件本地的存储器的问题。
已经进行了若干尝试来解决线程数据亲和性问题。一种方式是扩展高级编程语言,以便允许由编程人员插入数据分布指示。但是,这种方法损害了程序模型的简单性,并且无法及时处理不规则存储器存取模式。此外,它要求进行额外的编程。
第二种方式采用由操作系统在后台执行的守护程序(demon)(又称作服务)来进行认为适合于由操作系统所执行的应用程序的页迁移。但是,这种方法没有利用页迁移策略与程序语义之间的相关性,并且具有不良响应性。
第三种方式为用户提供可插入程序中以触发页迁移的库例程集合。但是,在进行编译器优化时,这种方法易于在编译时产生副作用。
发明内容
按照本发明的一个方面,提供一种用于线程数据亲和性优化的方法,包括:由编译器接收待编译为可执行程序的源代码;将所述源代码转换成中间表示;生成多线程可执行代码;在高速缓存一致性非均匀存储访问cc-NUMA平台上执行所述多线程可执行代码,并在执行期间采用剖析工具通过抽样来收集剖析数据;根据所收集的剖析数据来确定与负荷表达相关联的触发条件;生成服务例程,以便在满足所述触发条件时,将数据从所述cc-NUMA平台的第一节点移动到所述cc-NUMA平台的第二节点;生成监测指令,以便使运行时远程访问监测能够在执行期间判定是否满足所述触发条件;以及通过将所述监测指令插入所述中间表示,来生成线程数据亲和性优化可执行代码,其中,确定触发条件的步骤包括确定在触发让步事件之前负荷表达进行远程访问的阈值次数。
按照本发明的另一方面,提供一种用于高速缓存一致性非均匀存储访问cc-NUMA平台的编译器,所述编译器包括:二进制生成器模块,从程序中生成多线程可执行二进制;剖析工具,在所述cc-NUMA平台上执行多线程二进制时收集剖析数据;触发生成模块,根据所收集的剖析数据来确定与所述程序中的负荷表达相关联的触发条件;服务例程模块,生成服务例程,以便在满足所述触发条件时,将数据从所述cc-NUMA平台的第一节点移动到所述cc-NUMA平台的第二节点;以及监测代码插入模块,生成监测指令,以便使运行时远程访问监测能够在执行期间判定是否满足所述触发条件,其中,所述二进制生成器模块还生成将所述程序重新编译成包含所述触发条件、所述服务例程和所述监测指令的线程数据亲和性优化可执行代码。
按照本发明的又一方面,提供一种用于线程数据亲和性优化的装置,包括:用于由编译器接收待编译为可执行程序的源代码的部件;用于将所述源代码转换成中间表示的部件;用于生成多线程可执行代码的部件;用于在高速缓存一致性非均匀存储访问cc-NUMA平台上执行所述多线程可执行代码,并在执行期间采用剖析工具通过抽样来收集剖析数据的部件;用于根据所收集的剖析数据来确定与负荷表达相关联的触发条件的部件;用于生成服务例程,以便在满足所述触发条件时,将数据从所述cc-NUMA平台的第一节点移动到所述cc-NUMA平台的第二节点的部件;用于生成监测指令,以便使运行时远程访问监测能够在执行期间判定是否满足所述触发条件的部件;以及用于通过将所述监测指令插入所述中间表示,来生成线程数据亲和性优化可执行代码的部件,其中,用于确定触发条件的部件包括用于确定在触发让步事件之前负荷表达进行远程访问的阈值次数的部件。
按照本发明的又一方面,提供一种由编译器执行的方法,包括:接收待编译的程序;执行所述程序,并在执行期间收集剖析数据;根据所收集的剖析数据来确定与所述程序中的负荷表达相关联的触发条件;生成监测指令,以便使远程访问监测能够判定是否满足所述触发条件;在满足所述触发条件时,执行服务例程以将数据从高速缓存一致性非均匀存储访问cc-NUMA平台的第一节点移动到所述cc-NUMA平台的第二节点;以及通过将所述监测指令插入已编译中间表示中以便重新编译,来生成线程数据亲和性优化可执行代码。
按照本发明的又一方面,提供一种用于线程数据亲和性优化的方法,包括:执行多线程的线程数据亲和性优化二进制的第一线程;通过计算在执行期间负荷表达要求远程访问的次数,来监测所述负荷表达;当所述负荷表达要求远程访问达到阈值次数时,触发让步事件;响应所述让步事件而使所述第一线程的执行让步于服务例程,其中所述服务例程将数据从高速缓存一致性非均匀存储访问cc-NUMA平台的第一节点迁移到进行所述第一线程的执行的节点;以及在终止所述服务例程的执行时恢复所述第一线程的执行。
附图说明
结合附图对本发明的实施例进行作为实例而不是限制的说明,附图中,相似的参考标号表示相似的元件,附图包括:
图1是框图,说明高速缓存一致性非均匀存储访问(cc-NUMA)处理平台;
图2是流程图,说明根据本发明的一个实施例的两遍(two-pass)编译;
图3是流程图,说明根据本发明的一个实施例的线程数据亲和性优化;
图4是流程图,说明根据本发明的一个实施例进行优化的程序线程数据亲和性的执行;
图5是框图,说明根据本发明的一个实施例的编译器体系结构;以及
图6是框图,说明根据本发明的一个实施例的示例计算系统。
具体实施方式
两遍编译和剖析工具
在一个实施例中,编译器实现两遍编译方案来进行线程数据亲和性优化。编译器是将用高级语言、如C++或FORTRAN编写的计算机程序转换为机器语言的软件。编译器一般将编程人员编写的高级代码转换为编译器内部所使用的中间表示(IR)。IR可以是编译器特定的,并且一些公知的实例其中还包括RTL表示、斯坦福大学中间格式(SUIF)表示以及Silicon Graphics Incorporated的MIPSpro Compiler的WHIRL中间表示。本发明的实施例不限于所使用的任何特定编译器或特定IR。
虽然在一个实施例中,以下描述的代码插入在IR级发生,但情况不一定是这样。此外,为了便于理解,一些实例可表示高级代码阶段上的代码插入。本发明的实施例可在编译过程的各种阶段上实现。
现在参照图2来描述这种两遍方案的一个实施例。在框202,编译器进行常规编译,并从编程人员提供给它的源代码中生成多线程可执行二进制。在框204,执行二进制(即程序),以及剖析(profiling)工具用来收集与程序的执行有关的信息。在一个实施例中,采用基于抽样的剖析工具,它以某种循环间隔对执行抽样,并制作与处理有关的记录。这类剖析工具可由编译器用来估计循环的静态未知的行程计数以及仅在执行时才可得到的其它信息。在一个实施例中,剖析工具收集与远程存储器负荷有关的信息以及其它这类存储器存取表达。
在框206,编译器开始两遍方案的第二遍。如上所述,两遍方案还具有除了线程数据亲和性优化之外的优点,因为剖析工具所收集的信息还可用于对于本申请的主题不重要的其它优化。例如,在框206,进行观察孔和过程间优化(IPO)。
在框208,并行化优化由编译器来进行。并行化优化识别可分为若干线程并且并行执行的循环或其它构造。它可由编程人员手动进行或者由编译器自动进行。在一个实施例中,进行并行化优化,以便支持作为公知的工业标准的OpenMP共享存储器编程模型。OpenMP规范版本2.5可在http://www.openmp.org上得到。
在框210,编译器进行各种其它高级优化,例如循环展开、循环交换、循环合并(fusion)、循环分布、循环分离(peel)、多版本和数据转换。在一个实施例中,这类优化包括自动循环并行化。在框212,进行标量优化,并生成优化可执行二进制。但是,框206、208和210可根据需要来调用框214,在其中进行线程数据亲和性优化。在一个实施例中,当对程序进行编译以便在多核处理器和基于超线程处理器的cc-NUMA多处理器系统上执行时,调用线程数据亲和性优化,以及被识别的热点循环(hot loop)由于不良的线程数据亲和性而具有较低性能。
线程数据亲和性优化
现在参照图3更详细地描述图2的框214的线程数据亲和性优化的一个实施例。在框302,编译器收集由剖析工具在图2的框204中所收集的远程负荷数据。在一个实施例中,编译器使用远程负荷数据(与各个表达以及与各表达相关联的远程访问有关的数据)来构建远程负荷表。远程负荷表是装载了远程负荷数据的表。因此,远程负荷表包含表达和等待时间。在一个实施例中,等待时间以时钟周期来表示。
在框304,编译器确定与各个单独表达相关联的平均远程等待时间。远程负荷表可包含与同一个表达有关的多段信息。通过确定平均远程等待时间,单个统计可与每个单独表达、如负荷关联。
在框306,对于各循环生成服务例程,服务例程被编程为移动数据以便影响线程数据亲和性。在一个实施例中,服务例程是循环特定的。但是,在另外的实施例中,可生成服务例程,以便对应于热点代码块(由于可用性能增益而经过线程数据亲和性优化的代码块)或者单独表达、如负荷。在一个实施例中,服务例程在执行时紧密地结合到程序中作为执行代码本身的一部分。在另一个实施例中,可在执行时将服务例程插入程序可用的库中。在一个实施例中,服务例程被编程为在发生让步(yield)事件时执行,其中的先前执行的线程在执行服务例程时恢复。
在框308,对于远程负荷表中的各表达来确定触发条件。在一个实施例中,触发条件基于与特定表达相关联的平均远程等待时间。触发条件可按照表达的远程访问数量、表达的远程访问的阈值等待时间、这些因素的结合来表示,或者以许多其它方式来表示。在一个实施例中,触发条件是远程负荷的数量以及代码块中的远程负荷的平均等待时间的函数。例如,在一个实施例中,编译器按照下式1所示的公式、对每个表达来确定触发条件:
式中,Ntrigger(P)表示远程负荷的数量,它的剖析平均等待时间大于(或等于)代码块P的最大平均等待时间的分数(0<分数≤1)。在一个实施例中,Ntrigger(P)用作调用包含计算了其触发的表达的循环的服务例程的触发条件。在上述公式中,N表示代码块P中的不同远程负荷(没有处于相同的远程存储器页中)的数量,Lmax-ave表示代码块P中的不同远程负荷的最大平均等待时间,以及Lave(RLEk)表示表达(即远程负荷RLEk)的平均等待时间。让步可由1(在第一远程访问时触发数据移动的进取方案中)直到N(仅在最后的远程访问其中之一时才触发数据移动的保守方案中)或者在1与N之间的任何位置上被触发(即满足触发条件)。
在框310,编译器生成将与各触发条件相关联的监测指令,并将监测指令插入IR代码作为优化过程的一部分。在一个实施例中,监测指令由硬件来支持,以及在监测指令执行时,它使硬件性能计数器(performance counter)集合能够跟踪被监测存储器负荷表达以及它们与这些被监测负荷表达相关联的物理存储位置,以便计算有多少访问是远程存储器负荷。在另一个实施例中,性能计数器还跟踪与被监测负荷表达相关联的等待时间。
服务例程、引起服务例程的执行的触发条件以及提供由触发条件所使用的数据的性能监测之间的交互可通过许多方式来建立。在一个实施例中,可对每个执行线程建立通道以便包含某种情况(scenario)的体系结构状态。某种情况是复合条件、如触发条件。在满足情况触发条件时,可触发让步事件以便执行服务例程。
图3所示的框的顺序仅为了便于理解;它们也可通过另一种顺序来进行。例如,可在生成服务例程之前来确定触发条件。此外,框306至310可对于远程负荷表中的每个表达依次进行。它们只是实例,说明图3只表示本发明的一些实施例。
在进行了图3的线程数据亲和性优化时,再次将线程数据亲和性优化的IR转换为可执行二进制。在一个实施例中,程序(如这个第二遍上进行编译的)包括影响数据迁移的触发条件、判定是否满足触发条件的监测代码以及在满足触发条件时进行数据迁移的服务例程。代码的这些部分由编译器在第二遍生成,并且不是在图2的框204执行的程序的一部分。
优化代码执行
现在参照图4来描述由编译器生成的、实现本发明的一个实施例的执行线程数据亲和性优化代码的一个实施例。在框402,执行新的可执行二进制,并且按照在图3的框310由编译器插入的监测指令来收集与远程访问及关联等待时间有关的性能信息。这种性能数据可包括远程数据访问频率、统计、等待时间、例如远程负荷的平均等待时间之类的等待时间统计以及其它这类信息。
在框404,对于是否满足被监测远程访问的触发条件、即是否满足情况的复合条件进行判定。触发条件可包括远程访问的数量、远程访问统计或频率(例如每秒50次远程访问)、负荷的阈值平均等待时间或者另外某种这样的机制。如果不满足触发条件,则处理在框402继续进行,其中执行优化二进制并收集远程访问和等待时间数据。
但是,如果在框304确定已经满足触发条件,则在框306,触发让步事件,以便使当前线程的执行让步于服务例程。服务例程进行数据移动,以便为被监测负荷表达和热点循环提供更好的线程数据亲和性。在一个实施例中,对其让步的服务例程与热点循环和触发条件明确关联。
服务例程可通过复制、移动或保持某种图像来移动数据。在服务例程完成执行之后,让步事件终止,并且在让步事件之前执行的线程恢复执行。
示例编译器体系结构
现在参照图5来描述实现本发明的一个实施例的示例编译器。为了便于理解,单独描述所述的模块和组件。编译器是软件程序,并且无需按照所述模块来划分。在具有两个节点的cc-NUMA环境中示出编译器20,第一节点由处理单元22和存储器24表示,以及第二节点由处理元件23和存储器25表示。为了简洁起见仅示出两个节点。对于由处理元件22执行的线程,存取存储器24的操作是本地访问,而存取存储器25的操作则是具有更多等待时间的远程访问。类似地,对于由处理元件23执行的线程,存取存储器25的操作是本地访问,而存取存储器24的操作则是远程访问。
剖析工具28与两个节点所表示的并行处理系统接口。在一个实施例中,剖析工具28是基于抽样的剖析工具,如上所述。编译器20从编程人员用来创建程序代码30的某种字处理应用程序接收程序代码30。然后,为了便于编译器20进行处理,将程序代码30转换为IR。将IR提供给二进制生成器38,它生成由处理元件执行的可执行二进制。
在程序执行时,剖析工具28收集远程访问和等待时间数据,并将该信息提供给触发生成模块32,以便在两遍编译的第二遍中用于线程数据亲和性优化。触发生成模块32生成触发条件。服务例程模块34生成服务例程,以便进行数据迁移并将它编程到程序可访问的库中。
监测代码插入模块36插入监测指令,以便采用性能计数器实现远程存储器存取监测。二进制生成模块38在第二遍编译时将所有所生成代码插入程序代码30,以便创建线程数据亲和性优化代码40。
示例计算机系统
在编译器的上下文中描述了本发明的各种实施例,其中的编译器生成代码,所述代码被插入由编译器编译的程序中。现在参照图6描述在其上可实现这种编译器的示例计算机系统(例如并行计算系统的节点)。计算机系统1800可用来进行本文所述操作的一个或多个。在备选实施例中,机器可包括网络路由器、网络交换机、网络桥接器、个人数字助理(PDA)、蜂窝电话、万维网设备或者能够执行指定由机器所采取的动作的指令序列的任何机器。
计算机系统1800包括经由总线1808相互进行通信的处理器1802、主存储器1804和静态存储器1806。计算机系统1800还可包括视频显示单元1810(例如液晶显示器(LCD)或阴极射线管(CRT))。计算机系统1800还包括字母数字输入设备1812(例如键盘)、光标控制设备1814(例如鼠标)、磁盘驱动器单元1816、信号生成装置1820(例如扬声器)以及网络接口设备1822。
磁盘驱动器单元1816包括机器可读介质1824,在其中存储体现以上所述的任一个或全部方法的指令集合(即软件)1826。软件1826还表示为完全或至少部分驻留在主存储器1804和/或处理器1802中。还可经由网络接口设备1822来传送或接收软件1826。为了便于进行本说明,术语“机器可读介质”应被认为包括能够对指令序列进行存储或编码的任何媒体,其中的指令序列由计算机执行,并使该计算机进行本发明的方法的任一种。因此,术语“机器可读介质”应被认为包括但不限于固态存储器、光盘和磁盘以及载波信号。
一般事项
在以上描述中,为了进行说明,阐述了许多具体细节。但是大家理解,即使没有这些具体细节也可以实施本发明的实施例。在其它情况下,没有详细说明公知的电路、结构和技术,以免影响对本说明书的理解。
本发明的实施例包括各种过程。这些过程可由硬件组件来完成,或者可包含在机器可执行指令中,这些指令可用于使采用这些指令编程的一个或多个处理器来完成这些过程。或者,这些过程可通过硬件和软件的结合来完成。
本发明的实施例可作为计算机程序产品来提供,它可包括其中存储了指令的机器可读介质,这些指令可用于对计算机(或另外的电子装置)进行编程以完成根据本发明的一个或多个实施例的过程。机器可读介质可包括但不限于软盘、光盘、光盘只读存储器(CD-ROM)以及磁光盘、只读存储器(ROM)、随机存取存储器(RAM)、可擦除可编程只读存储器(EPROM)、电可擦除可编程只读存储器(EEPROM)、磁卡或光卡、闪速存储器、或者适合于存储指令的其它类型的媒体/机器可读介质。此外,本发明的实施例还可作为计算机产品下载,其中所述程序可通过载波或其它传播介质中包含的数据信号、经由通信链路(例如调制解调器或网络连接)来从远程计算机传送到请求计算机。
虽然根据若干实施例描述了本发明,但本领域的技术人员会知道,本发明不限于所描述的实施例,而是可在所附权利要求书的精神和范围之内,经过修改和变更来实施。因此,本说明书被看作是解释性的而不是限制性的。
Claims (16)
1.一种用于线程数据亲和性优化的方法,包括:
由编译器接收待编译为可执行程序的源代码;
将所述源代码转换成中间表示;
生成多线程可执行代码;
在高速缓存一致性非均匀存储访问cc-NUMA平台上执行所述多线程可执行代码,并在执行期间采用剖析工具通过抽样来收集剖析数据;
根据所收集的剖析数据来确定与负荷表达相关联的触发条件;
生成服务例程,以便在满足所述触发条件时,将数据从所述cc-NUMA平台的第一节点移动到所述cc-NUMA平台的第二节点;
生成监测指令,以便使运行时远程访问监测能够在执行期间判定是否满足所述触发条件;以及
通过将所述监测指令插入所述中间表示,来生成线程数据亲和性优化可执行代码,
其中,确定触发条件的步骤包括确定在触发让步事件之前负荷表达进行远程访问的阈值次数。
2.如权利要求1所述的方法,其中,所述让步事件使执行从线程让步于所述服务例程。
3.如权利要求1所述的方法,其中,生成监测指令的步骤包括生成所述监测指令,以便在被执行时,使硬件性能计数器集合能够在执行所述负荷表达时计算多少访问是远程存储器负荷。
4.如权利要求1所述的方法,其中,所述剖析数据包括以下各项的列表:远程负荷表达、与所述远程负荷表达相关联的远程访问的数量以及与各远程访问相关联的等待时间。
5.如权利要求4所述的方法,其中,确定触发条件的步骤包括确定所述远程负荷表达的平均等待时间。
6.一种用于高速缓存一致性非均匀存储访问cc-NUMA平台的编译器,所述编译器包括:
二进制生成器模块,从程序中生成多线程可执行二进制;
剖析工具,在所述cc-NUMA平台上执行多线程二进制时收集剖析数据;
触发生成模块,根据所收集的剖析数据来确定与所述程序中的负荷表达相关联的触发条件;
服务例程模块,生成服务例程,以便在满足所述触发条件时,将数据从所述cc-NUMA平台的第一节点移动到所述cc-NUMA平台的第二节点;以及
监测代码插入模块,生成监测指令,以便使运行时远程访问监测能够在执行期间判定是否满足所述触发条件,
其中,所述二进制生成器模块还生成将所述程序重新编译成包含所述触发条件、所述服务例程和所述监测指令的线程数据亲和性优化可执行代码。
7.如权利要求6所述的编译器,其中,所述触发生成模块通过确定在触发让步事件之前负荷表达进行远程访问的阈值次数来确定所述触发条件。
8.如权利要求6所述的编译器,其中,所述监测代码插入模块生成所述监测指令,以便在被执行时,使硬件性能计数器集合能够在执行所述负荷表达时计算多少访问是远程存储器负荷。
9.如权利要求6所述的编译器,其中,所述剖析数据包括以下各项的列表:远程负荷表达、与所述远程负荷表达相关联的远程访问的数量以及与各远程访问相关联的等待时间。
10.如权利要求9所述的编译器,其中,所述触发生成模块通过确定所述远程负荷表达的平均等待时间来确定所述触发条件。
11.一种用于线程数据亲和性优化的装置,包括:
用于由编译器接收待编译为可执行程序的源代码的部件;
用于将所述源代码转换成中间表示的部件;
用于生成多线程可执行代码的部件;
用于在高速缓存一致性非均匀存储访问cc-NUMA平台上执行所述多线程可执行代码,并在执行期间采用剖析工具通过抽样来收集剖析数据的部件;
用于根据所收集的剖析数据来确定与负荷表达相关联的触发条件的部件;
用于生成服务例程,以便在满足所述触发条件时,将数据从所述cc-NUMA平台的第一节点移动到所述cc-NUMA平台的第二节点的部件;
用于生成监测指令,以便使运行时远程访问监测能够在执行期间判定是否满足所述触发条件的部件;以及
用于通过将所述监测指令插入所述中间表示,来生成线程数据亲和性优化可执行代码的部件,
其中,用于确定触发条件的部件包括用于确定在触发让步事件之前负荷表达进行远程访问的阈值次数的部件。
12.如权利要求11所述的装置,其中,用于生成监测指令的部件包括用于生成所述监测指令,以便在被执行时使硬件性能计数器集合能够在执行所述负荷表达时计算多少访问是远程存储器负荷的部件。
13.如权利要求11所述的装置,其中,所述剖析数据包括以下各项的列表:远程负荷表达、与所述远程负荷表达相关联的远程访问的数量以及与各远程访问相关联的等待时间。
14.一种由编译器执行的方法,包括:
接收待编译的程序;
执行所述程序,并在执行期间收集剖析数据;
根据所收集的剖析数据来确定与所述程序中的负荷表达相关联的触发条件;
生成监测指令,以便使远程访问监测能够判定是否满足所述触发条件;
在满足所述触发条件时,执行服务例程以将数据从高速缓存一致性非均匀存储访问cc-NUMA平台的第一节点移动到所述cc-NUMA平台的第二节点;以及
通过将所述监测指令插入已编译中间表示中以便重新编译,从而生成线程数据亲和性优化可执行代码。
15.如权利要求14所述的方法,其中,生成监测指令的步骤包括通过将所述触发条件与负荷表达相关联来进行线程数据亲和性优化,所述触发条件是所述负荷表达要求远程访问的阈值次数。
16.一种用于线程数据亲和性优化的方法,包括:
执行多线程的线程数据亲和性优化二进制的第一线程;
通过计算在执行期间负荷表达要求远程访问的次数,来监测所述负荷表达;
当所述负荷表达要求远程访问达到阈值次数时,触发让步事件;
响应所述让步事件而使所述第一线程的执行让步于服务例程,其中所述服务例程将数据从高速缓存一致性非均匀存储访问cc-NUMA平台的第一节点迁移到进行所述第一线程的执行的节点;以及
在终止所述服务例程的执行时恢复所述第一线程的执行。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US11/242,489 | 2005-09-30 | ||
US11/242,489 US8037465B2 (en) | 2005-09-30 | 2005-09-30 | Thread-data affinity optimization using compiler |
PCT/US2006/037576 WO2007041122A1 (en) | 2005-09-30 | 2006-08-26 | Thread-data affinity optimization using compiler |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101273332A CN101273332A (zh) | 2008-09-24 |
CN101273332B true CN101273332B (zh) | 2012-01-18 |
Family
ID=37652778
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2006800354616A Expired - Fee Related CN101273332B (zh) | 2005-09-30 | 2006-08-26 | 用于线程数据亲和性优化的方法和装置以及编译器 |
Country Status (4)
Country | Link |
---|---|
US (1) | US8037465B2 (zh) |
EP (1) | EP1949227A1 (zh) |
CN (1) | CN101273332B (zh) |
WO (1) | WO2007041122A1 (zh) |
Families Citing this family (55)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8375368B2 (en) * | 2006-06-20 | 2013-02-12 | Google Inc. | Systems and methods for profiling an application running on a parallel-processing computer system |
US8024708B2 (en) | 2006-06-20 | 2011-09-20 | Google Inc. | Systems and methods for debugging an application running on a parallel-processing computer system |
US8136104B2 (en) * | 2006-06-20 | 2012-03-13 | Google Inc. | Systems and methods for determining compute kernels for an application in a parallel-processing computer system |
US8136102B2 (en) | 2006-06-20 | 2012-03-13 | Google Inc. | Systems and methods for compiling an application for a parallel-processing computer system |
US7814486B2 (en) * | 2006-06-20 | 2010-10-12 | Google Inc. | Multi-thread runtime system |
US8381202B2 (en) * | 2006-06-20 | 2013-02-19 | Google Inc. | Runtime system for executing an application in a parallel-processing computer system |
US8261270B2 (en) | 2006-06-20 | 2012-09-04 | Google Inc. | Systems and methods for generating reference results using a parallel-processing computer system |
US8146066B2 (en) | 2006-06-20 | 2012-03-27 | Google Inc. | Systems and methods for caching compute kernels for an application running on a parallel-processing computer system |
US8108844B2 (en) | 2006-06-20 | 2012-01-31 | Google Inc. | Systems and methods for dynamically choosing a processing element for a compute kernel |
US8443348B2 (en) | 2006-06-20 | 2013-05-14 | Google Inc. | Application program interface of a parallel-processing computer system that supports multiple programming languages |
US8789028B2 (en) * | 2006-06-30 | 2014-07-22 | International Business Machines Corporation | Memory access monitoring |
US8171270B2 (en) * | 2006-12-29 | 2012-05-01 | Intel Corporation | Asynchronous control transfer |
US8291197B2 (en) | 2007-02-12 | 2012-10-16 | Oracle America, Inc. | Aggressive loop parallelization using speculative execution mechanisms |
US8621468B2 (en) * | 2007-04-26 | 2013-12-31 | Microsoft Corporation | Multi core optimizations on a binary using static and run time analysis |
US8332595B2 (en) * | 2008-02-19 | 2012-12-11 | Microsoft Corporation | Techniques for improving parallel scan operations |
US7493610B1 (en) | 2008-03-27 | 2009-02-17 | International Business Machines Corporation | Versioning optimization for dynamically-typed languages |
US8677338B2 (en) * | 2008-06-04 | 2014-03-18 | Intel Corporation | Data dependence testing for loop fusion with code replication, array contraction, and loop interchange |
US8122441B2 (en) * | 2008-06-24 | 2012-02-21 | International Business Machines Corporation | Sharing compiler optimizations in a multi-node system |
US8214814B2 (en) * | 2008-06-24 | 2012-07-03 | International Business Machines Corporation | Sharing compiler optimizations in a multi-node system |
US8341615B2 (en) * | 2008-07-11 | 2012-12-25 | International Business Machines Corporation | Single instruction multiple data (SIMD) code generation for parallel loops using versioning and scheduling |
CN102165428B (zh) * | 2008-08-13 | 2015-05-20 | 高通股份有限公司 | 软件应用性能增强 |
CN101425052B (zh) * | 2008-12-04 | 2010-06-09 | 中国科学院计算技术研究所 | 一种事务性内存的实现方法 |
US8789032B1 (en) * | 2009-02-27 | 2014-07-22 | Google Inc. | Feedback-directed inter-procedural optimization |
US8752008B2 (en) * | 2009-09-02 | 2014-06-10 | Advanced Micro Devices, Inc. | Lightweight service based dynamic binary rewriter framework |
US20110289485A1 (en) * | 2010-05-21 | 2011-11-24 | International Business Machines Corporation | Software Trace Collection and Analysis Utilizing Direct Interthread Communication On A Network On Chip |
US8725913B2 (en) * | 2010-09-17 | 2014-05-13 | Oracle International Corporation | Numa I/O framework |
US8869118B2 (en) * | 2011-06-01 | 2014-10-21 | International Business Machines Corporation | System aware performance counters |
CN102318275B (zh) * | 2011-08-02 | 2015-01-07 | 华为技术有限公司 | 基于cc-numa的报文处理方法、装置和系统 |
US8601473B1 (en) | 2011-08-10 | 2013-12-03 | Nutanix, Inc. | Architecture for managing I/O and storage for a virtualization environment |
US20130113809A1 (en) * | 2011-11-07 | 2013-05-09 | Nvidia Corporation | Technique for inter-procedural memory address space optimization in gpu computing compiler |
US9304811B2 (en) | 2012-06-29 | 2016-04-05 | Intel Corporation | Methods and systems to identify and migrate threads among system nodes based on system performance metrics |
US9411715B2 (en) * | 2012-12-12 | 2016-08-09 | Nvidia Corporation | System, method, and computer program product for optimizing the management of thread stack memory |
US8954546B2 (en) | 2013-01-25 | 2015-02-10 | Concurix Corporation | Tracing with a workload distributor |
US8924941B2 (en) | 2013-02-12 | 2014-12-30 | Concurix Corporation | Optimization analysis using similar frequencies |
US8997063B2 (en) | 2013-02-12 | 2015-03-31 | Concurix Corporation | Periodicity optimization in an automated tracing system |
US20130283281A1 (en) | 2013-02-12 | 2013-10-24 | Concurix Corporation | Deploying Trace Objectives using Cost Analyses |
US20130227529A1 (en) * | 2013-03-15 | 2013-08-29 | Concurix Corporation | Runtime Memory Settings Derived from Trace Data |
US9575874B2 (en) | 2013-04-20 | 2017-02-21 | Microsoft Technology Licensing, Llc | Error list and bug report analysis for configuring an application tracer |
US9665386B2 (en) | 2013-06-14 | 2017-05-30 | Nutanix, Inc. | Method for leveraging hypervisor functionality for maintaining application consistent snapshots in a virtualization environment |
US9740514B1 (en) | 2013-06-26 | 2017-08-22 | Nutanix, Inc. | Method and system to share data with snapshots in a virtualization environment |
US9292415B2 (en) | 2013-09-04 | 2016-03-22 | Microsoft Technology Licensing, Llc | Module specific tracing in a shared module environment |
CN105765528B (zh) | 2013-11-13 | 2019-09-24 | 微软技术许可有限责任公司 | 具有可配置原点定义的应用执行路径跟踪的方法、系统和介质 |
CN104956341A (zh) * | 2013-12-31 | 2015-09-30 | 华为技术有限公司 | 数据迁移方法、装置和处理器 |
CN104917784B (zh) * | 2014-03-10 | 2018-06-05 | 华为技术有限公司 | 一种数据迁移方法、装置及计算机系统 |
US11243707B2 (en) | 2014-03-12 | 2022-02-08 | Nutanix, Inc. | Method and system for implementing virtual machine images |
US9916161B2 (en) | 2015-06-25 | 2018-03-13 | Intel Corporation | Instruction and logic for tracking fetch performance bottlenecks |
US10649810B2 (en) * | 2015-12-28 | 2020-05-12 | Advanced Micro Devices, Inc. | Data driven scheduler on multiple computing cores |
KR101906823B1 (ko) * | 2016-03-07 | 2018-12-05 | 주식회사 럭스로보 | 멀티 모듈 컴파일 시스템 및 멀티 모듈 컴파일 방법, 그리고 컴파일러 프로그램을 갖는 컴퓨터 판독가능 저장매체 |
US10613947B2 (en) | 2016-06-09 | 2020-04-07 | Nutanix, Inc. | Saving and restoring storage devices using application-consistent snapshots |
US10824522B2 (en) | 2017-11-27 | 2020-11-03 | Nutanix, Inc. | Method, apparatus, and computer program product for generating consistent snapshots without quiescing applications |
US10649688B1 (en) * | 2018-11-01 | 2020-05-12 | Intel Corporation | Precise longitudinal monitoring of memory operations |
US10956133B2 (en) * | 2018-11-28 | 2021-03-23 | International Business Machines Corporation | Static optimization of production code for dynamic profiling |
JP2021005287A (ja) * | 2019-06-27 | 2021-01-14 | 富士通株式会社 | 情報処理装置及び演算プログラム |
US11113194B2 (en) * | 2019-09-04 | 2021-09-07 | Xilinx, Inc. | Producer-to-consumer active direct cache transfers |
WO2023147094A1 (en) | 2022-01-29 | 2023-08-03 | Diwale Sanket | Code compilation for dynamic peer-to-peer networked code execution |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2000036514A1 (en) * | 1998-12-15 | 2000-06-22 | International Business Machines Corporation | Non-uniform memory access (numa) data processing system that speculatively forwards a read request to a remote processing node |
CN1664804A (zh) * | 2004-03-04 | 2005-09-07 | 国际商业机器公司 | 减少远程存储器对多节点计算机中共享数据的访问的机构 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6961930B1 (en) * | 1999-09-22 | 2005-11-01 | Hewlett-Packard Development Company, L.P. | Efficient, transparent and flexible latency sampling |
US7487502B2 (en) * | 2003-02-19 | 2009-02-03 | Intel Corporation | Programmable event driven yield mechanism which may activate other threads |
US7386838B2 (en) * | 2003-04-03 | 2008-06-10 | International Business Machines Corporation | Method and apparatus for obtaining profile data for use in optimizing computer programming code |
US7181723B2 (en) * | 2003-05-27 | 2007-02-20 | Intel Corporation | Methods and apparatus for stride profiling a software application |
-
2005
- 2005-09-30 US US11/242,489 patent/US8037465B2/en not_active Expired - Fee Related
-
2006
- 2006-08-26 WO PCT/US2006/037576 patent/WO2007041122A1/en active Application Filing
- 2006-08-26 EP EP06825144A patent/EP1949227A1/en not_active Withdrawn
- 2006-08-26 CN CN2006800354616A patent/CN101273332B/zh not_active Expired - Fee Related
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2000036514A1 (en) * | 1998-12-15 | 2000-06-22 | International Business Machines Corporation | Non-uniform memory access (numa) data processing system that speculatively forwards a read request to a remote processing node |
CN1664804A (zh) * | 2004-03-04 | 2005-09-07 | 国际商业机器公司 | 减少远程存储器对多节点计算机中共享数据的访问的机构 |
Also Published As
Publication number | Publication date |
---|---|
CN101273332A (zh) | 2008-09-24 |
US20070079298A1 (en) | 2007-04-05 |
US8037465B2 (en) | 2011-10-11 |
WO2007041122A1 (en) | 2007-04-12 |
EP1949227A1 (en) | 2008-07-30 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101273332B (zh) | 用于线程数据亲和性优化的方法和装置以及编译器 | |
US8527959B2 (en) | Binary programmable method for application performance data collection | |
CN101957773A (zh) | 用于多轮次动态概要分析的方法及其系统 | |
US6446258B1 (en) | Interactive instruction scheduling and block ordering | |
CN100405294C (zh) | 在运行时期间优化计算机程序的系统与方法 | |
Adhianto et al. | Performance modeling of communication and computation in hybrid MPI and OpenMP applications | |
JP6331865B2 (ja) | プログラム最適化方法,プログラム最適化プログラム及びプログラム最適化装置 | |
Bailey et al. | Performance tuning of scientific applications | |
US7243195B2 (en) | Software managed cache optimization system and method for multi-processing systems | |
JP6432450B2 (ja) | 並列計算装置、コンパイル装置、並列処理方法、コンパイル方法、並列処理プログラムおよびコンパイルプログラム | |
CN101611380A (zh) | 推测性吞吐量计算 | |
US8468508B2 (en) | Parallelization of irregular reductions via parallel building and exploitation of conflict-free units of work at runtime | |
JP5966509B2 (ja) | プログラム、コード生成方法および情報処理装置 | |
JP2005190430A (ja) | 自己最適化演算装置 | |
US20060041875A1 (en) | Methods and apparatus for creating software basic block layouts | |
Bridges et al. | Revisiting the sequential programming model for the multicore era | |
CN113553057B (zh) | 一种针对不同架构的gpu进行并行计算的优化系统 | |
US20150067268A1 (en) | Optimizing memory bandwidth consumption using data splitting with software caching | |
US7730469B1 (en) | Method and system for code optimization | |
Steffan et al. | The potential for thread-level data speculation in tightly coupled multiprocessors. | |
JP2022140995A (ja) | 情報処理装置、コンパイルプログラムおよびコンパイル方法 | |
US7506329B1 (en) | Method and system for targeting profile gathering through real-time data | |
Hahn et al. | Automated Loop Fusion for Image Processing | |
Zhou | Performance Measurement, Analysis, and Optimization of GPU-accelerated Applications | |
Fleury et al. | Methodology and tools for system analysis of parallel pipelines |
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: 20120118 Termination date: 20130826 |