《电子技术应用》
您所在的位置:首页 > 可编程逻辑 > 设计应用 > MATLAB到高性能C的代码转换系统设计与实现
MATLAB到高性能C的代码转换系统设计与实现
信息技术与网络安全 6期
余泽霖1,2,徐 云1,2
(1.中国科学技术大学 计算机科学与技术学院,安徽 合肥230026; 2.安徽省高性能计算重点实验室,安徽 合肥230026)
摘要: MATLAB被广泛应用于算法设计及验证,但由于平台限制及性能因素影响,实际工作中通常使用C语言及高性能库来重写和优化代码。人工转换MATLAB到C工作繁琐,而大部分已有的自动转换方法又难以解决MATLAB的高性能矢量运算和库函数与C的对接问题。为此,设计了一个MATLAB到高性能C的自动转换系统,通过将MATLAB代码转换为中间表示,进一步转换为C代码。同时,将MATLAB的高性能矢量运算和库函数对接到高性能C函数库Math Kernel Library(MKL)上。在相同MATLAB代码上的实验结果表明,该系统转换生成的C代码性能与人工编写的C代码相当,优于已有的转换方法生成的C代码。
中图分类号: TP311.1
文献标识码: A
DOI: 10.19358/j.issn.2096-5133.2022.06.007
引用格式: 余泽霖,徐云. MATLAB到高性能C的代码转换系统设计与实现[J].信息技术与网络安全,2022,41(6):36-42,56.
Design and implementation of a MATLAB to high-performance C code conversion system
Yu Zelin1,2,Xu Yun1,2
(1.School of Computer Science and Technology,University of Science and Technology of China,Hefei 230026,China; 2.Key Laboratory of High Performance Computing of Anhui Province,Hefei 230026,China)
Abstract: MATLAB is widely used in algorithm design and verification, but due to the limitation of platform and poor performance, C language and high-performance libraries are usually used to rewrite and optimize the code in practical work. Manual conversion from MATLAB to C is cumbersome, and most existing automatic conversion methods are not able to bridge the high-performance vector operations and library functions of MATLAB with C. Therefore, an automatic system converting MATLAB to high-performance C code is designed. By converting MATLAB code into intermediate representation, it is further converted into C code. At the same time, the high-performance vector operations and library functions of MATLAB are bridged with the functions of the high-performance C Math Kernel Library(MKL). The experimental results on the same MATLAB codes show that the performance of the C code converted by this system is equivalent to that of the manually written C code, and is better than that converted by the existing conversion methods.
Key words : MATLAB;code conversion;high-performance code;MKL function library

0 引言

MATLAB由于其强大的功能、友好的开发界面和简单易用的编程语言形式而被开发人员广泛使用,许多企业和科研单位都存在着大量的MATLAB遗留代码(Legacy Code)。但由于MATLAB程序运行依赖于MATLAB软件系统,部分工作平台无法满足要求,并且它的运行速度相较于C等更底层的语言慢,无法满足高性能计算的需求,通常需要将这些遗留MATLAB代码转换为C代码。而人工转换代码需要付出高昂的人力成本,因此,理想的解决方案是将MATLAB代码自动转换成C代码。

程序转换可以节省软件开发的成本,并在软件的移植、重用、更新和编译等方面有着重要的应用[1],因此在国内外有大量的对编程语言转换的研究。本文对已有的编程语言转换方法进行了借鉴和改进,提出了一个MATLAB到C的自动转换方法,着重解决了以下三个关键问题:一是引入了一种基于抽象语法树(Abstract Syntax Tree,AST)的中间表示(Intermediate Representation,IR)来解决两语言间的差异问题,为MATLAB和C转换过程中提供统一的接口,避免为两种语言的语法结构映射制定繁琐的规则。二是由于C中变量需要声明后使用,而MATLAB不需要,因此在转换时需要对MATLAB中的矩阵变量的类型信息(矩阵的大小和矩阵元素的类型)进行识别。已有许多对此类高级语言的变量类型信息识别的研究成果[2-6],本文借鉴并实现了MATLAB到C的转换过程中的类型信息推导。三是MATLAB中大部分表达式是矢量间的运算,直接转换到C语句会导致性能下降,并且很多内置的科学计算函数没有直接对应的C代码。本文设计了转换算法,使用C数学核心库(Math Kernel Library,MKL)中的函数为MATLAB中的矢量运算和库函数生成高性能C代码段,解决转换困难和性能问题。本文实现的系统能帮助开发人员将MATLAB代码自动转换生成C代码,提升代码性能,减少人工成本。




本文详细内容请下载http://www.chinaaet.com/resource/share/2000004533




作者信息:

余泽霖1,2,徐  云1,2

(1.中国科学技术大学 计算机科学与技术学院,安徽 合肥230026;

2.安徽省高性能计算重点实验室,安徽 合肥230026)




微信图片_20210517164139.jpg

此内容为AET网站原创,未经授权禁止转载。