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

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


                 为当前并行计算领域的一个研究热点             [9] .
                    相关研究提出大量源代码到源代码的并行化编译系统                   (例如编译器、工具和库) 以实现代码的自动并行化               [13,14] .
                 并行化编译系统能够自动检测串行程序中潜在的并行性并将串行程序转变为等价的适合并行体系结构运行的并
                 行程序  [42] , 其涉及到数据依赖关系分析、程序变换、数据分布等技术. SUIF                编译器  [43] 是首个用于  C  和  Fortran  语
                 言的顺序到并行代码自动转换工具, 能够自动将用                C  或  Fortran  编写的顺序密集矩阵计算转换为具有共享内存的
                 机器的并行代码. 用于      ANSI C  程序的源对源编译器      Cetus [44] , 通过私有和共享变量分析以及     OpenMP  指令的自动
                 插入提供循环的自动并行化. Pluto       [45] 是一个基于多面体模型      [46] 的自动并行化工具, 对   C  程序执行源到源转换, 以
                 同时实现粗粒度或细粒度的并行性和数据局域性. 基于                  OpenMP  的自动并行化编译器      AutoPar-Clava [42] , 支持静态
                 检测  C  应用程序中的并行化循环, 并根据访问模式对目标循环内使用的变量进行分类, 从输入的顺序程序版本生
                 成  C OpenMP  并行代码. 上述方法大多面向共享内存多核系统, 通过对程序循环实施合理的等价变换来消除阻碍
                 循环并行化的依赖关系, 提高循环可并行执行的粒度. 本文所提出的编译系统面向分布存储结构, 除了要解决并行
                 粒度的问题, 还需处理群体智能并行任务识别和分配调度等问题.
                    面向分布存储结构的并行化编译技术需要生成消息传递通信代码以支持访问分布在其他进程                                  (或个体) 上的
                 体智能应用程序和并行的节点可执行目标代码之间的语义鸿沟, 建立了编译系统总体框架. 通过源程序并行信息
                 数据, 进而支持个体间的交互机制. MPI 自动并行化编译系统                 [47] 是一种面向分布式存储系统的源源变换软件, 能
                 够将串行程序正确地编译为使用消息传递接口的单程序多数据                      (SPMD) 并行程序. 文献    [22] 基于  Open64  的  MPI
                 自动并行化编译系统后端, 提出一种消息传递代码生成算法. 从统一数据分布的角度, 根据给定的并行化循环集和
                 通信数组集, 通过修改      WHIRL (Open64  编译器中间表示语言) 表示的串行代码语法结构树, 使串行代码自动生成
                 更精确的消息传递代码, 进而提升消息传递程序的加速比. HELIX-RC                  编译框架    [48] 通过将循环迭代编译为并行线
                 程, 将同步和数据通信从计算中解耦, 能够有效解决顺序程序中的数据依赖限制并行化的问题, 使得非数值程序更
                 容易自动并行化, 并降低通信开销. 与这些工作不同, 本文编译系统产生的通信代码仅限于相邻节点间交互通信而
                 不是全局广播, 因而在计算中需要循环遍历节点的次数减少, 生成的通信代码规模和开销更小, 具有更好的运行
                 性能.
                    另外, 设计合适、通用化的编译系统中间表示能够使得并行化编译系统不再局限于特定目标语言、特性和平
                 台, 并提升编译系统转换和优化的效率            [49] . PENCIL [50] 是一种平台中立、可移植的计算中间语言, 用于直接加速器
                 编程和领域特定语言编译. PENCIL        使许多形式的非静态仿射代码和访问模式能够适应多面体框架内的高级循环
                 转换和并行化. SPIRE    [51] 是一种新的并行语言     IR  设计方法, 其支持以系统的方式将编译平台中使用的任何顺序
                 IR  映射为并行   IR, 已用于自动   OpenMP  和  MPI 任务级并行化. 面向异构硬件的机器学习编译器             Glow [52] 将传统的
                 神经网络数据流图降低为两阶段强类型的中间表示                  IR. 高级  IR  允许优化器执行特定于领域的优化, 低级的基于
                 指令的纯地址     IR  允许编译器执行与内存相关的优化. 这使得适合每个               IR  级别的分析和优化能够有效地、可扩展
                 地针对多个后端. 与上述工作相比, 本文所提出的编译系统中间层通过标准化语义模块实现了群体智能计算类型
                 和数据的解耦, 具有较好的普适性, 可应用至不同类型的群体智能硬件平台.

                 6   总 结

                    本文提出一种用于编译群体智能系统应用程序的编译系统. 针对符合用户串行思维、面向系统全局编程的群


                 识别, 计算划分, 交互信息生成技术, 提出了面向系统全局、串行、声明式编程的群体智能系统应用程序到节点可
                 独立执行的并行目标代码的编译算法. 针对目标硬件平台的异构性, 提出了一种具有标准化格式的中间代码, 将复
                 杂群体智能计算任务转换为由群体智能算子和输入输出变量组成的标准化语义模块, 其以独立于平台的形式表示
                 源程序信息, 支持向不同结构硬件平台目标代码的映射. 实现了具有应用程序编辑和编译功能的用户友好的编译
                 系统工具. 实验测试分别从编译系统有效性, 应用程序开发效率和性能测试                        3  个方面进行了验证, 结果表明, 该编
                 译系统能够将串行的群体智能系统应用程序转换为硬件平台可执行的并行目标代码, 且提升应用程序开发效率,
   166   167   168   169   170   171   172   173   174   175   176