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

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


                    (2) 全局求和任务
                    在全分布式智能建筑系统中的变风量系统优化控制任务中, 空气处理机组                         (AHU) 节点计算变风量系统域中
                 所有房间节点的需求风量之和           [26] . 由  AHU  节点作为发起点触发计算任务, 并作为根节点建立生成树, 每个节点将
                 下游邻居节点的需求风量的值与自身的需求风量值求和并传给上游邻居节点, 最终                            AHU  节点求得系统中需求风
                 量之和. SwarmL  允许用户使用以包含单个运算符的全局参数表达式简洁描述该全局求和任务. 在图                           3(b) 中, 计算
                 域为  StartNode 的全局参数  AirVolume_Sum, 和计算域为   All 的全局参数    AirVolume_All, 是房间需求风量对应的
                 场变量在发起点和所有节点上的数据投影. 图               3(b) 第  5  行的全局参数表达式能够直接求取所有房间节点的需求
                 风量之和并赋值给发起点上的           AirVolume_Sum  参数.
                    SwarmL  是一种数据并行语言, 其定义的场变量和参数本质上都具有并行语义. 可以看出                        SwarmL  能够将分布
                 式建筑控制任务的系统级功能需求直观映射到单个节点的行为, 不需要用户深入理解和描述节点之间的通讯协议、
                 数据分布等底层细节, 降低了编程难度.
                    (3) 邻域数据校核任务
                    在变风量系统优化控制任务中, 当某个房间的风阀开度变化量的预期值发生变化, 将触发风阀开度校核任务,
                    (2) 如何将从邻域角度声明式编程的
                 该房间作为根节点构建生成树. 每个房间节点将生成树中上游邻居传来的风阀开度变化量的校核值的最大值乘以
                 耦合系数, 得到本地风阀开度变化量的校核值, 并传递给下游邻居, 每个节点都并行执行该计算逻辑从而实现系统
                 中所有节点的风阀开度校核. 由于该任务细粒度的描述了全分布式智能建筑系统中节点与邻居的数据交互行为,
                 这难以从全局角度进行编程. SwarmL         提供的   Swarm  并行语句支持用户从单个节点及其邻居的角度描述并行的邻
                 居风阀校核任务. 在图       3(c) 中, 计算域为  Me (本节点) 的局部参数      dOpen_Cor_0, 和计算域为   UpStream (下游节
                 点) 的局部参数    dOpen_Cor_U, 分别表示房间风阀开度变化量的校核值对应的场变量在本地和上游邻居的数据投
                 影. 图  3(c) 第  5  行的局部参数表达式将收取到的上游邻居的校核值取最大, 并乘以相邻风阀开度变化耦合系数, 赋
                 值给本地的风阀开度变化量的校核值. 变风量系统中所有房间节点都并行执行此程序, 直至所有节点都计算得到
                 本地的校核值.
                    Swarm  并行语句对所有邻居的循环、遍历操作是隐式的, 直观刻画节点和邻居的数据交互过程. 计算域提供
                 了通用化的网络拓扑关系描述方法. 通过声明式指定计算参数和计算所涉及的节点范围, SwarmL                             程序可以部署
                 至不同结构的建筑功能系统中, 而不是只面向某一特定的建筑结构.

                 1.4   编译群体智能系统应用程序的关键挑战
                    以  SwarmL  开发的全分布式智能建筑系统应用程序为例, 本节总结了编译群体智能系统应用程序的关键
                 挑战.
                    (1) 如何将以用户串行思维开发的群体智能应用程序解耦、分解为节点可独立执行的目标代码?
                    SwarmL  是一种声明式语言. 在应用程序开发阶段, SwarmL            支持用户将系统整体作为编程对象, 以串行思维
                 方式编程分布式、并行的群体智能计算任务, 降低了编程难度. 而在运行阶段, 应用程序需要以分布式方式在多个
                 智能节点上执行. 智能节点仅从自身角度执行节点级的程序, 考虑自身与哪些邻居节点交互数据以及如何交互. 因
                 此, 面向用户串行思维和系统全局编程的高级应用程序与底层个体可执行的节点级代码之间存在显著语义差异,
                 这导致编译过程复杂.
                                                 Swarm  并行语句转换为支持底层节点并行交互的目标代码?
                    Swarm  并行语句通过声明式指定参与运算的邻居节点范围和局部参数来描述邻域交互逻辑. 其利用局部参数
                 编程多个邻居节点参与的运算, 对所有邻居的循环、遍历操作是隐式的, 且屏蔽了节点通信协议、数据分布等底
                 层细节. 因此, 节点间的数据移动和并行任务管理等细节完全留给语言的编译和运行时系统. 然而在应用程序运行
                 阶段, 节点需要显式确定每个参数的读写属性, 建立节点与邻居的通信关系以实现对邻居数据的循环遍历操作, 还
                 需要确定计算任务如何触发、计算结果如何发布等分布式计算属性. 因此, 如何将从邻域角度编程的                                Swarm  并行
                 语句转换为目标代码, 恢复分布式计算底层细节, 是重要的编译挑战.
   148   149   150   151   152   153   154   155   156   157   158