Page 149 - 《软件学报》2024年第6期
P. 149
陈文杰 等: 面向全分布式智能建筑系统应用程序的并行化编译方法 2725
system and its supporting tools to support the conversion of high-level swarm intelligence system applications into secure and efficient
distributed implementations. By parallel information identification, computing division, and interactive information generation, the
compilation system compiles the swarm intelligence application program for global and serial programming into parallel object code for
individual execution, and thus users do not have to understand the complex interaction mechanism among individuals. Additionally, a
standardized intermediate representation of the compilation system is designed to convert complex swarm intelligence computing tasks into
a standardized semantic module sequence composed of swarm intelligence operators and input and output variables, which represents
source program information in a platform-independent form and shields the heterogeneity of target hardware platforms. The system is
deployed and tested in a case platform of swarm intelligence systems. The results show that the compilation system can compile swarm
intelligence applications into platform-executable object code and improve the application development efficiency, and its generated code
has better performance than existing compilers in a series of benchmarks.
Key words: swarm intelligence; application; compilation system; parallel compilation
群体智能 [1] 是指由一定规模的个体通过相互协作在整个群体系统宏观层面表现出来的一种分散、去中心化
的自组织行为, 已被广泛应用至智能建筑 [2] , 物联网 [3] , 机器人群任务规划 [4] 等领域. 与集中式方法相比, 群体智能
系统具有更好的故障健壮性和并行性 [5] , 但代价是更复杂的设计. 开发者需要从每个个体执行的角度进行并行编
等知名商业编译器, 以及
程, 并考虑个体间通信协议、数据分布等底层交互细节, 这导致较高的编程专业门槛和编程成本.
[6]
一些研究提出用于开发群体智能系统的编程语言以降低编程难度. SwarmL 是一种面向建筑用户的编程语
言, 其支持用户以串行思维方式从全局角度编程并行化的全分布式智能建筑系统应用程序. Buzz 编程语言 [7] 允许
[8]
开发人员将复杂的群体机器人算法构建为定义良好、可重用的组件. Solidity 是一种为实现区块链智能合约而创
建的高级编程语言, 其专注于围绕数据和对象而不是逻辑和功能进行编程, 对用户更加友好. 这些语言支持将群体
智能系统作为一个统一的整体进行编程, 使得用户从处理个体间交互和通信等底层细节中解脱出来, 降低了群体
智能系统的开发和部署难度.
然而, 高级的群体智能系统应用程序到可执行目标代码的编译过程面临巨大挑战, 进而直接影响应用程序开
发效率. 首先, 用于编程群体智能系统的高级语言大多贴近用户串行思维方式, 从系统全局的角度来编程分布式、
并行的群体智能应用任务, 而在应用程序运行阶段, 个体仅从自身角度独立执行代码, 考虑自身与哪些邻居交互数
据以及如何交互. 因此, 串行、面向全局的群体智能系统应用程序与面向个体单独执行的目标代码存在很大的语
义差距. 第二, 用户通过对特定数据结构的读写或者函数组合隐式地规范了同步和通信, 因此相邻个体间的变量读
写机制、并行任务管理、分布式计算属性等复杂底层细节完全留给编译器和运行时系统. 由于应用程序可能需要
在大规模群体智能系统上执行, 这种复杂的协调逻辑必须高效和可伸缩的实现. 第三, 由于群体智能系统硬件平台
的异构性, 用户需要就不同架构的硬件平台分别编写程序代码并分别编译, 增加了软件开发难度. 群体智能系统应
用程序和底层硬件指令的升级和更新也将给编译系统的维护带来巨大的工作量.
为降低群体智能系统和多核处理器系统软件编译的复杂度, 提高并行计算机系统硬件资源利用率, 国内外学
者针对自动并行化编译系统做了大量研究工作 [9,10] . 首先, 在编译面向全局和声明式编程的群体智能应用程序方
面, 面向多机器人系统应用程序 [11] 和 Meld 语言 [12] 的编译器支持将遵循逻辑编程范式的集成级机器人应用程序编
译成可以在多个计算单元中单独执行的分布式代码. 另一方面, 很多流行的自动并行化框架 [13,14] 被相继提出, 例
如 Intel Compiler [15] 和 PGI [16] Cetus [17] , ROSE [18] , TRACO [19] , Pluto [20] 等学术方法. 这些工具
接收源代码作为输入, 并根据目标编程模型 (例如 OpenMP) 生成适合并行体系结构运行的并行程序. 然而, 由于难
以充分利用程序的静态信息和缺乏建模精度, 自动并行化生成的代码可能会导致并行化开销, 进而表现出较差的
性能. 第二, 在生成支持群体智能系统个体间通信的代码方面, Paraguin [21] 提出典型的面向分布式存储系统 MPI 的
自动并行化编译系统, 其以计算划分为中心, 通过依赖关系测试确定并行化循环集, 并生成消息传递代码. 然而, 基
于 MPI 的分布式系统中的个体采用广播/收集的方式与所有个体进行通信 [22] , 群体智能系统仅支持个体与相邻个
体交互通信来实现全局计算任务, 而不依靠全局地址 [2] . 个体交互和通信模式的差异使得面向 MPI 的消息传递代
码生成算法难以适用于群体智能应用程序编译系统. 第三, 相关研究提出通用化、平台无关的中间表示 (IR) 来屏
蔽目标平台的异构性. INSPIRE [23] 使用一组统一的、封闭的中间语言结构对 OpenMP、Cilk、OpenCL 和 MPI 原