より高速なRust用バンプアロケータ
Rustのバンプアロケータ(線形アロケータ)の高速化手法について解説。キャッシュラインの考慮やアライメント調整の最適化、インライン化などのテクニックを用いて、標準のアロケータよりも大幅に高速な実装を達成した方法を紹介する。
背景メモ
- Rustはメモリ安全性を重視するシステムプログラミング言語で、標準のアロケータはメモリ確保・解放の汎用処理に最適化されている。しかしゲームエンジンやレイトレーシングなど、毎フレーム大量の短命オブジェクトを生成しては捨てる処理では、汎用アロケータの管理コストがボトルネックになる。
- 「バンプアロケータ」は最も高速な戦略のひとつで、大容量のメモリ領域を事前に確保し、使うたびにポインタを進めるだけ(「バンプする」)で確保を完了する。解放は領域全体を一度にリセットする方式で、個別解放を管理しない分、通常のアロケータより格段に速い。
- 著者が公開した「stumpalo」は、既存のRust用高速バンプアロケータ「bumpalo」よりさらに数倍高速に動作する、新しいクレート(ライブラリパッケージ)。最適化の鍵はキャッシュライン境界への整列や、メモリ解放時のCPU命令減らしなど、低レイヤに踏み込んだ工夫にある。
- 既存のbumpaloは広く使われているが、競合を意識した性能改善が停滞している現状があり、stumpaloはそれを打ち破る形で登場した。Rustのエコシステムでは、安全なコードを保ちながらC/C++並の低レベル制御を求める流れが強まっており、本稿はその文脈でのホットトピック。