更快的道路网络定制与简单高效的公共交通路由算法
道路网络定制优化
在道路网络定制方面,为了提高效率,我们考虑从 4 个源点同时执行 Bellman - Ford 算法。当扫描顶点 v 时,会先将 v 的四个距离标签存储在一个 SSE 寄存器中。处理弧 (v, w) 时,把 ℓ(v, w) 的四个副本存储到另一个寄存器,然后使用单条 SSE 指令将两个寄存器相加。通过 SSE 比较,检查这些临时距离是否小于 w 当前的距离标签(同样加载到 SSE 寄存器中)。若满足条件,就用单条指令取两个寄存器中的最小值,并将 w 标记为活跃。
除了使用 SIMD 指令,还可以通过将单元格分配给不同的核心来利用核心级并行性。对于最高覆盖层,由于每个核心对应的单元格较少,会进一步将每个单元格中的源点拆分成大小相近的集合,分配给不同的核心(每个核心可访问整个单元格)。
以下是不同算法在各覆盖层的时间消耗(单位:毫秒):
| 方法 | 2¹¹ | 2¹⁴ | 2¹⁷ | 2²⁰ | 总计 |
| — | — | — | — | — | — |
| Dijkstra | 1071 | 710 | 587 | 423 | 4783 |
| 4 - Dijkstra | 1245 | 850 | 717 | 541 | 5372 |
| 4 - Dijkstra(SSE) | 1036 | 627 | 439 | 327 | 4425 |
| 16 - Dijkstra | 1184 | 822 | 676 | 486 | 5161 |
| 16 - Dijkstra(SSE) | 1117 | 669 | 464 | 366 | 4608
超级会员免费看
订阅专栏 解锁全文

被折叠的 条评论
为什么被折叠?



