HeadlinesBriefing HeadlinesBriefing.com

ダブルヘッダー・スタック・アロケーターのパフォーマンス最適化

Hacker News •
×

ビデオゲームのような高パフォーマンスアプリケーションをプログラミングするとき、開発者は限定されたリソースを最大化する高速コードを書くためのテクニックを求めます。メモリ割り当ては、可変メモリを必要とするパフォーマンスクリティカルなコードにとって重要です。「バンプアロケータ」またはスタックアロケータは、割り当てを単純な整数加算として、解放をさらに安価な整数代入として扱うことでこれを最適化します。2010年頃、Surreal Softwareでキャンセルされたプロジェクト「This is Vegas」でアニメーションプログラミングを行っていたとき、アニメーションブレンディングのために頻繁な一時的割り当てに直面しました。これらの割り当ては、カメラの視錐台によってアクティブなキャラクターがどれであるかに依存し、各フレームで一時的にのみ存在しました。アロケータはプロファイリングでホットスポットとして現れました。ソリューションは、割り当てが単なる整数加算であり、メモリの解放が単一の整数代入であるスタックアロケータの実装を含みました。固定ブロック(例えば、1MB)を割り当て、「tos」(スタックのトップ)変数を維持することで、メモリ管理はほぼ瞬時に行われるようになりました。結果として、プロファイラで測定可能な割り当て時間を伴う顕著なパフォーマンス向上が達成されました。このアロケータの重要な制限の1つは、デストラクタを自動的に呼び出さないことです。配置newはコンストラクタを処理できますが、デストラクタの管理は手動であり、エラーが発生しやすいです。さらに、「tos」変数が原子的加算を使用する場合、スタックアロケータはマルチスレッジング環境で優れたパフォーマンスを発揮し、複数のスレッドが同じプールから割り当てることができ、CPUのfork/joinやGPUアルゴリズムに役立ちます。部分的な解放も可能で、再帰的なプロセスの開始時に「tos」の状態を記憶し、完了時にリセットします。この技術は、ゲームフレーム中の一時的なメモリニーズに対して、実質的な速度向上を提供します。

出典: Hacker News · 要約:HeadlinesBriefing