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 车辆均匀划分策略
这一种任务划分方法的优点在于简单直接, 不需要考虑复杂的路网结构, 只需要将车辆进行均匀划分即可. 但
该方法的缺点也很明显, 每次仿真都需要进行全节点的车辆状态同步, 这样会造成巨大的网络通信开销, 因此可以

