Page 155 - 《软件学报》2024年第6期
P. 155

陈文杰 等: 面向全分布式智能建筑系统应用程序的并行化编译方法                                                 2731


                    解析层负责格式化和预处理          SwarmL  程序, 对源程序进行词法语法分析, 建立符号表, 生成抽象语法树并存储
                 在  StringBuilder 数据结构中.
                    针对挑战    1, 本文提出一种编译算法, 将符合用户串行思维方式、面向全局角度编程的群体智能系统应用程
                 序解耦、分离为面向单个节点独立执行的中间代码. 首先根据应用程序中全局参数、计算域和操作符等元素匹配
                 生成群体智能计算的类型. 然后识别并提取串行应用程序中的全局信息进行计算划分和数据分配, 将全局信息转
                 换为每个节点需要在本地定义以及与邻居交互的信息. 确定发起点和参与节点的计算逻辑, 使得每个节点能够根
                 据自身属性来自动识别自身所要执行的程序代码块并与邻居交互, 实现全局层面的群体智能计算任务.
                    针对挑战    2, 本文提出一种编译算法, 考虑到从邻域角度编程的               Swarm  并行语句与   C  语言编程方法的相似性,
                 将声明式、面向邻域角度编程的           Swarm  并行语句转换为面向单个节点独立执行的              C  语言程序并嵌入到中间代码
                 中, 进而重用   C  语言编译器并降低编译成本. 首先识别并提取              Swarm  并行语句中的并行信息, 根据局部参数的计
                 算域判断参数的本地读写和邻域交互属性, 并生成参数对应的                    C  语言变量和数组. 将    Swarm  并行语句中对邻居的
                 隐式循环遍历操作转换为基于           C  语言数组的运算. 根据参数的计算域生成计算触发条件、计算结果发布条件等
                 分布式计算属性, 以支持节点与邻居的并行交互计算. 将生成的                    C  语言程序嵌入到中间代码中, 进而重用           C  语言
                                                   SwarmL
                 编译器并降低编译成本.
                    利用上述    2  个核心编译算法遍历抽象语法树, 通过查询符号表以及预先设置的标准化语义模块格式库和类型
                 库, 生成由多种类型语义模块组成的标准化语义模块序列.
                    针对挑战    3, 本文设计了一种标准化的编译系统中间表示. 在分析群体智能系统体系结构和程序执行模型的
                 基础上, 该中间表示将每种类型的群体智能运算表示为输入输出变量和标准化群体智能算子相结合的计算事件,
                 本文称之为标准化语义模块. 因而具有并行和分布式特征的群体智能应用程序被转换为标准化语义模块按照语义
                 执行顺序拼接而成的序列, 本文称之为逻辑链. 标准化语义模块和逻辑链组成编译系统中间表示, 这种通用化的中
                 间表示将群体智能计算类型和数据有效解耦, 能够适配一类具有节点交互协作、并行执行特征的群体智能系统硬
                 件平台, 进而能够解决分别编写程序代码和编译的困难, 屏蔽底层硬件平台的异构性. 同时, 该中间表示为群体智
                 能应用程序和底层硬件平台提供统一的标准化程序接口, 当两者任一发生更新升级时, 只需修改中间表示的接口
                 而无需修改整个编译系统软件, 进而大大降低了编译系统维护的工作量.
                    在中间层, 根据     SwarmL  程序的实际语义执行顺序, 将原本按照语法顺序排列的标准化语义模块序列拼接成
                 具有分支、跳转等关系的逻辑链. 逻辑链与上层应用程序所描述的算法逻辑一致, 足够灵活, 且接近硬件.
                    在映射层, 通过修改接口格式和输入硬件平台信息, 逻辑链能够被映射为在不同类型的群体智能系统平台上
                 运行的目标代码, 例如全分布式智能建筑系统, 基于群体智能的智慧城市系统, 无人机蜂群协同系统等, 如图                                4  所
                 示. 本文使用扁平化、无中心的全分布式智能建筑系统作为群体智能系统硬件平台的示例来说明从逻辑链到目标
                 代码的映射转换过程.

                 2.2   编译系统中间层格式
                    本节定义编译系统中间层接口的标准化格式以及标准化语义模块类型库, 其对应于第                             1.4  节的编译挑战   3. 中
                 间层对于后期代码生成至关重要, 因为高级                     程序隐藏了大量细节, 这使得很难直接从             SwarmL  生成面向
                 底层硬件平台的目标代码.

                 2.2.1    定义编译系统中间层接口格式
                    编译系统中间层包括标准化语义模块和逻辑链.
                    (1) 标准化语义模块
                    在分析群体智能系统体系结构和程序执行模型的基础上, 编译系统中间层将每个群体智能操作表示为输入输
                 出变量和标准化群体智能算子相结合的计算事件, 即标准化语义模块. 其可以表示为一个四元组.
                                   Standardized Semantic Module = <M Id , M Name , M Type , Var In , Var Out >,
                 其中,
   150   151   152   153   154   155   156   157   158   159   160