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

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


                 的隐式遍历操作转换为基于          C  语言数组的运算, 以及生成       Swarm  并行语句所涉及的分布式计算属性           3  个部分, 编
                 译案例如图    9  所示. 由于篇幅限制, Swarm   并行语句具体编译算法由附录中图             A2  给出.

                     Swarm 并行语句                                             C 语言代码
                                                                             float Ar_0; float Aw_0; float X_0;
                   Swarm (Nodetype: [ROOM]; VPN: [VAVsystem])
                                                                             float X_1[6]; float Ar_1;
                     { float dOpen_Expected_0(Refer to: damperOpen_Expected @local: Me);
                                                                             Ar_0 = SIM.dOpen_Expected;
                       float dOpen_Cor_0(Refer to: damperOpen_Correction @local: Me);   Ar_1 = SIM.delta;
                       float dOpen_Cor_U(Refer to: damperOpen_Correction @local: Upstream);   for (i=0; i<6; i++){
                       float dOpen_Cor_N(Refer to: damperOpen_Correction @local: AllNeighbors);  X_1[i] = SIM.Neigh.dOpen_Cor; }
                                                                             X_0 = X_1[SourcePort];
                       float delta_0(Refer to: delta @local: Me);
                                                                             if (Ar_0 != 0){
                       if (dOpen_Expected_0 != 0)
                                                                               Aw_0 = Ar_0; }
                       { dOpen_Cor_0 = dOpen_Expected_0;  }                  else {
                       else                                                    Aw_0 = max(X_1[SourcePort])*Ar_1;
                       { dOpen_Cor_0 = max(dOpen_Cor_U)*delta_0;  }          }
                       if ((dOpen_Cor_0 >= 7.5) || (dOpen_Cor_0 <= -7.5))    if (Aw_0 >=7.5 || Aw_0 <= -7.5){
                                                                               for (i=0;i<6; i++){
                       { dOpen_Cor_N = dOpen_Cor_0;              }
                                                                               X_1[i] = Aw_0;
                     }
                    Swarm
                                                                             }}
                           dOpen_Cor_0                         dOpen_Cor_N
                                       dOpen_Expected_0 → Aw0              dOpen_Cor_N → X0
                    float  damperOpen_Correction  Me    float  damperOpen_Correction AllNeighbors
                                       出现在表达式的左侧
                                                   (a) 局部参数转换为 C 语言变量                      标准化语义模块
                                                                {
                   dOpen_Expected_0 → Ar0; dOpen_Cor_0 → Aw0; dOpen_Cor_N → X1
                                                                  “Json_Type”: “CBlock_Define”,
                                                                  “Cblock_Id”: “00000001”,
                                                                  “Cblock_Type_Id”: “0x00000200”,
                                                                  “Cblock_Type_Name”: “Swarm_Parallel_Statement”,
                   dOpen_Cor_N = dOpen_Cor_0;                     “Data”: [
                                        float Aw_0;
                                        float X_1[6];                 “NodeType”: “ROOM”,
                      dOpen_Cor_N       for (i=0; i<NeighborAmount; i++) {  “VPN”: “VAVsystem”,
                                          X_1[i] = Aw_0;              “SwarmParameter_AwArX_Map”: “dOpen_Expected_0→
                                        }                               Ar0; delta_0 →Ar1; dOpen_Cor_0→Aw0;
                                                                        dOpen_Cor_U→X0; dOpen_Cor_N →X1”,
                   Array of C language : X1[6]                        “AwArX_Var_Amount”: “2, 1, 2”,
                                                                      “AwArX_CLanguageVar_Map”: “Ar0 →Ar_0; Ar1 →Ar_1;
                              (b) 子语句转换为 C 语言代码                         Aw0 →Aw_0; Aw1 →Aw_1; X0 →X_0; X1 →X_1 ”,
                                                                      “cProgram”: “float Ar_0;float Aw_0;float X_0;float X_1[6];
                                                                        float Ar_1;
                   dOpen_Cor_N = dOpen_Cor_0;
                                                                        Ar_0 = SIM.dOpen_Expected;
                                         050X1F (发送至所有邻居节点)             Ar_1 = SIM.delta;
                          dOpen_Cor_N                                   for (i=0; i<6; i++){
                                                                        X_1[i] = SIM.Neigh.dOpen_Cor;
                                                                        }} …”,
                                                                      “CalculationAttribute”: “050X0F, 0X0010, 0X0011, ”,
                   float  damperOpen_Correction AllNeighbors      ]
                                                                },
                               (c) 生成分布式计算属性码
                                               图 9 Swarm  并行语句编译示意图

                    (1) 局部参数转换生成      C  语言中对应的本地读, 本地写和交互变量
                          并行语句中局部参数的计算域属性隐式表达了参数的读写机制, 屏蔽了分布式计算中消息发送和接收
                 等通信细节. 但在     C  语言程序中要求显式描述变量的读写机制, 因此需要将                  Swarm  并行语句中的参数转换为        C
                 语言中相应的变量. 本编译系统规定在计算逻辑中只读的本地参数对应的                         C  语言变量称为本地输入变量, 即         Ar
                 变量; 将可以修改的本地参数对应的变量称为本地输出变量, 即                   Aw  变量; 将读取或写入邻居节点参数对应的变量
                 称为交互变量, 即     X  变量. 例如, 计算域为   AllNeighbors 的局部参数  dOpen_Cor_N  表示站在本节点角度所观察到
                 的所有邻居节点上的风阀开度校核值, 对应于交互变量                 X.
                    该部分算法逻辑为, 遍历        Swarm  并行语句抽象语法树中的所有局部参数, 根据参数名称查询该参数的计算域
   156   157   158   159   160   161   162   163   164   165   166