一种异构并行程序自动移植和优化方法技术

技术编号:26417779 阅读:52 留言:0更新日期:2020-11-20 14:12
一种异构并行程序自动移植和优化方法,属于异构并行程序开发技术。本发明专利技术是为了实现CPU并行程序自动移植、在减轻开发人员工作负担的同时提高程序性能,从而解决并行指令转换、数据传输管理及优化问题。技术要点:构建异构并行程序自动移植系统的框架,异构并行程序自动移植系统用于将OpenMP CPU并行程序自动翻译为OpenMP Offloading异构并行程序;一致性状态转换形式化,保证数据一致性的前提下,优化传输操作,减少冗余数据传输;运行时库设计,运行时库用于提供自动数据传输管理和优化功能,维护每个变量内存区域一致性状态;源到源翻译器设计,翻译器用于自动转换并行指令及自动插入运行时API。该方法可以自动识别CPU并行指令并转换为加速器并行指令,提高程序性能。

【技术实现步骤摘要】
一种异构并行程序自动移植和优化方法
本专利技术涉及一种异构并行程序自动移植和优化方法,属于异构并行程序开发技术。
技术介绍
随着人工智能、图像处理、多物理场仿真、量子模拟、气候模拟等不同应用对算力的巨大需求,基于各类加速器的异构平台已经取代CPU(CentralProcessingUnit,中央处理器)成为算力的主要来源。在高性能计算领域主要使用GPU(GraphicsProcessingUnit,图形处理器)作为加速器,在移动平台上主要使用GPU、DSP(DigitalSignalProcessing,数字信号处理器)或FPGA(FieldProgrammableGateArray,现场可编程逻辑门阵列)作为加速器。加速器在提供巨大算力的同时,也给应用开发和移植带来了巨大挑战。CPU并行编程的标准是OpenMP(OpenMulti-Processing)模型,而异构并行编程需要使用CUDA(ComputeUnifiedDeviceArchitecture,统一计算架构)、OpenCL(OpenComputingLanguage,开放计本文档来自技高网...

【技术保护点】
1.一种异构并行程序自动移植和优化方法,其特征在于,所述方法的实现过程为:/n步骤1、构建异构并行程序自动移植系统的框架/n异构并行程序自动移植系统,简称OAO系统,用于将OpenMP CPU并行程序自动翻译为OpenMP Offloading异构并行程序,并结合运行时系统自动管理并优化CPU和加速器之间的数据传输;OAO系统框架主要包含源到源翻译器、运行时库两部分;/n运行时库包含三类API:一致性状态跟踪、数据传输、一致性状态转换;一致性状态跟踪API捕获变量内存区域,并初始化一致性状态;数据传输API根据当前一致性状态和需要满足的一致性约束动态确定传输操作并执行,同时更新一致性状态;状态...

【技术特征摘要】
1.一种异构并行程序自动移植和优化方法,其特征在于,所述方法的实现过程为:
步骤1、构建异构并行程序自动移植系统的框架
异构并行程序自动移植系统,简称OAO系统,用于将OpenMPCPU并行程序自动翻译为OpenMPOffloading异构并行程序,并结合运行时系统自动管理并优化CPU和加速器之间的数据传输;OAO系统框架主要包含源到源翻译器、运行时库两部分;
运行时库包含三类API:一致性状态跟踪、数据传输、一致性状态转换;一致性状态跟踪API捕获变量内存区域,并初始化一致性状态;数据传输API根据当前一致性状态和需要满足的一致性约束动态确定传输操作并执行,同时更新一致性状态;状态转换API根据读写操作类型,更新一致性状态;
源到源翻译器将OpenMPCPU并行代码翻译为OpenMPOffloading异构并行代码,并插入合适的运行时API;其由3个模块组成:数据传输API插入模块、状态转换API插入模块、并行指令翻译模块;并行指令翻译模块将OpenMPCPU并行指令翻译为OpenMPOffloading异构并行指令,得到OpenMPOffloading内核;数据传输API插入模块、状态转换API插入模块分别插入两种对应的运行时API;
OAO系统工作过程如下:OpenMPCPU并行代码经过源到源翻译,得到包含运行时API的OpenMPOffloading异构并行代码,OpenMPOffloading代码经过编译后在异构平台上运行,其中OpenMPOffloading内核运行在加速器上,其余程序运行在CPU上;运行时库通过插入的API管理CPU和加速器之间的数据传输,保证数据一致性并动态进行传输优化,减少冗余数据传输;
步骤2、一致性状态转换形式化
对于异构平台,变量在CPU内存和加速器内存中都存在副本,一致性状态用来描述变量的CPU副本和加速器副本的有效性;由当前的一致性状态和需要满足的一致性状态约束推导出最简状态转换函数,该函数通过对应关系确定需要执行的最简传输操作类型,以保证数据一致性的前提下,优化传输操作,减少冗余数据传输;
步骤3、运行时库设计
运行时库用于提供自动数据传输管理和优化功能,维护每个变量内存区域一致性状态,给出运行时库三类API函数及对应的描述;
步骤4源到源翻译器设计
源到源翻译器主要基于Clang/LLVM编译框架的静态分析功能,将OpenMPCPU并行代码翻译为OpenMPOffloading异构并行代码,并以合适的方式插入运行时API,在保证数据一致性的前提下,优化数据传输;
源到源翻译器通过静态分析收集串行域、并行域、变量引用等信息;然后建立程序的串并行控制流图并将变量引用信息与相应的并行域串行域绑定;之后以串行域和并行域为粒度插入数据传输API插入、状态转换API插入;最后将OpenMPCPU并行指令翻译为OpenMPOffloading并行指令。


2.根据权利要求1所述的一种异构并行程序自动移植和优化方法,其特征在于,在步骤2中,一致性状态转换形式化的实现过程为:
给出如下定义:
定义1.一致性状态State是一个3bit的二进制数;其中Bit0表示变量是(Bit0=1)/否(Bit0=0)存在加速器副本;Bit1表示CPU副本是(Bit1=1)/否(Bit1=0)有效;Bit2表示加速器副本是(Bit2=1)/否(Bit2=0)有效;根据定义1,可得到所有可能的一致性状态,如表1所示:
表1所有可能一致性状态



CPU和加速器之间的数据传输以及CPU和加速器上的读写操作会改变一致性状态,使用一致性状态转换函数来表示一致性状态的改变,其定义如下:
定义2.一致性状态转换函数TransFunc的形式如式(1)所示,其中InVld和Vld是一对3bit的二进制数,其中运算符是布尔运算符;若将InVld中的某bit置0,则可将inState中对应bit转换为0;若将Vld中的某bit置1则可将inState中对应bit转换为1;因此给二者设置不同的值可以将任意inState转换为任意outState;TransFunc也简记为式(2)形式;



TransFunc={InVld,Vld}(2)
根据定义2,可得到所有可能的一致性状态转换函数及其对应的数据传输或读写操作,如表2所示:
表2所有可能的一致性状态转换操作






根据定义1和定义2,可得到各种一致性状态之间的转换关系;
为保证程序正确,CPU和加速器上的读写操作对一致性状态有一定要求,使用一致性状态约束表示这些要求,其定义如下:
定义3.一致性状态约束Constr由一对3bit二进制数组成,其形式如(3)所示;Constr的默认值是{111,000},表示对一致性状态无要求;可将ConInVld的某bit置0,或将ConVld的某bit置1表示对一致性状态的不同约束要求,如表3所示:
Constr={ConInVld,ConVld}(3)
表3ConVld和ConInVld含义描述



根据定义3和表3,给出CPU和加速器上不同读写操作所需的一致性状态约束,如表4所示:
表4所需的一致性状态约束



由当前的一致性状态State和需要满足的一致性状态约束Constr={ConInVld,ConVld},可推导出最简状态转换函数如下:
最简状态转换函数的推导公式如式(4)所示:
MinTrFunc(State)=State·InVld+Vld
其中
MinTrFunc通过表2中的前6种对应关系确定需要执行的最简传输操作类型。


3.根据权利要求2所述的一种异构并行程序自动移植和优化方法,其特征在于,在步骤3中,运行时库设计的具体过程为:
运行时库API函数如表5所示,可以分成三类:一致性状态跟踪API函数、数据传输API函数OAODataTrans、一致性状态转换API函数OAOStTrans;表5中前6个为一致性状态跟踪API函数;
表5运行时库API函数






3.1一致性状态跟踪API
运行时库将变量内存区域作为一致性状态跟踪和数据传输的粒度,在C/C++中变量内存区域是一个连续的内存区域,其来源是局部变量定义、全局变量定义、malloc操作、new操作,为记录并跟踪变量一致性状态,定义变量内存区域和内存环境的形式化表示如下:
定义4.变量内存区域MemBlk是一个四元组,如式(5)所示;其中:Begin表示内存起始地址,表示Length内存区域长度,表示ElemSize元素大小,State表示一致性状态;
MemBlk={Beg...

【专利技术属性】
技术研发人员:张伟哲王法瑞何慧郭浩男刘亚维张玥
申请(专利权)人:哈尔滨工业大学
类型:发明
国别省市:黑龙江;23

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1