CN112559032B - 基于循环段的众核程序重构方法 - Google Patents
基于循环段的众核程序重构方法 Download PDFInfo
- Publication number
- CN112559032B CN112559032B CN201910910103.4A CN201910910103A CN112559032B CN 112559032 B CN112559032 B CN 112559032B CN 201910910103 A CN201910910103 A CN 201910910103A CN 112559032 B CN112559032 B CN 112559032B
- Authority
- CN
- China
- Prior art keywords
- segment
- circulation
- cycle
- sub
- core
- 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
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
- G06F8/72—Code refactoring
-
- 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
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
- G06F8/76—Adapting program code to run in a different environment; Porting
-
- 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/30003—Arrangements for executing specific machine instructions
- G06F9/3005—Arrangements for executing specific machine instructions to perform operations for flow control
- G06F9/30065—Loop control instructions; iterative instructions, e.g. LOOP, REPEAT
-
- 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/44—Arrangements for executing specific programs
- G06F9/448—Execution paradigms, e.g. implementations of programming paradigms
- G06F9/4482—Procedural
- G06F9/4484—Executing subprograms
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Abstract
本发明公开一种基于循环段的众核程序重构方法,包括基于循环段拆分的重构算法和基于循环段合并的重构算法,其中,所述基于循环段拆分的重构算法包括基于主从协同任务的循环段拆分和基于空间压缩的循环段拆分,所述基于循环段合并的重构算法包括基于相似结构的循环段合并和基于增加循环量的循环段合并。本发明根据异构系统的结构特点和性能指标,优化循环段的层次结构和顺序,充分发挥系统的性能优势,从而最大程序提高应用软件的计算性能。
Description
技术领域
本发明涉及一种基于循环段的众核程序重构方法,属于计算机技术领域。
背景技术
近十年异构众核技术迅速发展,为了充分利用各种异构系统的性能优势,各应用领域应用软件也发生了相应的结构变化。
在高性能科学计算中,数值求解过程和通信过程是核心计算的重要组成,其中数值求解过程包含了条件判断过程和大量的数学基本运算,条件判断过程的位置、数学运算的循环层次和循环结构对计算性能影响较大。为了提高应用软件核心求解过程中的计算性能,最大限度发挥异构众核系统性能优势,需要根据异构众核系统的结构特点,对应用软件核心计算的程序结构做重构处理。
目前,大多数应用软件为了在异构众核系统上提高计算效率,基本采用直接在源程序添加编译指示的方式,该方式操作方便,但是多数应用软件不能获得好的加速性能,有些甚至出现倒加速效果或者内存异常等错误现象。
发明内容
本发明的目的是提供一种基于循环段的众核程序重构方法,该基于循环段的众核程序重构方法根据异构系统的结构特点和性能指标,优化循环段的层次结构和顺序,充分发挥系统的性能优势,从而最大程序提高应用软件的计算性能。
为达到上述目的,本发明采用的技术方案是:一种基于循环段的众核程序重构方法,包括基于循环段拆分的重构方法和基于循环段合并的重构方法,其中,所述基于循环段拆分的重构方法包括基于主从协同任务的循环段拆分和基于空间压缩的循环段拆分,所述基于循环段合并的重构方法包括基于相似结构的循环段合并和基于增加循环量的循环段合并;
基于主从协同任务的循环段拆分的众核程序重构方法包括以下步骤:
S11、利用性能分析工具或打印输出信息,分析程序运行时的多个时间热点函数,找出各个时间热点函数中最耗时循环段;
S12、对于S11中找出的各个循环段,若同时满足条件1:即循环边界起始条件为1,终止条件为end和条件2:即循环段内计算根据循环控制变量的不同取值分别调用循环段内相互独立的子任务sub_a、sub_b、sub_c,则执行S13;若不满足条件2,则循环段任务由从核完成,执行S15;
S13、对各子任务特性和相关性进行分析,若子任务sub_a、sub_c的计算量小、输出量大、通信量大,而子任务sub_b计算量大、输出信息少、通信量少,同时3个子任务不具有相关性,则将循环段按照各个子任务的循环边界取值范围进行拆分,拆分为3个新的循环段;若子任务相互之间具有相关性,循环段不进行拆分,循环段任务由从核完成,执行S15;
S14、针对S13中新拆分的循环段,含子任务sub_a、sub_c的循环段直接由主核完成;含子任务sub_b循环段由从核完成;
S15、针对从核完成任务的循环段,直接使用编译指示进行众核加速并行。
基于空间压缩的循环段拆分的众核程序重构方法包括以下步骤:
S21、利用性能分析工具或打印输出信息,分析程序运行时的多个时间热点函数,找出各个时间热点函数中最耗时循环段;
S22、对于S21中找出的各个循环段,若同时满足条件1:即循环边界起始条件为begin,终止条件为end和条件2:即循环段内依次调用多个子任务sub_A1(arrA1,arrB1,arrC1)、sub_A2(arrA2,arrB2,arrC2)、sub_A3(arrA3,arrB3,arrC3),则执行S23;若不满足条件2,则循环段任务由从核完成,执行S25;
S23、对循环段内各个子任务的数据变量进行数据相关性分析,若子任务数据变量相互具有数据依赖性,则循环段任务由从核完成,执行S25;若其中某子任务与其它子任务不存在数据相关性,且该子任务的数据变量规模大,超过从核的数据存储空间上限,则对循环段进行拆分,使数据变量规模大的子任务独立成为新的循环段;
S24、针对S23中拆分出来的数据变量规模大的新循环段,分析子任务中的数据变量,对子任务及相关的数据变量进行拆分,子任务拆分之后形成多个子孙任务,同时将循环段的循环条件内移到拆分后的子孙任务,各个子孙任务循环段和S23中拆分出来的数据变量规模小的循环段均由从核完成;
S25、针对从核完成任务的循环段,直接使用编译指示进行众核加速并行。
基于相似结构的循环段合并的众核程序重构方法包括以下步骤:
S31、利用性能分析工具或打印输出信息,分析程序运行时的多个时间热点函数,找出各个时间热点函数中最耗时循环段;
S32、若某时间热点函数中有多个循环段满足如下条件:循环边界相同,起始条件均为begin,终止条件均为end,则多个循环段分别调用子任务sub_A3_B1、sub_A3_B2、sub_A3_B3,执行S33;若多个循环段的循环边界不相同,多个循环段均由从核完成,执行S34;
S33、分析S32中各个循环段中的子任务计算变量的数据规模,若其中某些子任务的计算变量数据规模小,低于从核数据存储空间的大小,则合并这些子任务的循环段为一个新循环段,执行S34;
S34、针对从核完成任务的循环段,直接使用编译指示进行众核加速并行。
基于增加循环量的循环段合并的众核程序重构方法包括以下步骤:
S41、利用性能分析工具或打印输出信息,分析程序运行时的多个时间热点函数,找出各个时间热点函数中最耗时循环段;
S42、针对各个时间热点函数中的最耗时循环段,逐一进行分析,首先考虑某个循环段的第一重循环,若第一重循环的循环量远小于从核数量,执行S43;若第一重循环的循环量远大于从核数量,循环段由从核完成,执行S47;
S43、当第一重循环的循环量较小,且循环段内存在多个多重循环,则进一步分析第二重循环;若其中某些第二重循环的循环边界相同,进行增加循环量的程序重构,执行S44;若其中某些第二重循环的循环边界不相同,执行S46;若循环段内不存在多重循环,循环段由从核完成,执行S47;
S44、将所有第二重循环边界相同的子任务从原始循环段拆分出来,然后将拆分出来的子任务进行合并,形成一个新的二重循环段,执行S45;
S45、将新的二重循环段合并为一个新的一重循环段,其中,新的一重循环段的循环下界值为新的二重循环段中下限值的最小值;新的一重循环段的循环上限值为新的二重循环段中第一重循环的循环上限值和第二重循环的循环上限值的乘积;新的一重循环段任务由从核完成,执行S47;
S46、将第二重循环边界不相同的子任务从原始循环段拆分出来,形成新的二重循环段,执行S45;
S47、针对从核完成任务的循环段,直接使用编译指示进行众核加速并行,该时间热点函数任务结束。
由于上述技术方案的运用,本发明与现有技术相比具有下列优点:
本发明基于循环段的众核程序重构方法,其主要针对异构众核架构下多级异构并行计算中复杂的循环层次结构,提供灵活高效的紧嵌套循环结构重构方法,在添加编译指示之前,对核心计算的循环结构进行分析,根据异构系统的结构特点和性能指标,优化循环段的层次结构和顺序,充分发挥系统的性能优势,从而最大程序提高应用软件的计算性能;适用于绝大多数的高性能数值模拟软件,包括气象预报、地震模拟、生物医药研究、流体力学模拟等,可以优化此类软件的代码结构,提高应用软件在异构众核系统的可移植性和计算性能。
附图说明
附图1为基于主从协同任务的循环结构拆分方法代码示例;
附图2为基于空间压缩的循环结构拆分方法代码示例;
附图3为类似循环结构合并方法1代码示例;
附图4为循环结构合并方法2代码示例;
附图5本发明基于主从协同任务的循环段拆分的众核程序重构方法流程图;
附图6本发明基于空间压缩的循环段拆分的众核程序重构方法流程图;
附图7本发明基于相似结构的循环段合并的众核程序重构方法流程图;
附图8本发明基于增加循环量的循环段合并的众核程序重构方法流程图。
具体实施方式
实施例:一种基于循环段的众核程序重构方法,包括基于循环段拆分的重构方法和基于循环段合并的重构方法,其中,所述基于循环段拆分的重构方法包括基于主从协同任务的循环段拆分和基于空间压缩的循环段拆分,所述基于循环段合并的重构方法包括基于相似结构的循环段合并和基于增加循环量的循环段合并;
基于主从协同任务的循环段拆分的众核程序重构方法包括以下步骤:
S11、利用性能分析工具或打印输出信息,分析程序运行时的多个时间热点函数,找出各个时间热点函数中最耗时循环段;
S12、对于S11中找出的各个循环段,若同时满足条件1:即循环边界起始条件为1,终止条件为end和条件2:即循环段内计算根据循环控制变量的不同取值分别调用循环段内相互独立的子任务sub_a、sub_b、sub_c,则执行S13;若不满足条件2,则循环段任务由从核完成,执行S15;
S13、对各子任务特性和相关性进行分析,若子任务sub_a、sub_c的计算量小、输出量大、通信量大,而子任务sub_b计算量大、输出信息少、通信量少,同时3个子任务不具有相关性,则将循环段按照各个子任务的循环边界取值范围进行拆分,拆分为3个新的循环段;若子任务相互之间具有相关性,循环段不进行拆分,循环段任务由从核完成,执行S15;
S14、针对S13中新拆分的循环段,含子任务sub_a、sub_c的循环段直接由主核完成;含子任务sub_b循环段由从核完成;
S15、针对从核完成任务的循环段,直接使用编译指示进行众核加速并行。
基于空间压缩的循环段拆分的众核程序重构方法包括以下步骤:
S21、利用性能分析工具或打印输出信息,分析程序运行时的多个时间热点函数,找出各个时间热点函数中最耗时循环段;
S22、对于S21中找出的各个循环段,若同时满足条件1:即循环边界起始条件为begin,终止条件为end和条件2:即循环段内依次调用多个子任务sub_A1(arrA1,arrB1,arrC1)、sub_A2(arrA2,arrB2,arrC2)、sub_A3(arrA3,arrB3,arrC3),则执行S23;若不满足条件2,则循环段任务由从核完成,执行S25;
三个子任务都使用了多个多维数组,而从核LDM空间较小,若使用众核加速编译指示对该循环段直接并行将导致LDM 空间访存异常,从核计算过程中频繁访问主存,故导致性能下降;
S23、对循环段内各个子任务的数据变量进行数据相关性分析,若子任务数据变量相互具有数据依赖性,则循环段任务由从核完成,执行S25;若其中某子任务与其它子任务不存在数据相关性,且该子任务的数据变量规模大,超过从核的数据存储空间上限,则对循环段进行拆分,使数据变量规模大的子任务独立成为新的循环段;
如,若子任务sub_A3数据空间大、计算过程满足相关性要求,则将sub_A3子任务和数据都进行拆分,数组拆分后如下:arrA3->(arrA31,arrA32,arrA33)、arrB3->(arrB31,arrB32,arrB33)、arrC3->(arrC31,arrC32,arrC33);
S24、针对S23中拆分出来的数据变量规模大的新循环段,分析子任务中的数据变量,对子任务及相关的数据变量进行拆分,子任务拆分之后形成多个子孙任务,同时将循环段的循环条件内移到拆分后的子孙任务,各个子孙任务循环段和S23中拆分出来的数据变量规模小的循环段均由从核完成;
这样不仅可以大大地减少各循环段从核的LDM空间负担,而且提高了从核访存效率,从而极大地提高计算性能;
S25、针对从核完成任务的循环段,直接使用编译指示进行众核加速并行。
若拆分后的某个子函数内仍存在多个循环任务,可以进行主、从协同循环拆分,则基于主从协同任务的循环段拆分的众核程序重构方法进行。
基于相似结构的循环段合并的众核程序重构方法包括以下步骤:
S31、利用性能分析工具或打印输出信息,分析程序运行时的多个时间热点函数,找出各个时间热点函数中最耗时循环段;
S32、若某时间热点函数中有多个循环段满足如下条件:循环边界相同,起始条件均为begin,终止条件均为end,则多个循环段分别调用子任务sub_A3_B1、sub_A3_B2、sub_A3_B3,执行S33;若多个循环段的循环边界不相同,多个循环段均由从核完成,执行S34;
S33、分析S32中各个循环段中的子任务计算变量的数据规模,若其中某些子任务的计算变量数据规模小,低于从核数据存储空间的大小,则合并这些子任务的循环段为一个新循环段,执行S34;
S34、针对从核完成任务的循环段,直接使用编译指示进行众核加速并行。
基于增加循环量的循环段合并的众核程序重构方法包括以下步骤:
S41、利用性能分析工具或打印输出信息,分析程序运行时的多个时间热点函数,找出各个时间热点函数中最耗时循环段;
S42、针对各个时间热点函数中的最耗时循环段,逐一进行分析,首先考虑某个循环段的第一重循环,若第一重循环的循环量远小于从核数量,执行S43;若第一重循环的循环量远大于从核数量,循环段由从核完成,执行S47;
S43、当第一重循环的循环量较小,且循环段内存在多个多重循环,则进一步分析第二重循环;若其中某些第二重循环的循环边界相同,进行增加循环量的程序重构,执行S44;若其中某些第二重循环的循环边界不相同,执行S46;若循环段内不存在多重循环,循环段由从核完成,执行S47;
S44、将所有第二重循环边界相同的子任务从原始循环段拆分出来,然后将拆分出来的子任务进行合并,形成一个新的二重循环段,执行S45;
S45、将新的二重循环段合并为一个新的一重循环段,其中,新的一重循环段的循环下界值为新的二重循环段中下限值的最小值;新的一重循环段的循环上限值为新的二重循环段中第一重循环的循环上限值和第二重循环的循环上限值的乘积;新的一重循环段任务由从核完成,执行S47;
S46、将第二重循环边界不相同的子任务从原始循环段拆分出来,形成新的二重循环段,执行S45;
S47、针对从核完成任务的循环段,直接使用编译指示进行众核加速并行,该时间热点函数任务结束。
实施例进一步解释如下:
实现了基于主从协同任务的循环结构拆分和基于空间压缩的循环结构拆分。
根据循环结构的多样性,本发明主要针对核心循环计算进行,包括了循环拆分和循环合并。
循环拆分分为两种,第一种方法将循环计算条件分解成2部分,一部分任务主核完成,另一部分任务交给从核完成,主从核协同完成计算过程,达到从核计算隐藏主核计算的效果;具体实现过程如图1所示。
图中左框中循环起始条件为1,终止条件end,循环体中计算根据loop的取值分别调用sub_a、sub_b、sub_c,直接使用异构众核系统编译指示,各从核需要进行条件判断,一方面影响了从核的计算效率,一方面造成从核负载不均衡。
通过循环拆分方法,循环拆分为3部分,拆分后的sub_a和sub_c计算任务交给主核完成,sub_b计算任务交给从核完成,不仅消除了IF-ELSE判断,从核的负载任务也更加均衡,从而提高循环计算部分的性能。
循环拆分的第二种方法主要考虑应用程序的空间需求。异构众核系统的参数指标和循环计算任务中数据变量的存储需求匹配度低,一般在添加编译指示之前,分析核心计算的数据相关性和计算任务粒度,在充分利用异构系统从核存储能力的基础上,尽可能的将计算任务均衡地分配给各个从核;该方法的核心思想如图2所示。
图2中左侧上方的框中为原始代码,循环中调用了3个函数 ,函数中使用了大量的多维数组,直接众核并行导致LDM 空间存储访存异常,原因在于LDM空间存储能力有限。
本发明提出,首先将各个函数分开,或者将数组变量多的函数独立拆分,上面示例将sub_A3单独拆分,然后将循环条件内移到其中的子函数sub_A3_B1、sub_A3_B2、sub_A3_B3各个子函数分别众核并行,这样大大的减少了各从核的LDM空间负担。
循环合并重构方法的设计思路与循环拆分的类似,第一种是合并多个相似循环结构,设计思路如图3所示。
图3左侧框示例sub_A3中有3个相同循环边界的计算任务B1-B3,为了提高从核的计算/访存比,在合理利用LDM空间的前提下,合并3个任务成为一个循环计算任务,从而提高从核的计算效率。
第二种循环合并重构方法针对的情况是:循环任务分配给一部分从核后,另外的从核空闲,没有分配到计算任务,造成从核资源浪费。此时,如果循环结构内有其它循环结构存在,考虑合并两层循环或者三层循环,达到各从核任务负载均衡,设计思路如图4所示。
图中左侧框图loop循环边界小于64,直接添加编译指示,分配任务时,有从核处于空闲状态,本发明提出合并loop循环和i循环,循环边界扩大为ie*(end-loop+1),一方面增加了从核并行规模,另一方面增加了各从核单次循环的计算量,从而极大地提高了循环任务的计算性能。
采用上述基于循环段的众核程序重构方法时,其主要针对异构众核架构下多级异构并行计算中复杂的循环层次结构,提供灵活高效的紧嵌套循环结构重构方法,在添加编译指示之前,对核心计算的循环结构进行分析,根据异构系统的结构特点和性能指标,优化循环段的层次结构和顺序,充分发挥系统的性能优势,从而最大程序提高应用软件的计算性能;适用于绝大多数的高性能数值模拟软件,包括气象预报、地震模拟、生物医药研究、流体力学模拟等,可以优化此类软件的代码结构,提高应用软件在异构众核系统的可移植性和计算性能。
为了便于更好的理解本发明,下面将对本文中使用的术语进行简要的解释:
重构算法:英文reconstruct algorithm,在不改变软件功能的基础上,通过调整程序代码的结构改善软件质量、软件性能,使程序的模式和结构更趋合理,提高软件的性能和维护性。
上述实施例只为说明本发明的技术构思及特点,其目的在于让熟悉此项技术的人士能够了解本发明的内容并据以实施,并不能以此限制本发明的保护范围。凡根据本发明精神实质所作的等效变化或修饰,都应涵盖在本发明的保护范围之内。
Claims (1)
1.一种基于循环段的众核程序重构方法,其特征在于:包括基于循环段拆分的重构方法和基于循环段合并的重构方法,其中,所述基于循环段拆分的重构方法包括基于主从协同任务的循环段拆分和基于空间压缩的循环段拆分,所述基于循环段合并的重构方法包括基于循环结构的循环段合并和基于增加循环量的循环段合并;
基于主从协同任务的循环段拆分的众核程序重构方法包括以下步骤:
S11、利用性能分析工具或打印输出信息,分析程序运行时的多个时间热点函数,找出各个时间热点函数中最耗时循环段;
S12、对于S11中找出的各个循环段,若同时满足条件1:即循环边界起始条件为1,终止条件为end和条件2:即循环段内计算根据循环控制变量的不同取值分别调用循环段内相互独立的子任务sub_a、sub_b、sub_c,则执行S13;若不满足条件2,则循环段任务由从核完成,执行S15;
S13、对各子任务特性和相关性进行分析,若子任务sub_a、sub_c的计算量小、输出量大、通信量大,而子任务sub_b计算量大、输出信息少、通信量少,同时3个子任务不具有相关性,则将循环段按照各个子任务的循环边界取值范围进行拆分,拆分为3个新的循环段;若子任务相互之间具有相关性,循环段不进行拆分,循环段任务由从核完成,执行S15;
S14、针对S13中新拆分的循环段,含子任务sub_a、sub_c的循环段直接由主核完成;含子任务sub_b循环段由从核完成;
S15、针对从核完成任务的循环段,直接使用编译指示进行众核加速并行;
基于空间压缩的循环段拆分的众核程序重构方法包括以下步骤:
S21、利用性能分析工具或打印输出信息,分析程序运行时的多个时间热点函数,找出各个时间热点函数中最耗时循环段;
S22、对于S21中找出的各个循环段,若同时满足条件1:即循环边界起始条件为begin,终止条件为end和条件2:即循环段内依次调用多个子任务sub_A1(arrA1,arrB1,arrC1)、sub_A2(arrA2,arrB2,arrC2)、sub_A3(arrA3,arrB3,arrC3),则执行S23;若不满足条件2,则循环段任务由从核完成,执行S25;
S23、对循环段内各个子任务的数据变量进行数据相关性分析,若子任务数据变量相互具有数据依赖性,则循环段任务由从核完成,执行S25;若其中某子任务与其它子任务不存在数据相关性,且该子任务的数据变量规模大,超过从核的数据存储空间上限,则对循环段进行拆分,使数据变量规模大的子任务独立成为新的循环段;
S24、针对S23中拆分出来的数据变量规模大的新循环段,分析子任务中的数据变量,对子任务及相关的数据变量进行拆分,子任务拆分之后形成多个子孙任务,同时将循环段的循环条件内移到拆分后的子孙任务,各个子孙任务循环段和S23中拆分出来的数据变量规模小的循环段均由从核完成;
S25、针对从核完成任务的循环段,直接使用编译指示进行众核加速并行;
基于循环结构的循环段合并的众核程序重构方法包括以下步骤:
S31、利用性能分析工具或打印输出信息,分析程序运行时的多个时间热点函数,找出各个时间热点函数中最耗时循环段;
S32、若某时间热点函数中有多个循环段满足如下条件:循环边界相同,起始条件均为begin,终止条件均为end,则多个循环段分别调用子任务sub_A3_B1、sub_A3_B2、sub_A3_B3,执行S33;若多个循环段的循环边界不相同,多个循环段均由从核完成,执行S34;
S33、分析S32中各个循环段中的子任务计算变量的数据规模,若其中某些子任务的计算变量数据规模小,低于从核数据存储空间的大小,则合并这些子任务的循环段为一个新循环段,执行S34;
S34、针对从核完成任务的循环段,直接使用编译指示进行众核加速并行;
基于增加循环量的循环段合并的众核程序重构方法包括以下步骤:
S41、利用性能分析工具或打印输出信息,分析程序运行时的多个时间热点函数,找出各个时间热点函数中最耗时循环段;
S42、针对各个时间热点函数中的最耗时循环段,逐一进行分析,首先考虑某个循环段的第一重循环,若第一重循环的循环量远小于从核数量,执行S43;若第一重循环的循环量远大于从核数量,循环段由从核完成,执行S47;
S43、当第一重循环的循环量较小,且循环段内存在多个多重循环,则进一步分析第二重循环;若其中某些第二重循环的循环边界相同,进行增加循环量的程序重构,执行S44;若其中某些第二重循环的循环边界不相同,执行S46;若循环段内不存在多重循环,循环段由从核完成,执行S47;
S44、将所有第二重循环边界相同的子任务从原始循环段拆分出来,然后将拆分出来的子任务进行合并,形成一个新的二重循环段,执行S45;
S45、将新的二重循环段合并为一个新的一重循环段,其中,新的一重循环段的循环下界值为新的二重循环段中下限值的最小值;新的一重循环段的循环上限值为新的二重循环段中第一重循环的循环上限值和第二重循环的循环上限值的乘积;新的一重循环段任务由从核完成,执行S47;
S46、将第二重循环边界不相同的子任务从原始循环段拆分出来,形成新的二重循环段,执行S45;
S47、针对从核完成任务的循环段,直接使用编译指示进行众核加速并行,该时间热点函数任务结束。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910910103.4A CN112559032B (zh) | 2019-09-25 | 2019-09-25 | 基于循环段的众核程序重构方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910910103.4A CN112559032B (zh) | 2019-09-25 | 2019-09-25 | 基于循环段的众核程序重构方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112559032A CN112559032A (zh) | 2021-03-26 |
CN112559032B true CN112559032B (zh) | 2023-06-13 |
Family
ID=75029101
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910910103.4A Active CN112559032B (zh) | 2019-09-25 | 2019-09-25 | 基于循环段的众核程序重构方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112559032B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114970294B (zh) * | 2022-08-02 | 2022-10-25 | 山东省计算中心(国家超级计算济南中心) | 基于神威架构的三维应变仿真pcg并行优化方法及系统 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20120331474A1 (en) * | 2010-02-19 | 2012-12-27 | Nec Corporation | Real time system task configuration optimization system for multi-core processors, and method and program |
CN102929723A (zh) * | 2012-11-06 | 2013-02-13 | 无锡江南计算技术研究所 | 基于异构众核处理器的并行程序段划分方法 |
-
2019
- 2019-09-25 CN CN201910910103.4A patent/CN112559032B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20120331474A1 (en) * | 2010-02-19 | 2012-12-27 | Nec Corporation | Real time system task configuration optimization system for multi-core processors, and method and program |
CN102929723A (zh) * | 2012-11-06 | 2013-02-13 | 无锡江南计算技术研究所 | 基于异构众核处理器的并行程序段划分方法 |
Non-Patent Citations (2)
Title |
---|
《Virtualized On-Chip Distributed Computing for Heterogeneous Reconfigurable Multi-Core Systems》;Stephan Werner 等;《2012 Design, Automation & Test in Europe Conference & Exhibition (DATE)》;20121231;全文 * |
《动态可重构众核处理器仿真平台设计》;韩兴 等;《上海交通大学学报》;20130131;全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN112559032A (zh) | 2021-03-26 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105159762B (zh) | 基于贪心策略的启发式云计算任务调度方法 | |
Liu et al. | Speculative segmented sum for sparse matrix-vector multiplication on heterogeneous processors | |
CN108509270B (zh) | 一种国产申威26010众核处理器上K-means算法的高性能并行实现方法 | |
CN102043886B (zh) | 集成电路下层硬件映射方法、数据控制流时序约束方法及装置 | |
CN102193830B (zh) | 面向众核环境的分治映射/归约并行编程模型 | |
CN101833438A (zh) | 一种基于多重并行的数据通用处理方法 | |
KR20090089327A (ko) | 파이프라인 컴퓨터 처리의 병렬화를 위한 방법 및 시스템 | |
CN110362780B (zh) | 一种基于申威众核处理器的大数据张量典范分解计算方法 | |
CN107329822A (zh) | 面向多源多核系统的基于超任务网的多核调度方法 | |
CN117032945A (zh) | 一种通过能耗感知调整计算资源平衡能耗的异构计算架构 | |
CN112559032B (zh) | 基于循环段的众核程序重构方法 | |
CN106293736B (zh) | 用于粗粒度多核计算系统的两级编程装置及其计算方法 | |
Taki | Parallel inference machine PIM | |
CN102054107B (zh) | 集成电路下层硬件映射方法、时空图生成方法及装置 | |
Serban et al. | Autonomic scheduling of tasks from data parallel patterns to CPU/GPU core mixes | |
Pilla et al. | Asymptotically optimal load balancing for hierarchical multi-core systems | |
Neelima et al. | Communication and computation optimization of concurrent kernels using kernel coalesce on a GPU | |
CN114356550A (zh) | 一种面向三级并行中间件的计算资源自动分配方法及系统 | |
CN114253545A (zh) | 一种基于编译的神经网络异构众核多层次资源映射方法 | |
CN102981805B (zh) | 串行软件的响应方法和系统 | |
CN117632520B (zh) | 基于申威众核处理器的主从核监测交互的计算量调度方法 | |
CN112148361B (zh) | 一种用于处理器加密算法移植的方法及系统 | |
Dufaud et al. | Design of data management for multi SPMD workflow programming model | |
CN113469328B (zh) | 执行转数穿过的装置、板卡、方法及可读存储介质 | |
CN116167304B (zh) | 基于神威架构的油藏数值模拟gmres优化方法及系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |