CN112328258A - 一种编程语言的转换方法及系统 - Google Patents
一种编程语言的转换方法及系统 Download PDFInfo
- Publication number
- CN112328258A CN112328258A CN202011348724.7A CN202011348724A CN112328258A CN 112328258 A CN112328258 A CN 112328258A CN 202011348724 A CN202011348724 A CN 202011348724A CN 112328258 A CN112328258 A CN 112328258A
- Authority
- CN
- China
- Prior art keywords
- program code
- fortran90
- variables
- cuda
- array
- 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.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 22
- 230000006870 function Effects 0.000 claims abstract description 26
- 238000013507 mapping Methods 0.000 claims abstract description 7
- 238000007781 pre-processing Methods 0.000 claims abstract description 7
- 238000012545 processing Methods 0.000 claims description 28
- 238000012216 screening Methods 0.000 claims 2
- 238000013519 translation Methods 0.000 claims 1
- 238000006243 chemical reaction Methods 0.000 description 9
- HPTJABJPZMULFH-UHFFFAOYSA-N 12-[(Cyclohexylcarbamoyl)amino]dodecanoic acid Chemical compound OC(=O)CCCCCCCCCCCNC(=O)NC1CCCCC1 HPTJABJPZMULFH-UHFFFAOYSA-N 0.000 description 6
- 238000011161 development Methods 0.000 description 5
- 230000001133 acceleration Effects 0.000 description 2
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000007547 defect Effects 0.000 description 1
- 238000010606 normalization Methods 0.000 description 1
- 238000002054 transplantation Methods 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
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
本发明涉及一种编程语言的转换方法及系统,包括:将Fortran90程序代码进行预处理;提取Fortran90程序代码中的全局变量名称,根据use语句查找相应的mod文件,建立外部数组类型的变量与mod文件名称的映射;将Fortran90程序代码的内部数组变量替换为Cuda程序代码的变量,将Fortran90程序代码的外部数组变量替换为Cuda程序代码的变量;将Fortran90程序代码中与Cuda不兼容的关键字、语句替换为正确的格式,将Cuda中无需使用的语句注释;将Fortran90程序代码中对应的数组格式、下标索引转换为Cuda程序代码;保留原有Fortran90程序代码中的.h文件,根据use语句查找mod文件,提取其中的变量以及相关定义,生成新的Cuda程序代码头文件;调整Cuda程序代码中的函数调用格式。
Description
技术领域
本发明属于计算机技术领域,具体涉及一种编程语言的转换方法及系统。
背景技术
随着计算机科学的发展,不同特色的程序语言不断涌现,但在数值计算、科学和工程技术领域,Fortran依旧占据主流地位。因为有着较低的开发成本,大量的数值计算工程软件,依旧是基于Fortran。另一方面,随着高性能计算机的迅速发展,以及超算与AI行业的学科交融,面向GPU/DCU平台的异构并行程序已经成为一种新的趋势,基于Fortran开发用于CPU平台的科学计算软件,通过异构并行来实现性能的巨大提升,在工程上有着急切的需求。其中以用于GPU编程的CUDA C语法为主流的行业标准,DCU平台使用的ROCm语法也参照CUDA C规范,在国际上最快的10台计算机中有6台是CPU+GPU异构的机器。
国产海光GPU加速卡只支持CUDA C语言,并且对于NVIDIA GPU,CUDA C程序对比CUDA FORTRAN程序加速性能更好。但是从Fortran到Cuda C的移植过程,往往有着很大的工程量。程序语法的对应转化,如果完全通过人工完成,效率较低且容易出错。从Fortran到CUDA C的自动转码工具,就有着很大的需求。
现如今仅有一些Fortran转换为C的工具,如f2c,fable等,但其共有的缺点是转换效率不高,且部分工具转换结果难于阅读,不利于进一步的开发;而将Fortran转换为Cuda的工具更是一片空白。
发明内容
本发明的目的,是解决现有技术Fortran到Cuda的移植过程中存在的上述技术问题。
为实现上述目的,一方面,本发明提供了一种编程语言的转换方法,该方法包括以下步骤:
将Fortran90程序代码进行预处理,保留原有程序代码的注释,对跨行程序代码进行合并处理,去除跨行符;
提取Fortran90程序代码中的全局变量名称,根据use语句查找相应的mod文件,建立外部数组类型的变量与mod文件名称的映射;
将Fortran90程序代码的内部数组变量替换为Cuda程序代码的变量,将Fortran90程序代码的外部数组变量替换为Cuda程序代码的变量;
将Fortran90程序代码中与Cuda不兼容的关键字、语句替换为正确的格式,将Cuda中无需使用的语句注释;
将Fortran90程序代码中对应的数组格式、下标索引转换为Cuda程序代码;
保留原有Fortran90程序代码中的.h文件,根据use语句查找mod文件,提取其中的变量以及相关定义,生成新的Cuda程序代码头文件;
调整Cuda程序代码中的函数调用格式。
另一方面,本发明提供了一种编程语言的转换系统,包括:
第一处理模块,用于将Fortran90程序代码进行预处理,保留原有程序代码的注释,对跨行程序代码进行合并处理,去除跨行符;
第二处理模块,用于提取Fortran90程序代码中的全局变量名称,根据use语句查找相应的mod文件,建立外部数组类型的变量与mod文件名称的映射;
第三处理模块,用于将Fortran90程序代码的内部数组变量替换为Cuda程序代码的变量,将Fortran90程序代码的外部数组变量替换为Cuda程序代码的变量;
第四处理模块,用于将Fortran90程序代码中与Cuda不兼容的关键字、语句替换为正确的格式,将Cuda中无需使用的语句注释;
第五处理模块,用于将Fortran90程序代码中对应的数组格式、下标索引转换为Cuda程序代码;
第六处理模块,用于保留原有Fortran90程序代码中的.h文件,根据use语句查找mod文件,提取其中的变量以及相关定义,生成新的Cuda程序代码头文件;
第七处理模块,用于调整Cuda程序代码中的函数调用格式。
本发明旨在实现Fortran90到Cuda的转换,由于shell的语法和结构较为简单,且开发效率高,利用sed、grep、awk语句与正则表达式进行结合更是具有强大的文本处理能力,因此采用shell进行相关功能的实现,从而达到较高的转换效率。其次尽可能保证原有程序的结构,完全保留程序原有的注释信息,即便对于Cuda中不需要的相关语句,也采取将其注释而非删除的策略,最大程度上保证程序的可读性,便于开展之后的相关工作。
附图说明
图1为本发明实施例提供的一种编程语言的转换方法流程示意图;
图2为图1所示方法的源文件转换示例;
图3为图1所示方法的头文件转换示例;
图4为图1所示方法的调整函数调用格式示例。
具体实施方式
下面结合附图与具体实施方式对本发明作进一步详细描述。
图1为本发明实施例提供的一种编程语言的转换方法流程示意图。如图1所示,该方法包括以下步骤:
步骤一、规范代码行。
将Fortran90程序代码进行预处理,保留原有程序代码的注释,对跨行程序代码进行合并处理,去除跨行符;在一个例子中,如图2所示,对Fortran90程序代码“!this istest program”进行规范化预处理,将其改写成Cuda程序代码“//!this is testprogram”。
步骤二、提取Fortran90程序代码中的全局变量名称。
具体为:对于Fortran90程序代码中的real、dimension类型的变量,提取内部变量名称以及对应的维度信息;根据下标运算符“()”提取所有数组类型的变量;去除关键字、内部变量以及函数名称得到所有的外部数组变量名。
步骤三、查取数据组格式
根据use语句查找相应的mod文件,建立外部数组类型的变量与mod文件名称的映射;
步骤四、转换数据组格式
根据不同的编译器替换变量名称,如ifort,将Fortran90程序代码的内部数组变量替换为Cuda程序代码的变量,将Fortran90程序代码的外部数组变量替换为Cuda程序代码的变量。例如,将Fortran90程序代码的内部数组变量a替换为Cuda程序代码的变量a_,将Fortran90程序代码的外部数组变量b替换为Cuda程序代码的外部数组变量fun_mod_mp_b。
步骤五、替换语法关键词
将Fortran90程序代码中与Cuda不兼容的关键字、语句替换为正确的格式,将Cuda中无需使用的语句注释。在一个例子中,如图2所示,将Fortran90程序代码“integer::i,j,k”替换为Cuda程序代码“int i,j,k”。
步骤六、将Fortran90程序代码中对应的数组格式、下标索引转换为Cuda程序代码;具体地,在处理do循环时,将Fortran90程序代码中对应的数组格式A[i][j]转换为Cuda程序代码对应的数组格式A[i*n+j],其中n是a的第二维度。在一个例子中,如图2所示,将Fortran90程序代码“do j=1,m;c(j,i)=0”替换为Cuda程序代码“if(j>=0&&j<=m){param_mp_c[i*m+j]=0}”。
步骤七、处理头文件
保留原有Fortran90程序代码中的.h文件,根据use语句查找mod文件,提取其中的变量以及相关定义,生成新的Cuda程序代码头文件,如图3所示。
步骤八、调整Cuda程序代码中的函数调用格式。
具体地,从Cuda程序代码中的头文件中筛选所有外部变量的定义,依次进行比对,保留源文件使用到的变量;结合外部数组类型的变量,得到kernel核函数的参数表列;如图3中的“(double*d_a,double*d_b,double*d_c)”。对使用到的变量进行声明及内存分配,生成init函数。对相应的变量完成内存的拷贝,生成HtoD以及DtoH函数;主程序中增加启动线程参数设置,完成对核函数的调用。
相应地,本发明实施例还提供一种编程语言的转换系统,其包括:
第一处理模块,用于将Fortran90程序代码进行预处理,保留原有程序代码的注释,对跨行程序代码进行合并处理,去除跨行符;
第二处理模块,用于提取Fortran90程序代码中的全局变量名称,根据use语句查找相应的mod文件,建立外部数组类型的变量与mod文件名称的映射;
第三处理模块,用于将Fortran90程序代码的内部数组变量替换为Cuda程序代码的变量,将Fortran90程序代码的外部数组变量替换为Cuda程序代码的变量;
第四处理模块,用于将Fortran90程序代码中与Cuda不兼容的关键字、语句替换为正确的格式,将Cuda中无需使用的语句注释;
第五处理模块,用于将Fortran90程序代码中对应的数组格式、下标索引转换为Cuda程序代码;
第六处理模块,用于保留原有Fortran90程序代码中的.h文件,根据use语句查找mod文件,提取其中的变量以及相关定义,生成新的Cuda程序代码头文件;
第七处理模块,用于调整Cuda程序代码中的函数调用格式。
本发明实施例采用shell进行相关功能的实现,从而达到较高的转换效率。其次尽可能保证原有程序的结构,完全保留程序原有的注释信息,即便对于Cuda中不需要的相关语句,也采取将其注释而非删除的策略,最大程度上保证程序的可读性,便于开展之后的相关工作。
显而易见,在不偏离本发明的真实精神和范围的前提下,在此描述的本发明可以有许多变化。因此,所有对于本领域技术人员来说显而易见的改变,都应包括在本权利要求书所涵盖的范围之内。本发明所要求保护的范围仅由所述的权利要求书进行限定。
Claims (10)
1.一种编程语言的转换方法,其特征在于,包括以下步骤:
将Fortran90程序代码进行预处理,保留原有程序代码的注释,对跨行程序代码进行合并处理,去除跨行符;
提取Fortran90程序代码中的全局变量名称,根据use语句查找相应的mod文件,建立外部数组类型的变量与mod文件名称的映射;
将Fortran90程序代码的内部数组变量替换为Cuda程序代码的变量,将Fortran90程序代码的外部数组变量替换为Cuda程序代码的变量;
将Fortran90程序代码中与Cuda不兼容的关键字、语句替换为正确的格式,将Cuda中无需使用的语句注释;
将Fortran90程序代码中对应的数组格式、下标索引转换为Cuda程序代码;
保留原有Fortran90程序代码中的.h文件,根据use语句查找mod文件,提取其中的变量以及相关定义,生成新的Cuda程序代码头文件;
调整Cuda程序代码中的函数调用格式。
2.根据权利要求1所述的方法,其特征在于,所述提取Fortran90程序代码中的全局变量名称步骤,包括:
提取内部变量名称以及对应的维度信息;
根据下标运算符“()”提取所有数组类型的变量;
去除关键字、内部变量以及函数名称得到所有的外部数组变量名。
3.根据权利要求1所述的方法,其特征在于,所述调整Cuda程序代码中的函数调用格式步骤,包括:
从Cuda程序代码中的头文件中筛选所有外部变量的定义,依次进行比对,保留源文件使用到的变量;结合外部数组类型的变量,得到kernel函数的参数表列;
对使用到的变量进行声明及内存分配,生成init函数;
对相应的变量完成内存的拷贝,生成HtoD以及DtoH函数;
主程序中增加启动线程参数设置,完成对核函数的调用。
4.根据权利要求1所述的方法,其特征在于,所述将Fortran90程序代码的内部数组变量替换为Cuda程序代码的变量,将Fortran90程序代码的外部数组变量替换为Cuda程序代码的变量步骤,包括:
将Fortran90程序代码的内部数组变量a替换为Cuda程序代码的变量a_,将Fortran90程序代码的外部数组变量b替换为Cuda程序代码的外部数组变量fun_mod_mp_b_。
5.根据权利要求1所述的方法,其特征在于,将Fortran90程序代码中对应的数组格式、下标索引转换为Cuda程序代码步骤,包括:
在处理do循环时,将Fortran90程序代码中对应的数组格式A[i][j]转换为Cuda程序代码对应的数组格式A[i*n+j],其中n是a的第二维度。
6.一种编程语言的转换系统,其特征在于,包括:
第一处理模块,用于将Fortran90程序代码进行预处理,保留原有程序代码的注释,对跨行程序代码进行合并处理,去除跨行符;
第二处理模块,用于提取Fortran90程序代码中的全局变量名称,根据use语句查找相应的mod文件,建立外部数组类型的变量与mod文件名称的映射;
第三处理模块,用于将Fortran90程序代码的内部数组变量替换为Cuda程序代码的变量,将Fortran90程序代码的外部数组变量替换为Cuda程序代码的变量;
第四处理模块,用于将Fortran90程序代码中与Cuda不兼容的关键字、语句替换为正确的格式,将Cuda中无需使用的语句注释;
第五处理模块,用于将Fortran90程序代码中对应的数组格式、下标索引转换为Cuda程序代码;
第六处理模块,用于保留原有Fortran90程序代码中的.h文件,根据use语句查找mod文件,提取其中的变量以及相关定义,生成新的Cuda程序代码头文件;
第七处理模块,用于调整Cuda程序代码中的函数调用格式。
7.根据权利要求6所述的系统,其特征在于,所述第二处理模块,具体用于:
提取内部变量名称以及对应的维度信息;
根据下标运算符“()”提取所有数组类型的变量;
去除关键字、内部变量以及函数名称得到所有的外部数组变量名。
8.根据权利要求6所述的系统,其特征在于,所述第七处理模块,具体用于:
从Cuda程序代码中的头文件中筛选所有外部变量的定义,依次进行比对,保留源文件使用到的变量;结合外部数组类型的变量,得到kernel函数的参数表列;
对使用到的变量进行声明及内存分配,生成init函数;
对相应的变量完成内存的拷贝,生成HtoD以及DtoH函数;
主程序中增加启动线程参数设置,完成对核函数的调用。
9.根据权利要求6所述的系统,其特征在于,所述第三处理模块,具体用于:
将Fortran90程序代码的内部数组变量a替换为Cuda程序代码的变量a_,将Fortran90程序代码的外部数组变量b替换为Cuda程序代码的外部数组变量fun_mod_mp_b_。
10.根据权利要求6所述的系统,其特征在于,所述第五处理模块,具体用于:
在处理do循环时,将Fortran90程序代码中对应的数组格式A[i][j]转换为Cuda程序代码对应的数组格式A[i*n+j],其中n是a的第二维度。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011348724.7A CN112328258A (zh) | 2020-11-26 | 2020-11-26 | 一种编程语言的转换方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011348724.7A CN112328258A (zh) | 2020-11-26 | 2020-11-26 | 一种编程语言的转换方法及系统 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN112328258A true CN112328258A (zh) | 2021-02-05 |
Family
ID=74308967
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011348724.7A Pending CN112328258A (zh) | 2020-11-26 | 2020-11-26 | 一种编程语言的转换方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112328258A (zh) |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101019100A (zh) * | 2004-01-26 | 2007-08-15 | 萨维索弗特/选项无限搜索公司 | 将电子数据表模型转换为可调用、经编译的例行程序的程序/方法 |
CN102622470A (zh) * | 2012-02-21 | 2012-08-01 | 重庆邮电大学 | 一种通用汽车代码转换方法 |
CN109543368A (zh) * | 2018-11-23 | 2019-03-29 | 杭州哲信信息技术有限公司 | 一种基于中间语言解释器的跨平台源码虚拟化保护方法 |
-
2020
- 2020-11-26 CN CN202011348724.7A patent/CN112328258A/zh active Pending
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101019100A (zh) * | 2004-01-26 | 2007-08-15 | 萨维索弗特/选项无限搜索公司 | 将电子数据表模型转换为可调用、经编译的例行程序的程序/方法 |
CN102622470A (zh) * | 2012-02-21 | 2012-08-01 | 重庆邮电大学 | 一种通用汽车代码转换方法 |
CN109543368A (zh) * | 2018-11-23 | 2019-03-29 | 杭州哲信信息技术有限公司 | 一种基于中间语言解释器的跨平台源码虚拟化保护方法 |
Non-Patent Citations (2)
Title |
---|
G107904: "Fortran 90笔记(一)", 《HTTPS://BLOG.CSDN.NET/G107904/ARTICLE/DETAILS/61629265》 * |
段红英: "Fortran程序CUDA并行化总结", 《物联网技术》 * |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107861728B (zh) | 用于传统程序语言向现代程序语言转换的方法及其系统 | |
CN1153141C (zh) | 调试优化代码的方法和设备 | |
CN111813796B (zh) | 基于Hive数据仓库的数据列级血缘处理系统及方法 | |
CN103309904A (zh) | 一种生成数据仓库etl 代码的方法及装置 | |
CN112988873A (zh) | 一种数据处理方法和装置 | |
CN112416365A (zh) | 文件转换方法、装置及存储介质 | |
WO2023087720A1 (zh) | 小程序生成方法、装置、设备及存储介质 | |
CN115221143A (zh) | 一种跨类型迁移的算子化多源大数据处理方法 | |
Pai T et al. | A systematic literature review of lexical analyzer implementation techniques in compiler design | |
CN114385173A (zh) | 编译方法、装置、设备及存储介质 | |
CN112328258A (zh) | 一种编程语言的转换方法及系统 | |
CN116955393A (zh) | 一种数据处理方法、装置、电子设备及存储介质 | |
CN115686493A (zh) | 一种c语言数据结构代码自动生成接口控制文档的方法 | |
CN113467828A (zh) | 一种异构众核处理器中编程语言转换方法和系统 | |
US7117209B2 (en) | Record trimming method, apparatus, and system to improve processing in a sort utility | |
CN1252586C (zh) | 产生优化的计算机数据字段转换例程 | |
CN109739506B (zh) | 一种高性能应用编译中库函数缺失的处理方法及系统 | |
CN113282681B (zh) | 一种多源异构数据的描述方法、解析方法及装置 | |
CN118173180A (zh) | 一种单细胞转录组分析系统 | |
CN116126300A (zh) | 代码生成方法及装置、电子设备及计算机可读存储介质 | |
CN117609103A (zh) | 基于viatra的大规模低代码系统模型验证的自动映射方法 | |
CN117632911A (zh) | 数据库过程语言迁移方法及装置 | |
CN115129714A (zh) | 一种基于侵入式容器和代码生成技术的数据表生成方法 | |
CN117369824A (zh) | 基于接口文档的代码生成方法、装置、设备及存储介质 | |
CN114721665A (zh) | 一种网页代码生成方法、装置、电子设备及存储介质 |
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 | ||
RJ01 | Rejection of invention patent application after publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20210205 |