CN114047926A - 数组计算表达语言的转换方法、装置、设备及存储介质 - Google Patents
数组计算表达语言的转换方法、装置、设备及存储介质 Download PDFInfo
- Publication number
- CN114047926A CN114047926A CN202111304753.8A CN202111304753A CN114047926A CN 114047926 A CN114047926 A CN 114047926A CN 202111304753 A CN202111304753 A CN 202111304753A CN 114047926 A CN114047926 A CN 114047926A
- Authority
- CN
- China
- Prior art keywords
- array
- language
- calculation expression
- expression code
- code segment
- 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
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/51—Source to source
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
本发明实施例公开了一种数组计算表达语言的转换方法、装置、设备及存储介质。该方法包括:获取第一语言的数组标识与第二语言的数组标识的关系;通过设定函数对所述关系进行定义,形成预定义数组代码片段;将第一语言的数组计算表达代码片段转换成第二语言的旧版本数组计算表达代码片段;将所述预定义数组代码片段添加到第二语言的旧版本数组计算表达代码片段中,生成第二语言的新版本数组计算表达代码片段;其中,所述数组计算表达代码片段中包含的数组元素采用数组标识进行标记。通过本发明实施例的技术方案,能够增加程序的可读性,可以提高工作人员的编程效率。
Description
技术领域
本发明实施例涉及计算机技术领域,尤其涉及一种数组计算表达语言的转换方法、装置、设备及存储介质。
背景技术
随着科技的飞速发展,计算机领域的技术人员逐渐使用多个处理器来并行计算求解同一问题,即将被求解的问题分解成若干个部分,各部分均由一个独立的处理机来并行计算,从而大大的提升计算速度,因此,需要将之前已经编写好多个的程序统一转换为便于技术人员使用的表达语言。
但考虑到程序的表达语言中数组维度的不确定性以及语言转换的可读性,数组计算表达语言的转换方法已成为研究难点,目前己有一些研究提出了数组计算表达语言的转换方法,但是这些方法在语言转换过程中转码过程中容易出现错误,并且有些方法通常需要增加额外的代码,导致转换的语言可读性较差,降低了工作人员的编程效率。
发明内容
本发明实施例提供一种数组计算表达语言的转换方法、装置、设备及存储介质,可以增加程序的可读性,并且可以提高工作人员的编程效率。
第一方面,本发明实施例提供了一种数组计算表达语言的转换方法,包括:
获取第一语言的数组标识与第二语言的数组标识的关系;
通过设定函数对所述关系进行定义,形成预定义数组代码片段;
将第一语言的数组计算表达代码片段转换成第二语言的旧版本数组计算表达代码片段;
将所述预定义数组代码片段添加到第二语言的旧版本数组计算表达代码片段中,生成第二语言的新版本数组计算表达代码片段;其中,所述数组计算表达代码片段中包含的数组元素采用数组标识进行标记。
可选的,所述获取第一语言的数组标识与第二语言的数组标识的关系,包括:
若所述第一语言的数组为多维数组,确定所述第一语言的数组下标和所述第二语言的数组下标在每个维度上的取值范围;
基于所述取值范围确定所述第一语言的数组下标和所述第二语言的数组下标的关系。
上述技术方案通过在第一语言的数组为多维数组时,依据第一语言的数组下标和第二语言的数组下标在每个维度上的取值范围,对第一语言的数组下标和第二语言的数组下标的关系进行确定,可以直观地表示出第一语言的数组下标和第二语言的数组下标的关系,为后续数组计算表达语言的转换提供了基础。
可选的,所述通过设定函数对所述关系进行定义,包括:
若所述第一语言的数组为多维数组,通过设定函数将所述第一语言的数组下标和所述第二语言的数组下标在每个维度上的关系进行定义。
上述技术方案通过在第一语言的数组为多维数组时,利用设定函数对第一语言的数组下标和第二语言的数组下标在每个维度上的关系进行定义,可以使数组的表达方式更加简洁,为后续数组计算表达语言的转换提供了基础。
可选的,所述设定函数包括宏定义函数。
上述技术方案通过将设定函数的类型指定为宏定义函数,可以使数组的表达方式更加简洁,为后续数组计算表达语言的转换提供了基础。
可选的,还包括:运行所述第一语言的数组计算表达代码片段,确定数组的计算表达对应的数值,作为第一数值;
运行所述第二语言的新版本数组的计算表达代码片段,确定数组的计算表达对应的数值,作为第二数值;
若所述第一数值和所述第二数值相同,判断所述第二语言的数组的计算表达代码片段正确。
上述技术方案通过将第一数值与第二数值相同的情况作为判断第二语言的数组的计算表达代码片段正确的依据,可以实现对数组计算表达语言的转换方法进行合理的验证,保证了方法的准确性。
可选的,还包括:若所述第一数值和所述第二数值不相同,判断所述第二语言的新版本数组的计算表达代码片段错误;
返回获取第一语言的数组标识与第二语言的数组标识的关系的操作。
上述技术方案通过将第一数值与第二数值不同的情况作为判断第二语言的数组的计算表达代码片段错误的依据,并提出合理的解决方案,可以使数组计算表达语言的转换方法更加完善。
可选的,所述第一语言包括Fortran语言,所述第二语言包括C语言。
上述技术方案通过将第一语言指定为Fortran语言,第二语言指定为C语言,可以为数组计算表达语言的转换方法提供更为具体的使用场景,保证了数组计算表达语言的转换方法的可执行性。
第二方面,本发明实施例还提供了一种数组计算表达语言的转换装置,该装置包括:
获取模块,用于获取第一语言的数组标识与第二语言的数组标识的关系;
定义模块,用于通过设定函数对所述关系进行定义,形成预定义数组代码片段;
代码转换模块,用于将第一语言的数组计算表达代码片段转换成第二语言的旧版本数组计算表达代码片段;
添加模块,用于将所述预定义数组代码片段添加到第二语言的旧版本数组计算表达代码片段中,生成第二语言的新版本数组计算表达代码片段;其中,所述数组计算表达代码片段中包含的数组元素采用数组标识进行标记。
第三方面,本发明实施例还提供了一种电子设备,包括:
一个或多个处理器;
存储装置,用于存储一个或多个程序,
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如本发明任一实施例所述的方法。
第四方面,本发明实施例还提供了一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现如本发明任一实施例所述的方法。
本发明实施例的技术方案通过利用设定函数对第一语言的数组标识与第二语言的数组标识的关系进行定义,生成预定义数组代码片段,再将第一语言的数组计算表达代码片段转换成第二语言的旧版本数组计算表达代码片段,并将预定义数组代码片段添加到第二语言的旧版本数组计算表达代码片段中,生成第二语言的新版本数组计算表达代码片段,实现了增加程序的可读性,可以提高工作人员编程效率的效果。
附图说明
图1a是本发明实施例提供的一种数组计算表达语言的转换方法的流程图;
图1b是本发明实施例所适用的一种Fortran语言数组和C语言数组在内存中的存储情况示意图;
图1c是本发明实施例所适用的一种Fortran语言数组和C语言数组在内存中的逻辑存储状态示意图;
图1d是本发明实施例所适用的一种Fortran语言数组和C语言数组的声明差异示意图;
图2是本发明实施例提供的一种数组计算表达语言的转换方法的流程图;
图3是本发明实施例提供的一种数组计算表达语言的转换装置的结构示意图;
图4是本发明实施例提供的一种电子设备的结构示意图。
具体实施方式
下面结合附图和实施例对本发明作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释本发明,而非对本发明的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与本发明相关的部分而非全部结构。
随着科技的飞速发展,计算机领域的技术人员逐渐使用多个处理器来并行计算求解同一问题,从而大大的提升计算速度,因此,需要将之前已经编写好多个的程序统一转换为便于技术人员使用的表达语言。
而公式翻译(Formula Translation,Fortran)语言凭借其简单直观、矩阵运算功能强大、语法严格等优点,成为在开放式软件平台(ROCm,Platform for GPU-Enabled HPCandUltrascale Computing)上并行计算时优先考虑的表达语言。其中,Fortran语言可以为科学、工程问题或企事业管理中的那些能够用数学公式表达的问题而设计的语言,数值计算的功能较强;其中,ROCm平台是AMD公司研发的一个开源、高性能和超大规模集群GPU通用计算平台(编程框架),与nvidia的统一计算设备架构平台(CUDA,Compute UnifiedDeviceArchitecture)类似;其中,并行计算可以是指同时使用多种计算资源解决计算问题的过程,是提高计算机系统计算速度和处理能力的一种有效手段,可以用多个处理器来协同求解同一问题,即将被求解的问题分解成若干个部分,各部分均由一个独立的处理器来并行计算。
但是,在ROCm平台上并行计算Fortran程序必须进行异构移植,即通过Fortran转码为CUDAFortran,再转为CUDA C,再通过ROCm中自带工具hipify将CUDA C程序自动转码为HIP C,才可以在ROCm平台上进行并行计算。
在将CUDAFortran转换CUDA C的情况下,由于C语言表达数组的不同,例如,对于一个10*10*10的三维数组,某一元素在Fortran语言中的标记位置为a(2,3,4),在C语言中该元素的相应表达式应为a(2+3*10+4*10*10),因此,在转码过程中需要计算数组下标,容易出现错误,并且转换的语言较长,可读性较差。另外,数组计算表达语言的转换方法通常使用类来定义数组变量的数组下标或者使用模板类的方法将类的属性和参数抽象化,以此简化数组计算表达语言的转换代码片段。然而,由于Fortran数组维度的不确定性,有时会同时存在三维数组和二维数组,若使用类来定义数组变量的数组下标就需要定义多个类,若使用模板类的方法通常还需要额外的代码,以致程序的可读性降低。因此,本发明实施例提出了一种数组计算表达语言的转换方法,实现了增加程序的可读性以及可以提高工作人员的编程效率的效果。
图1a为本发明实施例提供的一种数组计算表达语言的转换方法的流程图,本发明实施例可适用于数组计算表达语言进行转换的情况,该方法可以由数组计算表达语言的转换装置来执行,该装置可采用硬件和/或软件的方式实现,并一般可以集成在电子设备中,该电子设备可以是终端设备、服务器等。
如图1a所示,本发明实施例提供的一种数组计算表达语言的转换方法包括以下具体步骤:
S110:获取第一语言的数组标识与第二语言的数组标识的关系。
其中,第一语言可以指需要进行数组计算表达语言转换的语言;第二语言可以指进行数组计算表达语言转换后显现的语言。在本发明实施例中,第一语言包括Fortran语言,第二语言包括C语言。
其中,数组标识可以是数组下标;由于内存中是没有行列概念的,因此,不论是二维数组还是三维数组,都是以“一条线”的形式存储在内存中;而高级语言通常不会直接访问内存地址,所以Fortran和C使用数组来“命名”这些内存地址,并且通过数组名称结合数组下标来实现随机访问这些内存地址。因此,第一语言的数组标识与第二语言的数组标识的关系可以指第一语言的数组下标与第二语言的数组下标之间的关系。具体的,如图1b所示为Fortran语言数组和C语言数组在内存中的存储情况示意图。如图1c所示为Fortran语言数组和C语言数组在内存中的逻辑存储状态示意图,其中,左侧两列表示Fortran语言数组在内存中的逻辑存储状态,右侧两行表示C语言数组在内存中的逻辑存储状态。以内存地址为0x0041F100-0x0041F1001C为例,Fortran语言数组a(1,1)和C语言数组a[0][0]均表示存储在0x0041F100的数值1;Fortran语言数组a(2,1)和C语言数组a[0][1]均表示存储在0x0041F100的数值2;其余Fortran语言数组和C语言数组表示存储的数值以此为例。因此,Fortran语言数组的下标(1,1)和C语言数组的下标[0][0]存在对应关系;Fortran语言数组的下标(2,1)和C语言数组的下标[0][1]存在对应关系;其余Fortran语言数组的下标和C语言数组的下标存在的对应关系以此类推。
在本发明实施例的一个实施方式中,可选的,所述获取第一语言的数组标识与第二语言的数组标识的关系,包括:若所述第一语言的数组为多维数组,确定所述第一语言的数组下标和所述第二语言的数组下标在每个维度上的取值范围;基于所述取值范围确定所述第一语言的数组下标和所述第二语言的数组下标的关系。示例性的,如图1d所示为Fortran语言数组和C语言数组的声明差异示意图。以数组维度为一维,Fortran语言数组的取值范围为从a(-2)至a(3),C语言数组的取值范围为从a[0]至a[5]为例。从Fortran语言转换成C语言时,若Fortran语言的某一数组为a(n),则可以根据Fortran语言数组和C语言数组的取值范围得出对应的C语言数组为a(n-(-2));以此类推,当为三维数组时,计算更为复杂,若Fortran数组定义array(x1:x2,y1:y2,z1:z2),其中,x1:x2为Fortran数组在第一维度的取值范围,y1:y2为Fortran数组在第二维度的取值范围,z1:z2为Fortran数组在第三维度的取值范围,取特定Fortran数组元素array(3,4,5),则对应的C语言数组元素为:
array((3-x1)+(4-y1)*(x2-x1+1)+(5-z1)*(x2-x1+1)*(y1-y2+1))
上述技术方案通过在第一语言的数组为多维数组时,依据第一语言的数组下标和第二语言的数组下标在每个维度上的取值范围,对第一语言的数组下标和第二语言的数组下标的关系进行确定,可以直观地表示出第一语言的数组下标和第二语言的数组下标的关系,可以简化后续数组计算表达语言的转换。
S120:通过设定函数对所述关系进行定义,形成预定义数组代码片段。
可选的,设定函数包括宏定义函数,或者还可以是与宏定义函数功能相同的函数。
在本发明实施例的一个可选的实施方式中,所述通过设定函数对所述关系进行定义,包括:若所述第一语言的数组为多维数组,通过设定函数将所述第一语言的数组下标和所述第二语言的数组下标在每个维度上的关系进行定义。
具体的,当第一语言的数组为多维数组,则分别将每一个维度上的第一语言的数组下标和第二语言的数组下标的关系进行定义,将定义的所有代码共同组成预定义数组代码片段。
示例性的,第一语言为Fortran语言,第二语言为C语言,若Fortran数组定义array(x1:x2,y1:y2,z1:z2),取特定Fortran数组元素array(a,b,c),则对应的C语言数组元素为:array+(a-x1)+(b-y1)*(x2-x1+1)+(c-z1)*(x2-x1+1)*(y1-y2+1),通过宏定义函数定义Fortran语言和C语言的数组标识之间的关系可以参考如下:
#define array(a,b,c)((array+(a-x1)+(b-y1)*(x2-x1+1)+(c-z1)*(x2-x1+1)*(y1-y2+1)))。其中,若Fortran语言存在多个数组,则可以通过宏定义函数进行数组标识关系的定义。
由此,通过将设定函数的类型指定为宏定义函数,可以使数组的表达方式更加简洁,为后续数组计算表达语言的转换提供了基础。
S130:将第一语言的数组计算表达代码片段转换成第二语言的旧版本数组计算表达代码片段。
其中,第二语言的旧版本数组计算表达代码片段可以指依据常规方法所生成的第二语言的数组计算表达代码片段。
示例性的,以一个三维数组u(i,j,k)为例,若第一语言为Fortran语言,第二语言为C语言,依据常规方法所生成的第二语言的数组计算表达代码片段的部分内容可以参考如下:
S140:将所述预定义数组代码片段添加到第二语言的旧版本数组计算表达代码片段中,生成第二语言的新版本数组计算表达代码片段;其中,所述数组计算表达代码片段中包含的数组元素采用数组标识进行标记。
其中,第二语言的新版本数组计算表达代码片段可以指依据本发明实施例的技术方案所生成的第二语言的数组计算表达代码片段。
在本发明实施例中,数组计算表达代码片段可以包含数组元素的计算表达式,其中,数组采用数组标识进行标记,示例性的,数组元素的计算表达式可以是u(i,j,k)=a+b+c。其中,可以将预定义数组代码片段添加到第二语言的旧版本数组计算表达代码片段中,即可形成第二语言的新版本数组计算表达代码片段,避免了使用常规方法生成第二语言的数组计算表达代码片段引起的代码冗长且可读性差的问题。
示例性的,以一个三维数组u(i,j,k)为例,若第一语言为Fortran语言,第二语言为C语言,其中,Fortran语言的数组计算表达代码片段的部分内容可以参考如下:
CUDAFortran
if……
……
u(i,j,k)=rdx(i,j)*(u(i,j,k)+dt/(delpc(i,j,k)+delpc(i+1,j,k))*\((gz(i,j,k+1)-gz(i+1,j,k))*(pf(i+1,j,k+1)-pf(i,j,k))\+(gz(i,j,k)-gz(i+1,j,k+1)*(pf(i,j,k+1)-pf(i+1,j,k);
……
通过宏定义函数进行定义后,形成的C语言数组计算表达代码片段的部分内容可如下所示:
#define u(i,j,k)(*(u+(i-isd)+(j-jsd)*(ied-isd+1)+(k-1)*(ied-isd+1)*(jed+1-jsd+1)))
#define pf(i,j,k)(*(pf+(i-isd)+(j-jsd)*(ied-isd+1)+(k-1)*(ied-isd+1)*(jed+1-jsd+1)))
#define gz(i,j,k)(*(gz+(i-isd)+(j-jsd)*(ied-isd+1)+(k-1)*(ied-isd+1)*(jed+1-jsd+1)))
#define delp(i,j,k)(*(delp+(i-isd)+(j-jsd)*(ied-isd+1)+(k-1)*(ied-isd+1)*(jed+1-jsd+1)))
#define rdx(i,j)(*(rdx+(i-isd)+(j-jsd)*(ied-isd+1)))
If……
……
u(i,j,k)=rdx(i,j)*(u(i,j,k)+dt/(delpc(i,j,k)+delpc(i+1,j,k))*\((gz(i,j,k+1)-gz(i+1,j,k))*(pf(i+1,j,k+1)-pf(i,j,k))\+(gz(i,j,k)-gz(i+1,j,k+1)*(pf(i,j,k+1)-pf(i+1,j,k);
……
由此可见,通过上述方式进行计算表达语言的转换,转换后的代码片段与转换前的代码片段相似度较高,可以使繁琐的数组表达简化,可以增加程序的可读性,提高了工作人员的额编程效率。
而相关技术中的CUDA C代码片段通常直接使用预定义数组代码片段中的“(i-isd)+(j-jsd)*(ied-isd+1)+(k-1)*(ied-isd+1)*(jed+1-jsd+1)”对u(i,j,k)计算表达式中的i,j,k进行表达,代码片段较长,可读性较差;相关技术中采用class来定义数组标识的方式,即通过class定义形成一个代码片段,需要调用class代码片段完成计算,对于三维数组或者二维数组,需要定义多个class,效率较低,使用模板类定义数组下标的方式,依然需要额外的代码,运算效率较低。通过本发明实施例提供的方法均可以克服相关技术中的缺陷,增加程序的可读性以及准确性,可以提高运算速度,可以提高编程效率。
本发明实施例的技术方案通过利用设定函数对第一语言的数组标识与第二语言的数组标识的关系进行定义,生成预定义数组代码片段,再将第一语言的数组计算表达代码片段转换成第二语言的旧版本数组计算表达代码片段,并将预定义数组代码片段添加到第二语言的旧版本数组计算表达代码片段中,生成第二语言的新版本数组计算表达代码片段,实现了增加程序的可读性以及可以提高工作人员编程效率的效果。
图2为本发明实施例提供的一种数组计算表达语言的转换方法的流程图。在本实施例中,可选的,还包括:运行所述第一语言的数组计算表达代码片段,确定数组的计算表达对应的数值,作为第一数值;运行所述第二语言的数组的计算表达代码片段,确定数组的计算表达对应的数值,作为第二数值;若所述第一数值和所述第二数值相同,判断所述第二语言的数组的计算表达代码片段正确。
可选的,还包括:若所述第一数值和所述第二数值不相同,判断所述第二语言的数组的计算表达代码片段错误;返回获取第一语言的数组标识与第二语言的数组标识的关系的操作。
如图2所示,本发明实施例提供的一种数组计算表达语言的转换方法包括以下具体步骤:
S210:获取第一语言的数组标识与第二语言的数组标识的关系。
S220:通过设定函数对所述关系进行定义,形成预定义数组代码片段。
S230:将第一语言的数组计算表达代码片段转换成第二语言的旧版本数组计算表达代码片段。
S240:将所述预定义数组代码片段添加到第二语言的旧版本数组计算表达代码片段中,生成第二语言的新版本数组计算表达代码片段;其中,所述数组计算表达代码片段中包含的数组元素采用数组标识进行标记。
S250:运行所述第一语言的数组计算表达代码片段,确定数组的计算表达对应的数值,作为第一数值。
其中,第一数值可以指运行第一语言的数组计算表达代码片段得到的数值,例如,运行第一语言的数组计算表达代码片段后得出u(i,j,k)=6,6即为第一数值。
S260:运行所述第二语言的新版本数组的计算表达代码片段,确定数组的计算表达对应的数值,作为第二数值。
其中,第二数值可以指运行第二语言的新版本数组计算表达代码片段得到的数值,例如,运行第二语言的新版本数组计算表达代码片段后得出u(i,j,k)=6,6即为第二数值。
S260:判断第一数值和所述第二数值是否相同。若是,执行S270;若否,S280。
S270:判断所述第二语言的新版本数组的计算表达代码片段正确。
具体的,如果第一数值和第二数值相同,证明运行第二语言的新版本数组的计算表达代码片段所得的第二语言数组对应的数值与运行第一语言的数组的计算表达代码片段所得的第一语言数组对应的数值相同,即第二语言的新版本数组的计算表达代码片段正确。
S280:判断所述第二语言的新版本数组的计算表达代码片段错误,并返回执行S210。
具体的,如果第一数值和第二数值不相同,证明运行第二语言的新版本数组的计算表达代码片段所得的第二语言数组对应的数值与运行第一语言的数组的计算表达代码片段所得的第一语言数组对应的数值不相同,即第二语言的新版本数组的计算表达代码片段错误。需要重新获取第一语言的数组标识与第二语言的数组标识的关系,并继续执行其余步骤,直至第一数值和第二数值相同。
本发明实施例的技术方案通过利用设定函数对第一语言的数组标识与第二语言的数组标识的关系进行定义,生成预定义数组代码片段,再将第一语言的数组计算表达代码片段转换成第二语言的旧版本数组计算表达代码片段,并将预定义数组代码片段添加到第二语言的旧版本数组计算表达代码片段中,生成第二语言的新版本数组计算表达代码片段,并将第一数值与第二数值相同的情况作为判断第二语言的新版本数组的计算表达代码片段正确的依据,将第一数值与第二数值不同的情况作为判断第二语言的新版本数组的计算表达代码片段错误的依据,使数组计算表达语言的转换方法更加完善,解决了现有技术在转码过程中容易出现的转换的语言可读性较差且由于需要额外的代码导致的运算速度降低的问题,实现了增加程序的可读性以及可以提高编程效率的效果。
图3为本发明实施例提供的一种数组计算表达语言的转换装置的结构示意图,该装置可以执行上述各实施例中涉及到的数组计算表达语言的转换方法。该装置可采用软件和/或硬件的方式实现,如图3所示,所述数组计算表达语言的转换装置具体包括:获取模块310、定义模块320、代码转换模块330、添加模块340。
其中,获取模块310,用于获取第一语言的数组标识与第二语言的数组标识的关系;
定义模块320,用于通过设定函数对所述关系进行定义,形成预定义数组代码片段;
代码转换模块330,用于将第一语言的数组计算表达代码片段转换成第二语言的旧版本数组计算表达代码片段;
添加模块340,用于将所述预定义数组代码片段添加到第二语言的旧版本数组计算表达代码片段中,生成第二语言的新版本数组计算表达代码片段;其中,所述数组计算表达代码片段中包含的数组元素采用数组标识进行标记。
本发明实施例的技术方案通过利用设定函数对第一语言的数组标识与第二语言的数组标识的关系进行定义,生成预定义数组代码片段,再将第一语言的数组计算表达代码片段转换成第二语言的旧版本数组计算表达代码片段,并将预定义数组代码片段添加到第二语言的旧版本数组计算表达代码片段中,生成第二语言的新版本数组计算表达代码片段,解决了现有技术在转码过程中容易出现的转换的语言可读性较差且由于需要额外的代码导致的运算速度降低的问题,实现了增加程序的可读性以及可以提高编程效率的效果。
可选的,获取模块310具体可以用于,若所述第一语言的数组为多维数组,确定所述第一语言的数组下标和所述第二语言的数组下标在每个维度上的取值范围;基于所述取值范围确定所述第一语言的数组下标和所述第二语言的数组下标的关系。
可选的,定义模块320具体可以用于,若所述第一语言的数组为多维数组,通过设定函数将所述第一语言的数组下标和所述第二语言的数组下标在每个维度上的关系进行定义。
可选的,所述设定函数包括宏定义函数。
可选的,数组计算表达语言的转换装置还可以包括第一判断模块,具体用于运行所述第一语言的数组计算表达代码片段,确定数组的计算表达对应的数值,作为第一数值;运行所述第二语言的数组的计算表达代码片段,确定数组的计算表达对应的数值,作为第二数值;若所述第一数值和所述第二数值相同,判断所述第二语言的数组的计算表达代码片段正确。
可选的,数组计算表达语言的转换装置还可以包括第二判断模块,具体用于若所述第一数值和所述第二数值不相同,判断所述第二语言的新版本数组的计算表达代码片段错误;返回获取第一语言的数组标识与第二语言的数组标识的关系的操作。
可选的,所述第一语言包括Fortran语言,所述第二语言包括C语言。
本发明实施例所提供的数组计算表达语言的转换装置可执行本发明任意实施例所提供的数组计算表达语言的转换方法,具备执行方法相应的功能模块和有益效果。
图4为本发明实施例提供的一种电子设备的结构示意图,如图4所示,该电子设备包括处理器410、存储器420、输入装置430和输出装置440;电子设备中处理器410的数量可以是一个或多个,图4中以一个处理器410为例;电子设备中的处理器410、存储器420、输入装置430和输出装置440可以通过总线或其他方式连接,图4中以通过总线连接为例。
存储器420作为一种计算机可读存储介质,可用于存储软件程序、计算机可执行程序以及模块,如本发明实施例中的数组计算表达语言的转换方法对应的程序指令/模块(例如,数组计算表达语言的转换装置中的获取模块310、定义模块320、代码转换模块330和添加模块340)。处理器410通过运行存储在存储器420中的软件程序、指令以及模块,从而执行电子设备的各种功能应用以及数据处理,即实现上述的数组计算表达语言的转换方法。
存储器420可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序;存储数据区可存储根据终端的使用所创建的数据等。此外,存储器420可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他非易失性固态存储器件。在一些实例中,存储器420可进一步包括相对于处理器410远程设置的存储器,这些远程存储器可以通过网络连接至电子设备。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
输入装置430可用于接收输入的数字或字符信息,以及产生与电子设备的用户设置以及功能控制有关的键信号输入。输出装置440可包括显示屏等显示设备。
本发明实施例还提供一种包含计算机可执行指令的存储介质,所述计算机可执行指令在由计算机处理器执行时用于执行一种数组计算表达语言的转换方法,该方法包括:
获取第一语言的数组标识与第二语言的数组标识的关系;
通过设定函数对所述关系进行定义,形成预定义数组代码片段;
将第一语言的数组计算表达代码片段转换成第二语言的旧版本数组计算表达代码片段;
将所述预定义数组代码片段添加到第二语言的旧版本数组计算表达代码片段中,生成第二语言的新版本数组计算表达代码片段;其中,所述数组计算表达代码片段中包含的数组元素采用数组标识进行标记。
当然,本发明实施例所提供的一种包含计算机可执行指令的存储介质,其计算机可执行指令不限于如上所述的方法操作,还可以执行本发明任意实施例所提供的数组计算表达语言的转换方法中的相关操作。
通过以上关于实施方式的描述,所属领域的技术人员可以清楚地了解到,本发明可借助软件及必需的通用硬件来实现,当然也可以通过硬件实现,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如计算机的软盘、只读存储器(Read-Only Memory,ROM)、随机存取存储器(RandomAccess Memory,RAM)、闪存(FLASH)、硬盘或光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。
值得注意的是,上述数组计算表达语言的转换装置的实施例中,所包括的各个单元和模块只是按照功能逻辑进行划分的,但并不局限于上述的划分,只要能够实现相应的功能即可;另外,各功能单元的具体名称也只是为了便于相互区分,并不用于限制本发明的保护范围。
注意,上述仅为本发明的较佳实施例及所运用技术原理。本领域技术人员会理解,本发明不限于这里所述的特定实施例,对本领域技术人员来说能够进行各种明显的变化、重新调整和替代而不会脱离本发明的保护范围。因此,虽然通过以上实施例对本发明进行了较为详细的说明,但是本发明不仅仅限于以上实施例,在不脱离本发明构思的情况下,还可以包括更多其他等效实施例,而本发明的范围由所附的权利要求范围决定。
Claims (10)
1.一种数组计算表达语言的转换方法,其特征在于,包括:
获取第一语言的数组标识与第二语言的数组标识的关系;
通过设定函数对所述关系进行定义,形成预定义数组代码片段;
将第一语言的数组计算表达代码片段转换成第二语言的旧版本数组计算表达代码片段;
将所述预定义数组代码片段添加到第二语言的旧版本数组计算表达代码片段中,生成第二语言的新版本数组计算表达代码片段;其中,所述数组计算表达代码片段中包含的数组元素采用数组标识进行标记。
2.根据权利要求1所述的方法,其特征在于,所述获取第一语言的数组标识与第二语言的数组标识的关系,包括:
若所述第一语言的数组为多维数组,确定所述第一语言的数组下标和所述第二语言的数组下标在每个维度上的取值范围;
基于所述取值范围确定所述第一语言的数组下标和所述第二语言的数组下标的关系。
3.根据权利要求1所述的方法,其特征在于,所述通过设定函数对所述关系进行定义,包括:
若所述第一语言的数组为多维数组,通过设定函数将所述第一语言的数组下标和所述第二语言的数组下标在每个维度上的关系进行定义。
4.根据权利要求3所述的方法,其特征在于,所述设定函数包括宏定义函数。
5.根据权利要求1所述的方法,其特征在于,还包括:
运行所述第一语言的数组计算表达代码片段,确定数组的计算表达对应的数值,作为第一数值;
运行所述第二语言的新版本数组的计算表达代码片段,确定数组的计算表达对应的数值,作为第二数值;
若所述第一数值和所述第二数值相同,判断所述第二语言的数组的计算表达代码片段正确。
6.根据权利要求5所述的方法,其特征在于,还包括:
若所述第一数值和所述第二数值不相同,判断所述第二语言的新版本数组的计算表达代码片段错误;
返回获取第一语言的数组标识与第二语言的数组标识的关系的操作。
7.根据权利要求1-6任一项所述的方法,其特征在于,
所述第一语言包括Fortran语言,所述第二语言包括C语言。
8.一种数组计算表达语言的转换装置,其特征在于,包括:
获取模块,用于获取第一语言的数组标识与第二语言的数组标识的关系;
定义模块,用于通过设定函数对所述关系进行定义,形成预定义数组代码片段;
代码转换模块,用于将第一语言的数组计算表达代码片段转换成第二语言的旧版本数组计算表达代码片段;
添加模块,用于将所述预定义数组代码片段添加到第二语言的旧版本数组计算表达代码片段中,生成第二语言的新版本数组计算表达代码片段;其中,所述数组计算表达代码片段中包含的数组元素采用数组标识进行标记。
9.一种电子设备,其特征在于,包括:
一个或多个处理器;
存储器,用于存储一个或多个程序,
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如权利要求1-7任一项所述的方法。
10.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现如权利要求1-7任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111304753.8A CN114047926A (zh) | 2021-11-05 | 2021-11-05 | 数组计算表达语言的转换方法、装置、设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111304753.8A CN114047926A (zh) | 2021-11-05 | 2021-11-05 | 数组计算表达语言的转换方法、装置、设备及存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114047926A true CN114047926A (zh) | 2022-02-15 |
Family
ID=80207337
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111304753.8A Pending CN114047926A (zh) | 2021-11-05 | 2021-11-05 | 数组计算表达语言的转换方法、装置、设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114047926A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117193782A (zh) * | 2023-08-04 | 2023-12-08 | 中国科学院软件研究所 | 一种从simscript语言到c语言的语法映射方法和装置 |
-
2021
- 2021-11-05 CN CN202111304753.8A patent/CN114047926A/zh active Pending
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117193782A (zh) * | 2023-08-04 | 2023-12-08 | 中国科学院软件研究所 | 一种从simscript语言到c语言的语法映射方法和装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9886268B1 (en) | Dual programming interface | |
US10387145B1 (en) | Mapping API parameters | |
US9449044B1 (en) | Mistake avoidance and correction suggestions | |
CN105824974B (zh) | 数据分析处理的方法和系统 | |
CN114036183A (zh) | 一种数据etl处理方法、装置、设备及介质 | |
EP3474158A1 (en) | Method and device for executing distributed computing task | |
CN113504900A (zh) | 一种编程语言转换方法和装置 | |
CN114047926A (zh) | 数组计算表达语言的转换方法、装置、设备及存储介质 | |
CN111143038A (zh) | Risc-v架构微处理器内核信息模型建模及生成方法 | |
CN103455466A (zh) | 计算器计算方法及系统 | |
CN110941655A (zh) | 一种数据格式转换方法及装置 | |
US8670973B2 (en) | Language translation reuse in different systems | |
Li et al. | Theoretical basis and implementation mechanism of the programming platform for ternary optical computer | |
CN109754087B (zh) | 量子程序转化方法、装置及电子设备 | |
CN109710419B (zh) | 基于文本分析的mpi代码通信过程解析方法 | |
JP2021192282A (ja) | 深層学習フレームワークにおけるパターン変換方法、装置、電子デバイス、コンピューター記憶媒体およびコンピュータープログラム製品 | |
CN112988298A (zh) | 可视化界面配置方法、装置、计算机设备及存储介质 | |
CN115062567B (zh) | 图数据中邻接节点集合的缩合操作方法、装置及电子设备 | |
CN116738900B (zh) | 知识产权块的代码转换装置和方法 | |
CN110737431A (zh) | 软件开发方法、开发平台、终端设备及存储介质 | |
US20240104297A1 (en) | Analysis of spreadsheet table in response to user input | |
US20230074230A1 (en) | Automatic generation of exporter configuration rules | |
CN115658797A (zh) | 数据处理方法、设备及存储介质 | |
CN118012501A (zh) | 一种基于图搜索网络和具象语法树的前端框架迁移方法 | |
CN116048584A (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 |