CN105242929B - 一种针对多核平台的二进制程序自动并行化的设计方法 - Google Patents
一种针对多核平台的二进制程序自动并行化的设计方法 Download PDFInfo
- Publication number
- CN105242929B CN105242929B CN201510657166.5A CN201510657166A CN105242929B CN 105242929 B CN105242929 B CN 105242929B CN 201510657166 A CN201510657166 A CN 201510657166A CN 105242929 B CN105242929 B CN 105242929B
- Authority
- CN
- China
- Prior art keywords
- cycle
- memory
- internal storage
- storage access
- parallelization
- 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.)
- Active
Links
Landscapes
- Devices For Executing Special Programs (AREA)
Abstract
本发明公开了一种针对多核平台的二进制程序自动并行化的设计方法,将多核平台中的二进制翻译成LLVM IR,然后先通过分析LLVM IR,建立控制流图来找出程序中的所有循环。静态分析循环的并行性,剔除不易并行的循环。在为循环在生成并行化代码前,对常见的内存访问依赖设定了简单的判据,加入了相应的内存地址重叠判断代码,降低了动态分析内存访问依赖引入的性能损失。然后将循环拆分到两个核上运行,重写LLVM IR生成并行化代码。该方法能够在无法获取二进制程序源码的情况下分析和提取二进制中的可并行性,并自动生成对应的可多核并行化的二进制程序,从而达到利用多核平台对原程序进行加速的效果。
Description
技术领域
本发明属于二进制自动并行化技术领域,具体涉及一种针对多核平台的二进制程序自动并行化的设计方法。
背景技术
自2004年以来,为了进一步提升计算性能,缓解能耗问题,微处理器的体系结构趋向于多核化发展,在嵌入式计算机领域,ARM近年来也推出了一系列的多核微处理器MPCore。虽然微处理器的多核化转变进一步提升了产品的性能,但由于传统的上层软件并不支持多核并行化,因此无法充分发挥多核处理器的性能潜力。另外,近年来由于数字图像处理技术的广泛应用,需要处理的图像数量增多、像素增大,从而使得图像处理算法的计算量越来越大,而一般来说图像处理算法的可并行度较高。因此现在亟需一种自动并行化的技术来解决这些问题。
1)基于源码的自动并行化
基于源码的自动并行化的一种方案是用可并行化的方式来编写源码,即使用一系列的API如Pthread来达到源码的可并行化。另一种方案用指导性并行编译方案如OpenMP,在源代码中加入专用的pragma,由此编译器可以自动将程序进行并行化。
基于源码的自动并行化算法比较成熟,比如使用控制流图(CFG)查找循环,使用定义使用链(def-use chain)查找标量依赖,还有一些内存依赖分析算法,如GCD(GreatestCommon Divisor)test、Banerjee test、Delta Array tests、the Single Index Variable(SIV)和Multiple Index Variable(MIV)tests等。但由于大部分的传统软件都是串行的,重写源码来达到可并行化的工作量太大,且对工程师在并行编程和算法上的要求比较高。
2)基于二进制的自动并行化
基于二进制的自动并行化具有适用于所有编译器和语言、不用改变软件的工具链、平台的可移植性、高经济可行性、适用于汇编语言程序等优点。但其缺点也很明显:从源码编译成二进制的过程往往会造成信息的丢失,易于分析的符号信息变成了寄存器操作,甚至编译器为了能够使生成的二进制文件执行速度更快,一些高级优化选项会改变源码的程序结构。由于寄存器信息静态无法得到,尤其是多分支下静态分析复杂,目前二进制级别的自动并行化多是基于运行时动态投机。
Second Write:自称是第一个做仿射循环静态二进制自动并行化的算法。缺点:适用范围较窄。该方法适用前提是通过前三步查找方法找到循环中的迭代子增量和地址变量的上下界:通过查找循环中的地址变量增量来得到迭代子增量;通过查找地址变量初始传入的值来得到地址变量的下界;通过查找循环跳转之前的比较指令中的地址变量来得到地址变量的上界。但是实际中满足前三步查找方法的循环有限。首先是其寻找迭代子增量的方法不支持迭代子增量从多级内存读出的情况;其次,是在查找仿射内存的地址变量的上下界时忽略了编译器的将源码编译成二进制时的优化情况,对于一些高度优化后的二进制翻译得到的循环适应度较低;另外,无法找到边界的基础上给出的构建reference group解决方法也存在问题,也没有描述循环中含有多分支时的处理方法。
发明内容
本发明的目的在于提供一种针对多核平台的二进制程序自动并行化的设计方法,该方法能够在无法获取二进制程序源码的情况下分析和提取二进制中的可并行性,并自动生成对应的可多核并行化二进制程序,从而达到利用多核平台对原程序进行加速的效果。
为达到上述目的,本发明采用的技术方案为:
一种针对多核平台的二进制程序自动并行化的设计方法,包括以下步骤:
步骤一,将多核平台中的二进制翻译成LLVM IR;
步骤二,分析LLVM IR,得到LLVM IR的控制流图CFG,通过控制流图CFG找到LLVMIR中函数内所有的循环;
步骤三,对找到的所有循环分别进行静态分析,剔除所有没有并行化可能的循环;
步骤四,基于剩余的所有具有并行化可能的循环来重写LLVM IR,判断所有具有并行化可能的循环中是否存在内存访问依赖,若存在内存访问依赖,则按原循环的流程执行,若不存在内存访问依赖,则对原循环进行并行化处理,生成并行化代码。
所述步骤三中剔除的没有并行化可能的循环包括以下几种:
第一类,含有多个不同循环退出条件的循环;
第二类,循环体内具体执行顺序会影响循环结束后程序运行,且该影响不能被消除的循环;
第三类,含有非迭代子类型的标量依赖的循环,以及含有迭代子类型的标量依赖,且控制该标量迭代的参数不恒定的循环;
第四类,含有多分支的循环中不同分支迭代子更新情况不一致的循环;
第五类,含有多分支的循环中有分支间标量依赖的循环;
第六类,循环退出条件不满足以下条件的循环:循环退出的比较指令的一个参数是和某迭代子相关的线性函数,且另一个参数是和任何迭代子都不相关的循环内恒定量。
所述步骤三在剔除所有没有并行化可能的循环的同时,也获得以下两个参数:
1).循环中所有迭代子的信息;
2).循环的具体执行次数计算式;
获得的上述两个参数将用于在步骤四中判断所有具有并行化可能的循环中是否存在内存访问依赖。
当循环内部只含有内存读取操作或者只含有内存写入操作时不存在内存访问依赖,当循环中同时包含对内存地址的读写操作时则需判断是否存在内存访问依赖从而影响循环并行性。
所述步骤四中在判断是否存在内存访问依赖时,简化成以下两种情况:
第一种情况,若内存读取和内存写入的不是同一个数组,则其地址范围没有交集,即内存读取和内存写入地址的上下边界没有交集,表明不存在内存访问依赖;
第二种情况,若内存读取和内存写入的地址上下边界有交集,则访问的是同一个数组,分析内存读取和内存写入操作的内存是否是一个数组中没有交集的两段内存,若是,则不存在内存访问依赖,若不是,则存在内存访问依赖。
所述步骤四中判断是否存在内存访问依赖的具体判断方法如下:
将内存读取load和内存写入store操作的内存地址简化为
load:cini+di
store:cjnj+dj
其中0≤ni、nj<N,N为循环次数,ni、nj分别是第i次、第j次循环迭代子的值;ci、cj分别是迭代子ni、nj的倍数,是本层循环计算内存地址与迭代子相关的常量;di、dj分别是第i次、第j次子循环的地址偏移和父循环中计算地址偏移与迭代子无关的量之和;
首先代入ni、nj和di、dj的最大值来计算load和store的操作内存的上边界,代入ni、nj和di、dj的最小值来计算load和store的操作内存的下边界,若load和store的操作内存不重合,表明不存在内存访问依赖;
若load和store的操作内存重合,且有ci=cj,则计算e=max(|di-dj|),若e<ci,则不存在内存访问依赖,若e>ci,则遍历ni、nj来判断是否存在内存访问依赖。
所述步骤四中生成并行化代码是指将原本在单核串行N次执行完毕的循环拆分到两个核上运行,一个CPU运行原循环的[0到N/2)次循环,另一个CPU运行原循环的(N/2到N]次循环。
相对于现有技术,本发明的有益效果为:
本发明提供的针对多核平台的二进制程序自动并行化的设计方法,适用于在多核平台中无法获取某二进制文件对应源代码的前提下,通过二进制级别的翻译和分析技术,对该二进制文件进行并行化分析,若可以多核并行执行,则自动生成相应的并行化执行二进制程序,从而达到充分利用多核平台对程序进行加速的效果。本发明在解决二进制层面的自动并行化分析时,不仅考虑到了Second Write能够分析的简单案例,同时充分考虑了编译器在生成二进制时引入的高度优化特点,提供了一套完备性强且应用范围更广的二进制自动并行化分析和实现方法。该方法具有以下优点:
首先,该方法充分考虑到编译器在生成二进制时引入的高度优化算法,支持多分支,多迭代子情况下无直接边界,含有多个循环退出基本块的循环并行性检测和分析。能够在保证算法完备性的基础上,最大化的扩展了算法能够支持的循环类型。
其次,该方法对于静态分析时因为寄存器值信息缺失而无法确定并行性的,在生成并行化代码前加入相应的内存地址重叠判断代码,程序在运行到循环前通过计算,判断后续循环是并行执行还是串行执行。理论上而言,在执行到循环入口时,可并行化的循环内部所有的内存访问地址集合都可以得到,通过判断两个内存集合是否有交集就可以确定是否可并行化。然而这种判断虽然非常精确但是引入的性能损失也是非常大的,本发明针对常见的循环内存访问情况设定了几个简单的判断依据,大大降低了动态内存地址判断引入的性能损失。
附图说明
图1为本发明提供的针对多核平台的二进制程序自动并行化的设计方法的流程图;
图2为CFG中含有多个基本退出块但只有一个循环退出条件的示意图;
图3为判断循环体内的具体执行顺序是否会影响并行性的流程图;
图4为循环中的标量依赖是迭代子类型的示意图;
图5为判断含标量依赖循环的并行性的流程图;
图6为循环中load和store操作的对象不是同一个数组的示意图;
图7为循环中load和store操作对象为同一个数组但两者的操作内存没有交集的示意图。
具体实施方式
下面结合附图对本发明做进一步详细说明。
本发明公开了一种在无法获取二进制程序源码的情况下分析和提取二进制中的可并行性,并自动生成对应的可多核并行化的二进制程序,从而达到利用多核平台对原程序进行加速的方法。该方法的前提是将二进制翻译成LLVM IR(底层虚拟机中间语言),然后先通过分析LLVM IR,建立控制流图(CFG)来找出程序中的所有循环。静态分析循环的并行性,充分考虑到编译器在生成二进制时引入的高度优化算法,对多分支循环、含有多迭代子情况下无直接边界的循环、含有迭代子类型的标量依赖的循环、含有多循环退出基本块的循环进行并行性检测和分析,剔除不易并行的循环。在为循环在生成并行化代码前,对常见的内存访问依赖设定了简单的判据,加入了相应的内存地址重叠判断代码,降低了动态分析内存访问依赖引入的性能损失。然后将循环拆分到两个核上运行,重写LLVM IR生成并行化代码。
该方法在对循环的并行性进行静态分析时,在分析定义使用(def-use)链的基础上,充分考虑到编译器在生成二进制时引入的高度优化算法,加入多分支循环多迭代子更新情况是否一致的判断、循环中的标量依赖是否是迭代子类型的判断、含多循环基本退出块退出条件是否一致的判断和多分支循环中多分支间的标量依赖的判断。从而在保证算法完备性的基础上,最大化的扩展了算法能够支持的循环类型。
同时,该方法在生成并行化代码前,为动态判断循环的内存访问依赖加入了相应的内存地址重叠判断代码,对常见的循环内存访问情况设定了简单的判断依据即:判断内存读取操作(load)和内存写入操作(store)两者的操作对象是否为同一个数组;判断两者的操作对象是否为同一个数组的没有交集的两部分内存。根据引入的判据可以大大降低对循环动态分析内存访问依赖所引入的性能损失。
该方法的前提是将多核平台中的二进制翻译成LLVM IR。然后通过查找并分析LLVM IR中函数的循环,得到可以并行的循环的相关信息。最终基于双核生成并行化代码即将原本在单核串行N次执行完毕的循环拆分到两个核上运行,CPU0运行原循环的[0,N/2)次循环,CPU1运行原循环的(N/2到N]次循环。具体操作流程如图1所示。
主要分为以下几个步骤:
步骤一:分析LLVM IR,通过控制流图(CFG)找到函数内所有的循环。
步骤二:对找到的循环进行静态分析,剔除没有并行化可能的循环。
其中以下几类循环无法并行化:
第一类:含有多个不同循环退出条件的循环。
含有多个不同退出条件的循环意味着循环除了正常达到循环边界退出以外,也有可能在某次循环执行中跳出整个循环,这类循环往往很难并行化,所以本发明对这类循环也不予分析。这里值得注意的是,多个不同的循环退出条件并不等同于CFG中有多个退出基本块,因为很多编译器对含有分支的循环进行优化时,为了减少跳转节省运行时间,往往会使用“空间换时间”的优化方法,如图2所示:在控制流图A中如果block5内部代码不多,编译器在生成汇编时为了减少跳转次数会将block5的代码融合到block3和block4中,这样循环将有两个退出基本块block3’和block4’,从而优化得到控制流图B,但是其实退出条件仍是一个,所以如果循环中有多个退出基本块时需要判断退出条件是否一致,若不一致,则认为其不能并行,若一致,则认为其有可并行的可能。
第二类:循环体内具体执行顺序会影响循环结束后程序运行的循环。
判断这类循环的方法如下:
首先通过定义使用(def-use)链得到循环体内被赋值的变量,然后分析这些变量有没有在循环结束后的所有函数路径中被直接使用到。如果在跳出循环后的基本块中对循环内的定义的变量进行了赋值,则对并行性无影响;如果变量被直接使用到,则判断循环中对该变量赋值的基本块是否循环内每条分支都会含有。若是,则只需要在循环结束后用最后一次循环里面的值对其进行重新赋值即可,若不是,则该循环无法并行。判断流程如图3所示。
第三类:含有非迭代子类型的标量依赖(scalar dependence)的循环。
循环中的标量依赖是指某次循环执行中用到的变量的值依赖于前面循环的执行结果。检测标量依赖方法是分析定义使用(def-use)链,在一次循环中先于赋值而被使用的标量就是循环依赖标量。一般而言有标量依赖的循环是不能直接并行化的,然而如果标量依赖是简单的变量自增关系(也称为迭代子类型),其每次循环中使用的值和定义的值有固定的增量关系,如图4中A,那么第n次循环中对应值就可以直接算出(如图4中B所示),而不需要等待前面循环结束才可以开始第n次以后的循环。
因此在检测标量依赖时还需要判断标量依赖是不是迭代子类型的:若不是,则会影响程序并行;若是,还需要判断该标量加减的另一个参数是否在循环中恒定。如果该参数不恒定,则无法计算出第n次循环对应的值,无法并行;如果恒定,则并不影响程序并行。判断流程如图5所示。
第四类:含有多分支的循环中不同分支迭代子更新情况不一致的循环。
因为在多分支的情况下是无法知道每次循环执行的是哪个分支,如果分支之间迭代子情况不一,则无法计算出第n次循环时每个迭代子的具体情况,所以含有多分支时,每个分支含有的迭代子情况必须一致,否则无法并行化。具体检测时参考是否某个迭代子更新所在基本块是否属于循环内所有分支即可。
第五类:含有多分支的循环中有分支间标量依赖的循环。
分支间标量依赖是指在某个分支独有的基本块内部的值和另一个分支中独有基本块内部的值之间有依赖,因为在多分支时无法确定分支的执行顺序,所以一旦有分支间标量依赖则该循环无法并行化。判断多分支依赖可以由分析定义使用链得到。
第六类:循环退出条件不满足下列条件的循环:循环退出的比较指令的一个参数是和某迭代子相关的线性函数,且另一个参数是和任何迭代子都不相关的循环内恒定量。
由于只有满足上述条件,才能根据迭代子初值即可得到循环的具体执行次数,这是后续内存边界判断和并行化后计算其他迭代子在后半部循环中初始的基础。因此认为不满足上述条件的循环不具有可并行性。
步骤二在删除实际上无法并行化的循环同时,也获得以下两个参数:
1).循环中所有迭代子的信息。
2).循环的具体执行次数计算式。
上述两个参数在步骤三判断循环中的内存访问依赖时会被用到。
步骤三:重写LLVM IR,判断循环中的内存访问依赖,生成并行化代码。
经过步骤二的静态分析,剔除了不能并行的循环,则影响循环并行性的因素只剩下了内存访问依赖。首先要注意的是循环内部只含有内存读取(load)操作或者只含有内存写入(store)操作时是不存在内存访问依赖的,因此不会影响循环并行性。只有循环中同时包含对内存地址的读写操作时才需要判断是否存在内存访问依赖从而影响循环并行性。
内存访问依赖往往需要知道两个内存的地址范围是否重合,而地址范围计算过程会涉及到寄存器,静态分析由于不知道寄存器的值,所以单纯的静态分析无法完美解决这个问题,往往只有在动态运行时才能最终判断两个地址是否重合。事实上如果不考虑性能损失,在运行时是可以提前遍历得到循环内所有访存地址的集合,然后通过判断集合是否重叠就可以得到循环中是否会有并行化依赖,然而这种做法引入的性能损失往往很高。但是对于无法计算内存地址上下边界的情况,这样做是必须的。
本发明在重写LLVM IR时,为了降低动态内存地址判断引入的性能损失,给出常见的内存地址是迭代因子线性函数时的地址范围判断方法,将内存地址范围重叠判断简化为两种情况:
第一种情况,如果load和store的不是同一个数组,那么其地址范围肯定没有交集,对应就是load和store地址的上下边界没有交集,表明不存在内存访问依赖,如图6所示。
第二种情况,如果load和store的地址上下边界有交集,则一定访问的是同一个数组。那么就需要分析load和store操作的内存是否是一个数组中没有交集的两段内存,若是,则不存在内存访问依赖,如图7所示,若不是,则存在内存访问依赖。
具体判断方法如下:
将load和store操作的内存地址简化为
load:cini+di
store:cjnj+dj
其中0≤ni、nj<N,N为循环次数,ci、cj是和子循环无关的定值,di、dj是和子循环有关的值,是可以计算极值的。其中ni、nj分别是第i次、第j次循环迭代子的值;ci、cj分别是迭代子ni、nj的倍数,是本层循环计算内存地址与迭代子相关的常量;di、dj分别是第i次、第j次子循环的地址偏移和父循环中计算地址偏移与迭代子无关的量之和。
首先代入ni、nj和di、dj的最大值来计算load和store的操作内存的上边界,代入ni、nj和di、dj的最小值来计算load和store的操作内存的下边界,若load和store的操作内存不重合,表明不存在内存访问依赖,因此不影响循环并行性。
如果重合,且有ci=cj=c,那么计算e=max(|di-dj|),如果e<c,则这两类地址不可能相同,如果e>c,则只能遍历ni、nj来判断这两类地址是否重合了。
动态判断完循环的内存访问依赖之后,根据上述的静态和动态分析,可以得到具有可并行性的循环的相关信息,可以依据这些信息在重写IR时基于双核将循环拆分为两部分,生成并行化代码。
上述结合附图进行说明的具体内容只是示意性的,并非构成对本发明保护范围的限制,所属领域的研究人员在本发明提供的针对多核平台的二进制程序自动并行化的设计方法的基础上,不需付出创造性劳动而做出的各种修改或变形仍在本发明的保护范围内。
Claims (6)
1.一种针对多核平台的二进制程序自动并行化的设计方法,其特征在于,包括以下步骤:
步骤一,将多核平台中的二进制程序翻译成LLVM IR;
步骤二,分析LLVM IR,得到LLVM IR的控制流图CFG,通过控制流图CFG找到LLVM IR中函数内所有的循环;
步骤三,对找到的所有循环分别进行静态分析,剔除所有没有并行化可能的循环;其中,剔除的没有并行化可能的循环包括以下几种:
第一类,含有多个不同循环退出条件的循环;
第二类,循环体内具体执行顺序会影响循环结束后程序运行,且该影响不能被消除的循环;
第三类,含有非迭代子类型的标量依赖的循环,以及含有迭代子类型的标量依赖,且控制该标量迭代的参数不恒定的循环;
第四类,含有多分支的循环中不同分支迭代子更新情况不一致的循环;
第五类,含有多分支的循环中有分支间标量依赖的循环;
第六类,循环退出条件不满足以下条件的循环:循环退出的比较指令的一个参数是和某迭代子相关的线性函数,且另一个参数是和任何迭代子都不相关的循环内恒定量;
步骤四,基于剩余的所有具有并行化可能的循环来重写LLVM IR,判断所有具有并行化可能的循环中是否存在内存访问依赖,若存在内存访问依赖,则按原循环的流程执行,若不存在内存访问依赖,则对原循环进行并行化处理,生成并行化代码。
2.根据权利要求1所述的针对多核平台的二进制程序自动并行化的设计方法,其特征在于,所述步骤三在剔除所有没有并行化可能的循环的同时,也获得以下两个参数:
1).循环中所有迭代子的信息;
2).循环的具体执行次数计算式;
获得的上述两个参数将用于在步骤四中判断所有具有并行化可能的循环中是否存在内存访问依赖。
3.根据权利要求1所述的针对多核平台的二进制程序自动并行化的设计方法,其特征在于,当循环内部只含有内存读取操作或者只含有内存写入操作时不存在内存访问依赖,当循环中同时包含对内存地址的读写操作时则需判断是否存在内存访问依赖从而影响循环并行性。
4.根据权利要求1所述的针对多核平台的二进制程序自动并行化的设计方法,其特征在于,所述步骤四中在判断是否存在内存访问依赖时,简化成以下两种情况:
第一种情况,若内存读取和内存写入的不是同一个数组,则其地址范围没有交集,即内存读取和内存写入地址的上下边界没有交集,表明不存在内存访问依赖;
第二种情况,若内存读取和内存写入的地址上下边界有交集,则访问的是同一个数组,分析内存读取和内存写入操作的内存是否是一个数组中没有交集的两段内存,若是,则不存在内存访问依赖,若不是,则存在内存访问依赖。
5.根据权利要求1所述的针对多核平台的二进制程序自动并行化的设计方法,其特征在于,所述步骤四中判断是否存在内存访问依赖的具体判断方法如下:
将内存读取load和内存写入store操作的内存地址简化为
load:cini+di
store:cjnj+dj
其中0≤ni、nj<N,N为循环次数,ni、nj分别是第i次、第j次循环迭代子的值;ci、cj分别是迭代子ni、nj的倍数,是本层循环计算内存地址与迭代子相关的常量;di、dj分别是第i次、第j次子循环的地址偏移和父循环中计算地址偏移与迭代子无关的量之和;
首先代入ni、nj和di、dj的最大值来计算load和store的操作内存的上边界,代入ni、nj和di、dj的最小值来计算load和store的操作内存的下边界,若load和store的操作内存不重合,表明不存在内存访问依赖;
若load和store的操作内存重合,且有ci=cj,则计算e=max(|di-dj|),若e<ci,则不存在内存访问依赖,若e>ci,则遍历ni、nj来判断是否存在内存访问依赖。
6.根据权利要求1所述的针对多核平台的二进制程序自动并行化的设计方法,其特征在于,所述步骤四中生成并行化代码是指将原本在单核串行N次执行完毕的循环拆分到两个核上运行,一个CPU运行原循环的[0到N/2)次循环,另一个CPU运行原循环的(N/2到N]次循环。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510657166.5A CN105242929B (zh) | 2015-10-13 | 2015-10-13 | 一种针对多核平台的二进制程序自动并行化的设计方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510657166.5A CN105242929B (zh) | 2015-10-13 | 2015-10-13 | 一种针对多核平台的二进制程序自动并行化的设计方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105242929A CN105242929A (zh) | 2016-01-13 |
CN105242929B true CN105242929B (zh) | 2018-07-17 |
Family
ID=55040588
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510657166.5A Active CN105242929B (zh) | 2015-10-13 | 2015-10-13 | 一种针对多核平台的二进制程序自动并行化的设计方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105242929B (zh) |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108197027B (zh) * | 2017-12-29 | 2021-07-16 | 广州景派科技有限公司 | 软件性能优化方法、可存储介质、计算机、计算机程序 |
CN109522126B (zh) * | 2018-11-19 | 2020-04-24 | 中国人民解放军战略支援部队信息工程大学 | 面向共享内存多核结构中线程级并行的数据优化方法及装置 |
CN110187988B (zh) * | 2019-06-06 | 2021-08-13 | 中国科学技术大学 | 适用于虚函数和函数指针的静态函数调用图构建方法 |
CN112445481B (zh) * | 2019-08-27 | 2022-07-12 | 无锡江南计算技术研究所 | 低功耗的寄存器分配编译优化方法 |
CN110795106B (zh) * | 2019-10-30 | 2022-10-04 | 中国人民解放军战略支援部队信息工程大学 | 程序向量化过程中动静结合的内存别名分析处理方法及装置 |
CN116841622B (zh) * | 2023-09-01 | 2023-11-24 | 上海燧原智能科技有限公司 | 一种地址自增访存指令的生成方法、装置、设备及介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102165428A (zh) * | 2008-08-13 | 2011-08-24 | 特兰斯塞拉公司 | 软件应用性能增强 |
US8230395B1 (en) * | 2004-09-20 | 2012-07-24 | The Mathworks, Inc. | Memory mapping for single and multi-processing implementations of code generated from a block diagram model |
CN104536898A (zh) * | 2015-01-19 | 2015-04-22 | 浙江大学 | C程序并行区域的检测方法 |
-
2015
- 2015-10-13 CN CN201510657166.5A patent/CN105242929B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8230395B1 (en) * | 2004-09-20 | 2012-07-24 | The Mathworks, Inc. | Memory mapping for single and multi-processing implementations of code generated from a block diagram model |
CN102165428A (zh) * | 2008-08-13 | 2011-08-24 | 特兰斯塞拉公司 | 软件应用性能增强 |
CN104536898A (zh) * | 2015-01-19 | 2015-04-22 | 浙江大学 | C程序并行区域的检测方法 |
Non-Patent Citations (1)
Title |
---|
二进制流模式提取在CPU/GPU 下的实现框架;章一超等;《计算机应用与软件》;20120131;第113-115页 * |
Also Published As
Publication number | Publication date |
---|---|
CN105242929A (zh) | 2016-01-13 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105242929B (zh) | 一种针对多核平台的二进制程序自动并行化的设计方法 | |
Ainsworth et al. | Software prefetching for indirect memory accesses | |
Chen et al. | PORPLE: An extensible optimizer for portable data placement on GPU | |
Mehrara et al. | Dynamic parallelization of JavaScript applications using an ultra-lightweight speculation mechanism | |
Fauzia et al. | Characterizing and enhancing global memory data coalescing on GPUs | |
CN105224452B (zh) | 一种针对科学计算程序静态分析性能的预测代价优化方法 | |
US20020144244A1 (en) | Compile-time memory coalescing for dynamic arrays | |
CN116126333A (zh) | 自动化编译的系统和方法 | |
Rauchwerger | Run-time parallelization: Its time has come | |
Reddy et al. | Reduction drawing: Language constructs and polyhedral compilation for reductions on gpu | |
US11507348B2 (en) | Method and apparatus for generating chip-based computing function, device, and storage medium | |
CN109408867B (zh) | 一种基于mic协处理器的显式r-k时间推进加速方法 | |
Chen et al. | Optimizing data placement on GPU memory: A portable approach | |
WO2000038058A2 (en) | Method and system for identifying locations to move portions of the computer program | |
Wu et al. | Bandwidth-aware loop tiling for dma-supported scratchpad memory | |
Andrade et al. | Accurate prediction of the behavior of multithreaded applications in shared caches | |
Connors et al. | Automatically selecting profitable thread block sizes for accelerated kernels | |
Popov et al. | Piecewise holistic autotuning of compiler and runtime parameters | |
CN105260166B (zh) | 一种应用于机器学习线程划分的手工样本集生成方法 | |
RU2411569C2 (ru) | Способ автоматического распараллеливания программ | |
Li et al. | Pruning strategies in adaptive off-line tuning for optimized composition of components on heterogeneous systems | |
Tian et al. | Optimizing gpu register usage: Extensions to openacc and compiler optimizations | |
RU2206119C2 (ru) | Способ получения объектного кода | |
Kumar et al. | An approach for compiler optimization to exploit instruction level parallelism | |
Ştirb et al. | Improving performance and energy consumption with loop fusion optimization and parallelization |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |