CN112328258A - 一种编程语言的转换方法及系统 - Google Patents

一种编程语言的转换方法及系统 Download PDF

Info

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
Application number
CN202011348724.7A
Other languages
English (en)
Inventor
张峰
姜金荣
迟学斌
刘颖辉
赵莲
郝卉群
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Computer Network Information Center of CAS
Original Assignee
Computer Network Information Center of CAS
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Computer Network Information Center of CAS filed Critical Computer Network Information Center of CAS
Priority to CN202011348724.7A priority Critical patent/CN112328258A/zh
Publication of CN112328258A publication Critical patent/CN112328258A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation

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的第二维度。
CN202011348724.7A 2020-11-26 2020-11-26 一种编程语言的转换方法及系统 Pending CN112328258A (zh)

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)

* Cited by examiner, † Cited by third party
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 杭州哲信信息技术有限公司 一种基于中间语言解释器的跨平台源码虚拟化保护方法

Patent Citations (3)

* Cited by examiner, † Cited by third party
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)

* Cited by examiner, † Cited by third party
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