Page 275 - 《软件学报》2025年第8期
P. 275

3698                                                       软件学报  2025  年第  36  卷第  8  期



                 1. 构建相应的数据结构
                                      T i (i = 1,...,n), 且每个子任务分配给一个计算节点
                 2. 将任务划分为    n 个子任务
                 3. do
                 4.   // 任务并行
                 5.   parallel_for all  T i
                 6.    parallel_for all vehicles in  T i
                 7.     车辆行驶算法
                 8.    end for
                 9.    parallel_for all lanes in  T i
                 10.      车道状态更新
                 11.           end_for
                 12.           parallel_for all junctions in  T i
                 13.      向量化计算交叉口每个相位的压力
                 14.     根据压力值, 向量化执行交叉口每个相位的信号灯调整策略
                 15.           end_for
                 16.    // 任务之间通信同步
                 17.     synchronize   T i
                 18.   end for
                 19. until 仿真结束
                 20. return 仿真结果

                 3.1   路网划分
                    算法  1  的第  2  行对任务进行了划分, 每个子任务分配到不同的节点上, 从而降低了每个节点的计算负载. 值得
                 注意的是, 在该并行模式中, 不同的计算节点往往需要进行数据通信以实现协同计算                           (如算法  1  的第  17  行), 进而
                 使得任务划分需要考虑如何降低通信开销.
                    一种较为直观的思路是将车辆数进行平均划分, 每个节点保存相同数量的车辆状态, 考虑交通仿真是按照相
                 同步长执行的特点, 即每经历一个步长, 所有仿真对象执行一次, 每一步仿真时需要进行全量的车辆状态信息同
                 步. 如图  3  所示, 假设此时有   4  辆车, 将它们划分到    4  个计算节点, 每个节点保存完整的路网信息并且有一辆车执
                 行仿真任务, 每一步仿真结束后, 每一个节点的车辆               (如图  3  左上) 需要将其状态信息      (如车速、位置等) 同步到其
                 他节点, 以保证其他节点的车辆能感知它的状态.















                                                   图 3 车辆均匀划分策略

                    这一种任务划分方法的优点在于简单直接, 不需要考虑复杂的路网结构, 只需要将车辆进行均匀划分即可. 但
                 该方法的缺点也很明显, 每次仿真都需要进行全节点的车辆状态同步, 这样会造成巨大的网络通信开销, 因此可以
   270   271   272   273   274   275   276   277   278   279   280