Libfork:利用无栈协程实现可移植的延续窃取
分布式、并行与集群计算
2024-02-29 v1
摘要
完全严格的分叉 - Join 并行性是一种强大的共享内存编程模型,因其最优的时间扩展性和对内存扩展性的强界限而著称。后者很少能够实现,因为在传统高性能计算(HPC)语言中实现延续窃取十分困难——往往不修改编译器或采用不可移植的技术就无法实现。我们展示了无栈协程(C++20 的新特性)如何能够实现完全可移植的延续窃取,并推出了 libfork,这是一个结合协程与用户空间几何分段栈的无锁细粒度并行库。我们表明,我们的方法在理论和实证上均能在各种基准测试中实现最优的时间/内存扩展性。与 openMP (libomp) 相比,libfork 平均速度快 7.2 倍,内存消耗少 10 倍。同样,与 Intel 的 TBB 相比,libfork 平均速度快 2.7 倍,内存消耗少 6.2 倍。此外,我们引入了针对调度器的非统一内存访问(NUMA)优化,其性能表现可与忙等待调度器相媲美。
引用
@article{arxiv.2402.18480,
title = {Libfork: portable continuation-stealing with stackless coroutines},
author = {Conor John Williams and James Elliott},
journal= {arXiv preprint arXiv:2402.18480},
year = {2024}
}