优秀博士学位论文代表了各学科领域博士研究生研究成果的最高水平,本公众号近期将推出“优秀博士学位论文分享”系列文章,对人工智能领域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.指导老师——孙家广院士简介
孙家广,中国工程院院士,毕业于清华大学自控系,并担任多个重要职务,包括国家自然科学基金委员会副主任、清华大学计算机系教授、清华大学软件学院院长等。他长期从事计算机图形学、计算机辅助设计、管理技术以及软件工程等领域的研究。作为负责人,他主持研制了多种具有自主知识产权的大型软件,并在科技成果转化方面取得了显著成效。在科研工作中,他培养了大批计算机辅助设计和计算机图形学方面的专业人才,对学科发展做出了重要贡献。