Hasty Briefsbeta

双语

Graph Algorithms in Rayon

5 months ago
  • #rust
  • #parallelism
  • #rayon
  • Wild链接器使用rayon实现并行化,主要通过`par_iter`,但在图探索场景下面临挑战——无法预先知晓工作量
  • 初始方案:采用`spawn_broadcast`配合自定义任务共享和作业控制。复杂度高且与其他rayon特性不兼容
  • 第二方案:通过`rayon::scope`实现作用域生成。虽因堆内存分配导致开销较大,但比自定义作业控制更简洁
  • 第三方案:通道+`par_bridge`组合。减少堆分配但引入复杂性,与`par_iter`配合时可能出现死锁
  • 基于通道的方案存在组合性问题,特别是涉及可变借用和混合不同工作队列时
  • 潜在解决方案:异步/等待机制可能提供更好的任务管理,避免rayon的线程抢占问题
  • 考虑回归作用域生成方案,尽管存在堆分配,但因其更好的可组合性
  • 未来希望减少堆分配,可能通过修改rayon对小闭包的处理来实现
  • 鸣谢支持Wild项目开发的赞助者