Core Concepts
Stackless coroutines in C++20 enable fully-portable continuation stealing, leading to optimal time/memory scaling in parallel computing.
Abstract
新しいC++20の機能であるstackless-coroutinesを使用して、libforkは完全にポータブルなcontinuation stealingを実現しました。このアプローチは、並列コンピューティングにおいて理論的にも経験的にも最適な時間とメモリのスケーリングを実現しています。比較的小規模なベンチマークでは、libforkのパフォーマンスが他のライブラリよりも優れており、特にFibonacciや数値積分などのタスクでは顕著です。一方、大規模なジオメトリックツリーやバイノミアルツリーでは、libforkは線形スケーリングを示し、メモリ消費量もほぼ一定です。一方で、taskflowは常にすべての生成されたタスク用のメモリを割り当てるため、大規模な問題ではシステムのメモリを使い果たしました。
Stats
libforkは平均してopenMP(libomp)よりも7.2倍速く動作し、メモリ消費量が10倍少ないことが示されています。
同様に、Intel's TBBと比較してlibforkは平均で2.7倍速く動作し、メモリ消費量が6.2倍少ないことが示されています。
Quotes
"Fully-portable continuation stealing is achieved through stackless-coroutines in C++20."
"Libfork demonstrates optimal time/memory scaling across various benchmarks."