Page 279 - 《软件学报》2025年第8期
P. 279
3702 软件学报 2025 年第 36 卷第 8 期
∗
延长1, σ max (k n ) = σ (k n )
∗ (11)
D n (k n ) = 延长2, σ max (k n ) , σ (k n ) and (1+δ)P n,σ ∗ (k n ) ⩾ P n,σ max (k n )
∗
激活, σ max (k n ) , σ (k n ) and (1+δ)P n,σ ∗ (k n ) < P n,σ max (k n )
其中, D n (k n ) 表示交叉口控制器的决策, σ (k n ) 表示当前通行相位, 延长 1 为将绿灯显示时间延长第 1 预设时间,
∗
第 1 预设时间可以设置为绿灯可延长时间的最大值. 延长 2 为将绿灯显示时间延长第 2 预设时间, 第 2 预设时间
小于第 1 预设时间. P n,σ ∗ (k n ) 为交叉口 n 当前通行相位的压力值, P n,σ max (k n ) 为交叉口 n 最大压力所在相位压力值, δ 为
∗
预设百分比, 当 σ max (k n ) , σ (k n ) 时, 说明当前通行相位不为最大压力所在相位, 此时判断 (1+δ)P n,σ ∗ (k n ) 和 P n,σ max (k n )
的压力值大小, 若 (1+δ)P n,σ ∗ (k n ) ⩾ P n,σ max (k n ) , 说明当前通行相位的压力值仍然较大, 可继续对绿灯显示时间进行延
(1+δ)P n,σ ∗ (k n ) < P n,σ max (k n ) , 说明当前通行相位的压力值较小, 可以结束当前通行相位, 并发送控制信号激活
长. 如果
下一相位进行绿灯显示. 因此, 信号灯控制算法的主要步骤如下.
(1) 按照压力从大到小的顺序排列所述最大压力计算线程的计算结果, 得到最大压力所在相位.
(2) 判断当前时刻交叉口的通行相位是否为所述最大压力所在相位.
(3) 若当前时刻交叉口的通行相位为所述最大压力所在相位, 将所述通行相位的交通信号灯显示时间调整为
最大绿灯时间.
(4) 若当前时刻交叉口的通行相位不为所述最大压力所在相位, 将所述通行相位的交通信号灯显示时间调整
为最小绿灯时间.
(5) 若当前时刻交叉口的通行相位为最大压力所在相位, 在所述通行相位的交通信号灯显示时间等于最大绿
灯时间时, 根据各相位的压力值以及相位通行等待时间确定待通行相位, 控制所述通行相位的交通信号灯切换为
黄灯显示, 控制所述待通行相位的交通信号灯切换为绿灯显示.
(6) 若当前时刻交通信号灯的通行相位不为所述最大压力所在相位, 在所述通行相位的交通信号灯显示时间
等于所述最小绿灯时间时, 控制所述通行相位的交通信号灯切换为黄灯显示, 控制所述最大压力所在相位的交通
信号灯切换为绿灯显示.
在大规模交通仿真任务中, 每一步仿真迭代都采用上述的压力计算模块和策略调整模块对信号灯的状态
进行修改, 为了能及时地调整信号灯以减少对整体系统延迟的影响, 需要对信号灯控制进行并行处理. 目前节
点内的车辆行驶算法已采用多核 CPU 进行了多线程处理, 使得车辆的模拟能够高效地并行执行. 而在并行算
法 1 的实现过程中发现, 信号灯控制可以与车辆行驶并行执行, 从而可以利用 DSP 对交通信号灯的控制算法
进行加速. 天河超算平台的加速器 DSP 采用 SPMD 的并行模式, 在具体实现中, 将分配一个 DSP 的加速核依次
计算一个交叉口中一个相位的最大压力值 (算法 1 的第 13 行) 和该信号灯控制策略 (算法 1 的第 14 行). 因此,
需要将交叉口数据按照 DSP 的簇进行划分, 每个簇的交叉口数据存在高速带宽共享内存中, 且其存储格式如
后文图 5 所示.
为了保证每个 DSP 加速核心访存的连续性, 在交通仿真系统中针对每个交叉口的数据采取了一系列策略来
优化数据的存储和访问方式. 具体而言, 考虑到交叉口内部的相位、交叉口内部车道、前驱和后继车道以及车辆
数目等关键信息, 将这些数据进行紧凑的存储, 确保相邻的数据项在内存中的物理位置是连续的, 同一交叉口的数
据在访问时可以连续地加载到 DSP 加速核心中, 避免了频繁的访存操作和数据拷贝, 减少访存的跳跃和碎片化,
提高访存的效率和性能. 通过上述内存布局的优化策略, 在保证数据连续性的前提下, 能够高效地计算出每个交叉
口各相位的压力值和信号灯控制策略.
3.4 数据存储与同步
根据天河新一代的架构, 每个计算节点中车道和路口等位置不变的数据均匀分配到不同加速簇的内存, 而车
辆运动过程中产生的动态数据 (如车道的车辆数、车速以及车辆所处的车道等), 则动态地更新至其所处车道或路
口对应簇的内存. 因此, 在每一步的仿真过程中, 考虑到动态数据在内存的同步问题, 设计了如图 6 所示的数据同
步方法.

