● 摘要
安全关键实时系统广泛应用于航空电子、航天器、汽车控制等领域。由于此类系统资源受限,功能复杂性日益增加,使用多核技术将成为发展趋势。而多核平台的并行程序不仅编写更加困难并且更易出错,如何保证系统运行的可信任性及可靠性是学术上和应用上的关键问题。形式化方法具有精确的语法和语义支持系统性质的验证和分析,并支持将验证后的模型自动生成代码,已经在单核平台上形成很多理论及应用研究成果,但在多核平台上的研究还刚刚开始,面临很多的科学问题,本文基于一种广泛应用于安全关键实时系统设计的形式语言——同步语言,研究其在多核平台上的并行仿真代码生成相关关键问题。
目前几种主流的同步语言,包括 Esterel、Lustre 及 Signal 等都提供了编译器以将同步规格自动生成仿真代码。然而目前的Signal 编译器采用的时钟演算及多线程代码生成技术仍有继续改进的空间。本文选择同步语言 Signal 作为研究对象,将对 Signal的时钟演算技术进行研究,并选择已被广泛使用的跨平台并行编程技术OpenMP 作为转换目标,研究在多核平台下从Signal程序到OpenMP并行仿真代码的自动生成技术,并实现代码生成工具的原型。
首先,Signal 语言代码生成的一个重要步骤是分析时钟关系,生成时钟树。针对现有时钟演算技术存在的问题,本文提出了一种基于布尔方程解析的时钟演算方法。得到的时钟树将在包含时钟信息的前提下,保证数据依赖的正确性,同时时钟将被尽量更深地存入到时钟树中,以生成效率更高的串行仿真代码。
其次,本文提出了基于方程依赖图(EDG)的并行代码生成方法。通过分析Signal程序,得到包含信号间数据依赖关系的 EDG。结合时钟信息,对 EDG 进行划分,得到程序可以并行执行的部分,最终被映射到OpenMP 的结构中,从而得到适合多核平台的 OpenMP 并行仿真代码。
最后,使用 Java语言对上述时钟演算及代码生成方法进行实现,开发了一个支持从 Signal 程序到串行 C 及 OpenMP 并行仿真代码的自动生成工具原型, 并将其以插件的形式集成在嵌入式系统集成开发平台 TOPCASED 中。通过一个具体的 Signal 程序示例对代码生成的过程进行说明并验证转换的有效性。
相关内容
相关标签