优秀博士学位论文分享:面向数据流模型的代码生成技术研究

优秀博士学位论文代表了各学科领域博士研究生研究成果的最高水平,本公众号近期将推出“优秀博士学位论文分享”系列文章,对人工智能领域2023年优秀博士学位论文进行介绍和分享,方便广大读者了解人工智能领域最前沿的研究进展。

“博士学位论文激励计划”(原优秀博士学位论文奖)是对博士研究生学位论文的一项重大奖励,由各大学会通过严格评选后颁布。中国计算机学会、中国自动化学会、中国人工智能学会等各大学会每年都会颁布该奖项。该奖项的目的是促进学术研究的卓越性,并鼓励产出高质量的博士论文。博士研究生如果能够荣获该奖项,则表明其学术研究生涯早期的成果受到了很高的认可。

本文主要介绍中国计算机学会优秀博士学位论文《面向数据流模型的代码生成技术研究》,这篇论文提出了一种新的方法,通过统一的面向数据流模型的代码生成框架,解决了建模工具的限制、动态数据流模型转换和处理器并行指令利用等问题,从而实现了高效的自动生成代码,为模型驱动开发提供了关键技术支持。提出的代码中间表示都已应用到华为公司的 HAS Studio 车控行为模型建模系统中,并已在多家车企的实际生产中得到初步应用。本文的作者为陆新颖,审校为李杨和朱旺。

1.背景与挑战

模型驱动开发是一种通过使用模型描述软件系统功能并自动生成代码的软件开发方式,在传统嵌入式软件设计领域以及新兴领域如物联网、人工智能和云计算中得到广泛应用。这篇论文背景基于当前面临的建模工具和代码生成技术的挑战,建模工具的代码生成能力有限,难以适配不同模型或建模工具,而动态数据流模型在建模复杂系统时效果良好,但现有代码生成技术对其转化为可部署代码的效率较低。同时,处理器并行指令的充分利用也成为一个问题。

为了解决这些挑战,研究人员提出了一种基于中间表示的代码生成框架。开发了基于分支标记的动态数据流语义转换和自动综合处理器并行指令的代码生成方法,这一创新在以下几个方面有所突破:

(1) 基于中间表示的代码生成框架设计:这个框架包括模型解析、调度转换、代码优化和代码翻译四个层次。模型解析层将不同建模工具构建的模型转化为统一的模型中间表示,而调度转换层将模型中间表示转化为控制流结构的代码中间表示。代码优化层对代码中间表示进行多级优化,而代码翻译层将代码中间表示翻译为不同用途的代码。

(2) 基于分支标记的动态数据流语义转换方法:这个方法用于实现动态数据流模型到控制流结构清晰的代码的调度转换。通过分支标记和化简,保留原有模型的数据控制逻辑,同时保证生成的代码具有正确性和效率。

(3) 自动综合处理器并行指令的代码生成方法:该方法能够自动为模型中的批量计算组件和计算密集组件生成 SIMD 指令,充分利用CPU 向量协处理器的并行计算能力,提高代码运行效率。此外,它还能自动合并可并行执行的同类计算组件,进一步提升代码效率。

(4) 基于本文提出的代码生成框架的工具集:以上解决方案的实现形成了一套基于提出的代码生成框架的工具集,包括模型解析器、调度转换器、代码优化器和代码翻译器等,具有良好的扩展性和实用性。

2.方法

研究落脚点的确定主要基于建模工具代码生成能力差距大、动态数据流模型难以代码生成以及处理器可提供丰富的向量指令等现实问题。为此,确定了多建模工具的接口一致性、数据流模型的控制流转换、模型并行计算的充分挖掘等方向作为研究重点。这一研究定位旨在解决模型驱动开发中存在的核心难题,通过设计统一的代码生成框架、基于分支标记的动态数据流语义转换方法以及自动综合处理器并行指令的代码生成方法,实现了对模型的更高效、更可靠的转换与优化,推动了模型驱动开发技术的进一步应用和发展。具体研究思路如图1所示

图1 研究思路

这篇论文针对多建模工具的接口一致性、数据流模型的控制流转换、模型并行计算的充分挖掘等方向作为研究重点,提出了一个基于中间表示的代码生成框架,并在此基础上提出了四项具体的解决方案和相应理论成果:

1) 基于模型中间表示和代码中间表示的代码生成框架:旨在解决多种建模工具难以生成高质量代码的问题。模型中间表示作为统一的模型表示,具备兼容多种不同类型模型的特性,并以数据流语义为核心,支持通过复合组件封装方式融入新的模型。代码中间表示则是通用的代码表示,支持多阶段优化提升代码质量,并可翻译为不同用途的代码,同时包含了代码向模型的映射信息,方便技术转换,如代码验证、测试等。该框架分为模型解析层、调度转换层、代码优化层和代码翻译层四层,能对接多种建模工具构建的模型文件,并将其转化为高质量代码。这一设计弥补了建模工具之间的代码生成差距,同时在代码翻译层将不同模型转化为统一的模型中间表示,使得不同建模工具之间的联合建模、仿真和代码生成成为可能。代码生成框架如图2所示。

图2 代码生成框架示意图

2) 基于分支标记的动态数据流语义转换:针对动态数据流模型提出了基于分支标记的语义转换方法,以支持具有任意复杂分支结构的模型向控制流代码的转换。该方法首先通过拓扑排序对模型进行调度分层,然后根据分支组件的语义对模型中的各个组件进行分支标记,随后根据分支标记信息动态创建基于控制流的代码生成位置表。该方法解决了由动态数据流控制组件引起的难以生成代码的问题,有效地提高了建模效率。分支标记方法在处理分支嵌套和交叉时能够避免组件分支信息过多的问题,通过化简分支标记,保持组件的分支标记数量最少。此外,提出的动态创建代码生成位置表的方法有助于保持原有模型逻辑。通过对分支信息标记、化简和代码生成位置表构建的正确性分析,确保了代码生成的准确性。基于分支标记的动态数据流语义转换方法框架如图3所示。

图3 基于分支标记的动态数据流语义转换方法框架图

3)自动综合并行指令的代码生成方法:该方法针对密集计算组件、批量计算组件和可并行化组件的计算密集型模型,具有显著的代码性能提升效果。在方法中,采用同构子图合并算法来最大化组件的并行化,采用自适应预计算以生成更合适的代码,使用基于数据流图匹配的SIMD指令选择算法以获取批量计算组件的最佳实现方式。自动综合并行指令的代码生成方法框架如图4所示

图4 自动综合并行指令的代码生成方法框架图

4) 代码生成工具集:基于前面内容提出的代码生成框架,成功实现了一个以模型中间表示和代码中间表示为核心的代码生成工具集。该工具集在第1部分设计的框架、第2部分的动态数据流语义转换方法以及第3部分的并行指令综合方法的基础上完成。主要包含两个模型解析器(即模型中间表示转换器)、一个调度转换器(即代码中间表示生成器)、一个代码优化器(即代码中间表示优化器)、一个代码翻译器(即代码中间表示翻译器),以及多个辅助开发工具。这一整套工具集的实现为模型到代码的转换提供了完整的流程和技术支持,极大地提高了代码生成的效率和质量。工具集的整体架构见图5。

图 5代码生成工具集整体架构图示

这些模型在背景介绍、算法思想和详细的算法实现上都进行了详细的阐述,并通过丰富的实验验证了其有效性和可解释性。

3.实验与应用结果

在论文中,得益于华为公司的支持,研究人员在一个真实的自动驾驶控制系统开发项目中,采用了所提出的工具集进行了不同设计工具的协作开发实验。实验中展示了华为自动驾驶控制软件的车辆制动系统模型,其中包含了Simulink和Ptolemy-II构建的两个部分,分别处理制动钳传感器的数据反馈功能单元。Simulink模型负责声明功能单元,而Ptolemy-II负责具体实现。研究人员使用了模型解析器和调度转换器对这两部分模型进行解析,并生成了统一的模型中间表示文件。随后,通过代码翻译器生成了用于仿真和在嵌入式设备上部署的C代码。最终,他们对这些代码进行了编译和运行,并得到了实验结果。

实验结果表明,所提出的工具在模型仿真时间和代码效率方面均优于Simulink和Ptolemy-II。特别是Ptolemy-II生成的代码出现了运行时错误,而使用所提出的工具生成的代码则表现更加稳定和高效。此外,对Simulink和Ptolemy-II构建的等效模型进行了比较,结果显示所提出的工具在模型建立的工作量上也更为节省。具体而言,所提出的工具在执行时间和代码行数上分别减少了26.9%和33.6%,表明了其在实际项目中的实用性和性能优势。

4.结论

通过研究,该论文提出了一个统一的面向数据流模型的代码生成框架,解决了现有建模工具在代码生成方面的问题。该框架包括模型解析层、调度转换层、代码优化层和代码翻译层,能够将不同建模工具构建的模型转化为高质量的代码。针对动态数据流模型,提出了语义转换方法,有效处理复杂的控制逻辑。针对计算密集型模型,提出了处理器并行指令生成方法,提高了生成代码的性能。实现了一套基于该框架的代码生成工具集,并在真实项目中进行了验证。实验结果表明,工具在模型仿真时间和代码效率上均优于现有建模工具。未来的研究可以进一步挖掘处理器的特性来生成更高效的代码,并通过自动生成用于安全测试及验证的代码来保障模型安全。这项工作为模型驱动开发的代码生成提供了重要的参考和指导,并为未来的研究提供了新的方向和思路。

5.作者介绍

苏卓,清华大学的工学博士毕业生,致力于大数据系统软件及应用领域的研究。在他的博士学业生涯中,发表了多篇学术论文,赢得了业界和学术界的认可。他的研究成果展现了出色的学术深度和应用广度,成为他获得CCF优秀博士学位论文奖项的坚实基础。表1展示了苏卓博士的博士生涯成果。

表1 博士生涯成果

成果

类型

成果

评级

学术

论文

 

 

PHCG: Optimizing Simulink Code Generation for Embedded System with SIMD  Instructions

CCF A 类

HCG: Optimizing Embedded Code Generation of Simulink with SIMD  Instruction Synthesis

CCF A 类

MDD: A Unified Model-driven Design Framework for Embedded Control Software

CCF A 类

Code generation  method of data flow model based on branch marking

CCF A 类

Code Synthesis for Dataflow Based Embedded Soft-ware Design

CCF A 类

Mercury: Instruction Pipeline Aware Code Generation for Simulink Models

CCF A 类

EnFuzz: Ensemble Fuzzing with Seed Synchronization among Diverse Fuzzers

CCF A 类

Formal Design of Multi-Function Vehicle Bus Controller

CCF B 类

6.指导老师——孙家广院士简介

孙家广,中国工程院院士,毕业于清华大学自控系,并担任多个重要职务,包括国家自然科学基金委员会副主任、清华大学计算机系教授、清华大学软件学院院长等。他长期从事计算机图形学、计算机辅助设计、管理技术以及软件工程等领域的研究。作为负责人,他主持研制了多种具有自主知识产权的大型软件,并在科技成果转化方面取得了显著成效。在科研工作中,他培养了大批计算机辅助设计和计算机图形学方面的专业人才,对学科发展做出了重要贡献。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/695932.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

五子棋对战(网页版)

目录 一、项目背景 用户模块 匹配模块 对战模块 二、核心技术 三、相关知识 WebSocket 原理 报文格式 代码 服务器代码 客户端代码 四、项目创建 4.1、实现用户模块 编写数据库代码 数据库设计 配置MyBatis 创建实体类 创建UserMapper 创建UserMapper接口 实现UserMapper.xml 前…

工作太闲,平常有没有用手机能赚钱的,这里我推荐了4种可月入2000的副业

确实有许多通过手机赚钱的方式,以下是一些常见的方法 1.拍照卖图 如果你有一台相机或智能手机,喜欢拍照,那么可以将自己拍摄的图片上传到网站上,赚取稿费。 2. 做问卷调查 许多公司需要了解消费者的意见,所以会通过…

C语言学习(十)结构体

目录 一、结构体类型定义二、结构体变量的定义三、结构体变量赋值1. 定义结构体变量的同时进行赋值2. 定义结构体类型的同时定义变量并进行赋值3. 在定义结构体变量时对指定成员进行赋值4. 在定义完结构体变量后,通过.进行赋值 四、结构体成员访问五、结构体内部指针…

zabbix基础

监控系统基本介绍: 企业级应用中,服务器数量众多,一般情况下需要维护人员进行长时间对服务器体系、计算机或其他网络设备(包括硬件和软件)进行长时间进行性能跟踪,保证正常稳定安全的运行,于是…

Vue从入门到实战Day05

一、自定义指令 自定义指令:自己定义的指令,可以封装一些dom操作,扩展额外功能 需求:当页面加载时,让元素将获得焦点 (autofocus在safari浏览器有兼容性) 操作dom:dom元素.focus() mounted() {this.$ref…

3W 3KVAC隔离 宽电压输入 AC/DC 电源模块——TP03AC 系列

TP03AC系列电源模块额定输出功率为3W,此系列产品输入电压范围宽,可以交直流两用。并具备高可靠性、高精度、更安全、更稳定,大功率密度,超小体积,无需外加散热器,输出电压稳定等特点,且均集成有…

‘vue-cli-service‘ is not recognized as an internal or external command解决方案

vue-cli-service is not recognized as an internal or external command, operable program or batch file.解决方案 先进行 : npm install -g vue/cli 命令安装vue cli 是必须的。 如果 npm run build 还是报错 遇到同样的提示: 这时候先安装依赖 np…

线上科博馆3d云展馆实现企业拥抱数字化的目标

在科技日新月异的今天,数字化展览正逐渐成为各行业展示与推广的新宠。地产、家居、电商、文博、党建等领域纷纷拥抱数字化,寻求更生动、更直观的展示方式。而Web3D虚拟展厅开发工具,正是这一变革的得力助手。 Web3D虚拟展厅开发工具以其傻瓜式…

Redis详解(二)

事务 什么是事务? 事务是一个单独的隔离操作:事务中的所有命令都会序列化、按顺序地执行。事务在执行的过程中,不会被其他客户端发送来的命令请求所打断。 事务是一个原子操作:事务中的命令要么全部被执行,要么全部都…

神经网路与深度学习

1 深度学习简述 机器学习:相当于把公式实现出来了而已。 深度学习: (1)中的特征工程使机器学习更智能。 (2)真正能学什么样的特征才是最合适的。 (3)主要应用于计算机视觉和自然语…

maven .lastUpdated文件作用

现象 有时候我在用maven管理项目时会发现有些依赖报错,这时你可以看一下本地仓库中是否有.lastUpdated文件,也许与它有关。 原因 有这个文件就表示依赖下载过程中发生了错误导致依赖没成功下载,可能是网络原因,也有可能是远程…

【java】代理

什么是代理 假设有一个核心方法叫转账,为了安全性考虑,不能让用户直接访问接口。此时涉及到了代理,这使得用户只能访问代理类,增加了访问限制。 代理的定义:给目标对象提供一个代理对象,并且由代理对象控…