代码转换方法、装置、设备以及存储介质制造方法及图纸

技术编号:30755051 阅读:21 留言:0更新日期:2021-11-10 12:08
本申请公开了一种代码转换方法、装置、设备以及存储介质,该方法包括:对待转换代码中的CUDA Fortran语言的核函数进行转码,得到头文件和包括CUDA C语言的核函数的源文件,待转换代码中的主代码包括第一代码和第二代码,第二代码包括调用代码,根据源文件、头文件和CUDA C语言的核函数构建封装函数,封装函数用于调用CUDA C语言的核函数,修改第二代码,得到HIP可兼容的第三代码,第三代码包括用于调用封装函数的代码,最后根据修改后的主代码、源文件、头文件和封装函数,得到转换后的代码。从而,实现了代码转换,提高了代码转换效率。提高了代码转换效率。提高了代码转换效率。

【技术实现步骤摘要】
代码转换方法、装置、设备以及存储介质


[0001]本申请涉及计算机
,尤其涉及一种代码转换方法、装置、设备以及存储介质。

技术介绍

[0002]在现代高性能计算机中,以异构加速器为主要计算单元的高性能计算机体系结构逐渐成为主要结构,异构加速器可以有效提供高浮点计算性能,功耗还较低,图形处理单元(Graphics Processing Unit,GPU)为一种异构加速器。为了使用具有结构差异的异构加速器,目前业界提出一种可在CUDA和其它异构加速器上运行的可迁移异构并行编程模型(Heterogeneous

Compute Interface for Portability,HIP),异构并行编程模型可以显示或隐式的对异构加速器进行控制,如运行计算任务或进行与主机端的数据拷贝等,HIP仅提供C/C++语法和接口支持。其中CUDA为一种可以使用NVIDIA GPU进行通用计算的异构并行编程模型。
[0003]公式翻译(Formula Translation,Fortran)语言是科学计算领域所使用的主要语言,而科学计算一直是使用高性能计算技术的主要领域,在一些科学计算领域,如大气和地质等,最早期的一些科学计算程序通常是使用Fortran语言开发的,为实现可以将这些科学计算程序运行在NVIDIA GPU上,需要使用Fortran语言按照CUDA的编写要求对科学计算程序重新编写,得到异构并行程序(简称CUDA Fortran代码)。由于HIP仅提供C/C++语法和接口支持,若要实现可以将CUDA Fortran代码运行在其他异构加速器上,需要CUDA Fortran代码移植到HIP上,即将CUDA Fortran代码转换为使用C语言按照HIP的编写要求编写的异构并行程序(简称HIP C代码)。
[0004]目前,将CUDA Fortran代码转换为HIP C代码,均是通过人工完成,对人员要求较高,需要花费较多的时间,代码转换效率较低。

技术实现思路

[0005]本申请提供一种代码转换方法、装置、设备以及存储介质,以解决将CUDA Fortran代码转换为HIP C代码时,代码转换效率较低的问题。
[0006]第一方面,本申请提供一种代码转换方法,包括:
[0007]对待转换代码中的CUDA Fortran语言的核函数进行转码,得到头文件和包括CUDA C语言的核函数的源文件,所述待转换代码包括主代码和所述CUDA Fortran语言的核函数,所述主代码包括第一代码和第二代码,所述第二代码包括用于调用所述CUDA Fortran语言的核函数的调用代码;
[0008]根据所述源文件和所述头文件构建封装函数,所述封装函数用于调用所述CUDA C语言的核函数;
[0009]修改所述第二代码,得到可迁移异构并行编程模型HIP可兼容的第三代码,所述第三代码包括用于调用所述封装函数的代码;
[0010]根据修改后的主代码、所述源文件、所述头文件和所述封装函数,得到转换后的代码,所述修改后的主代码包括所述第一代码和所述第三代码。
[0011]可选的,所述第二代码还包括运行时系统接口的调用代码和引用模块,所述修改所述第二代码,得到可迁移异构并行编程模型HIP可兼容的第三代码,包括:
[0012]将所述运行时系统接口的调用代码修改为所述HIP可兼容的运行时系统接口的调用代码;
[0013]将所述引用模块修改为所述HIP引用模块;
[0014]将所述调用代码修改为所述用于调用所述封装函数的代码;
[0015]根据所述HIP可兼容的运行时系统接口的调用代码、所述HIP引用模块和所述用于调用所述封装函数的代码,得到所述第三代码。
[0016]上述申请中的另一个实施例具有如下优点或者有益效果:通过分别对运行时系统接口的调用代码、引用模块和调用代码进行修改,可得到HIP可兼容的第三代码。
[0017]可选的,所述封装函数包括C语言的核函数封装模块和Fortran语言的核函数调用模块,所述C语言的核函数封装模块用于进行对所述CUDA C语言的核函数的调用过程且对所述调用过程进行封装,所述Fortran语言的核函数调用模块用于构建Fortran接口并调用所述C语言的核函数封装模块所提供的函数。
[0018]上述申请中的另一个实施例具有如下优点或者有益效果:通过根据源文件和头文件构建C语言的核函数封装模块和Fortran语言的核函数调用模块,由Fortran语言的核函数调用模块构建Fortran接口并调用C语言的核函数封装模块所提供的函数,由C语言的核函数封装模块进行对CUDA C语言的核函数的调用,在运行转换后的代码时,用于调用封装函数的代码可以通过Fortran语言的核函数调用模块和C语言的核函数封装模块间接调用CUDA C语言的核函数,实现了对CUDA C语言的核函数的调用,从而实现了对核函数的调用过程的代码转换。
[0019]可选的,所述根据所述源文件和所述头文件构建封装函数,包括:
[0020]根据所述源文件和所述头文件构建所述C语言的核函数封装模块;
[0021]根据所述C语言的核函数封装模块构建所述Fortran语言的核函数调用模块。
[0022]上述申请中的另一个实施例具有如下优点或者有益效果:由于Fortran语言的核函数调用模块用于构建Fortran接口并调用C语言的核函数封装模块所提供的函数,因此先根据源文件和头文件构建C语言的核函数封装模块,再根据C语言的核函数封装模块构建Fortran语言的核函数调用模块,便于Fortran语言的核函数调用模块进行对C语言的核函数封装模块所提供的函数的调用。
[0023]可选的,所述根据所述源文件和所述头文件构建所述C语言的核函数封装模块,包括:
[0024]根据所述头文件中的核函数声明从所述CUDA C语言的核函数中提取核函数参数;
[0025]根据所述核函数参数的结构,构建所述C语言的核函数封装模块的参数声明,所述C语言的核函数封装模块的参数声明包括核函数运行参数和所述核函数参数;
[0026]根据所述C语言的核函数封装模块的参数声明,构建所述第二调用代码,所述第二调用代码的参数与所述C语言的核函数封装模块的参数声明包括的参数相同;
[0027]将所述源文件的代码复制到所述头文件中得到所述目标头文件;
[0028]根据预设的所述HIP对应的头文件、所述目标头文件、所述C语言的核函数封装模块的参数声明和所述第二调用代码,得到所述C语言的核函数封装模块。
[0029]上述申请中的另一个实施例具有如下优点或者有益效果:通过先根据核函数参数的结构依次构建C语言的核函数封装模块的参数声明和第二调用代码,再将源文件的代码复制到头文件中得到所述目标头文件,进而根据预设的HIP对应的头文件、目标头文件、C语言的核函数封装模块的参数声明和第二调用代码得到所述C语言的核函数封装模块,实现了C语言的核函数封本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种代码转换方法,其特征在于,包括:对待转换代码中的CUDA Fortran语言的核函数进行转码,得到头文件和包括CUDA C语言的核函数的源文件,所述待转换代码包括主代码和所述CUDA Fortran语言的核函数,所述主代码包括第一代码和第二代码,所述第二代码包括用于调用所述CUDA Fortran语言的核函数的调用代码;根据所述源文件和所述头文件构建封装函数,所述封装函数用于调用所述CUDA C语言的核函数;修改所述第二代码,得到可迁移异构并行编程模型HIP可兼容的第三代码,所述第三代码包括用于调用所述封装函数的代码;根据修改后的主代码、所述源文件、所述头文件和所述封装函数,得到转换后的代码,所述修改后的主代码包括所述第一代码和所述第三代码。2.根据权利要求1所述的方法,其特征在于,所述第二代码还包括运行时系统接口的调用代码和引用模块,所述修改所述第二代码,得到可迁移异构并行编程模型HIP可兼容的第三代码,包括:将所述运行时系统接口的调用代码修改为所述HIP可兼容的运行时系统接口的调用代码;将所述引用模块修改为所述HIP引用模块;将所述调用代码修改为所述用于调用所述封装函数的代码;根据所述HIP可兼容的运行时系统接口的调用代码、所述HIP引用模块和所述用于调用所述封装函数的代码,得到所述第三代码。3.根据权利要求1所述的方法,其特征在于,所述封装函数包括C语言的核函数封装模块和Fortran语言的核函数调用模块,所述C语言的核函数封装模块用于进行对所述CUDA C语言的核函数的调用过程且对所述调用过程进行封装,所述Fortran语言的核函数调用模块用于构建Fortran接口并调用所述C语言的核函数封装模块所提供的函数。4.根据权利要求3所述的方法,其特征在于,所述根据所述源文件和所述头文件构建封装函数,包括:根据所述源文件和所述头文件构建所述C语言的核函数封装模块;根据所述C语言的核函数封装模块构建所述Fortran语言的核函数调用模块。5.根据权利要求4所述的方法,其特征在于,所述根据所述源文件和所述头文件构建所述C语言的核函数封装模块,包括:根据所述头文件中的核函数声明从所述CUDA C语言的核函数中提取核函数参数;根据所述核函数参数的结构,构建所述C语言的核函数封装模块的参数声明,所述C语言的核函数封装模块的参数声明包括核函数运行参数和所述核函数参数;根据所述C语言的核函数封装模块的参数声明,构建所述第二调用代码,所述第二调用代码的参数与所述C语言的核函数封装模块的参数声明包括的参数相同;将所述源文件的代码复制到所述头文件中得到所述目标头文件;根据预设的所述HIP对应的头文件、所述目标头文件、所述C语言的核函数封装模块的参数声明和所述第二调用代码,得到所述C语言的核函数封装模块。6.根据权利要求5所述的方法,其特征在于,所述根据所述C语言的核函数封装模块构
建所述Fortran语言的核函数调用模块,包括:根据所述C语言的核函数封装模块的参数声明,构建所述第一调用代码,所述第一调用代码的参数与所述C语言的核函数封装模块的参数声明中去除矩阵维度描述信息参数后的参数相同;根据第一调用代...

【专利技术属性】
技术研发人员:肖熠霍志坤李志功
申请(专利权)人:曙光信息产业北京有限公司
类型:发明
国别省市:

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

1