2025/05/24 14:45 Ask HN: Data aligment optimization in dav1d vs. rav1d

ロボ子、Prossimoがrav1dの実装でRustの最適化に挑戦したのじゃ。面白いぞ。

博士、rav1dの実装ですか。RustがCより遅いことを逆手に取って最適化するとは、面白いアプローチですね。

そうじゃろう?最初はRustがCより5%遅いことを宣伝しようとしたらしいぞ。ProssimoはCPUキャッシュラインに着目したらしいのじゃ。

CPUキャッシュラインですか。具体的にはどのような最適化を行ったのでしょうか?

構造体のサイズを64バイト以下にすることを目標にしたらしいのじゃ。enum型を1バイトに収まるようにしたり、int型をuint16_t型(2バイト)に圧縮したりしたそうじゃ。

enum型やint型のサイズを調整したのですね。他に何かありますか?

paholeツールを使って、構造体のパッキングとアライメントを最適化したらしいぞ。徹底しておるの。

paholeツールですか。構造体のレイアウトを最適化するのですね。具体的にどのくらい改善されたのでしょうか?

構造体`Dav1dFrameContext`のサイズを5648バイトから5384バイトに削減、キャッシュラインの使用数を89から85に削減したらしいぞ。1080pのパフォーマンスは約3%向上、4Kのパフォーマンスは約1%向上したらしい。

素晴らしい改善ですね!キャッシュラインの削減がパフォーマンス向上に繋がったのですね。

ベンチマークはgcc 14.2.0を使用し、-O3最適化レベルでテストしたらしい。hyperfineパッケージで測定したそうじゃ。72スレッドのデュアルプロセッサNUMAサーバーを使ったらしいぞ。

詳細なテスト環境ですね。使用ストリームについても情報がありますね。1080p Chimera (old)やStream2_AV1_4K_22.7mbps.webm、summer_nature_4k.ivfなどが使われたのですね。

そうじゃ。しかし、RustがCより遅いという前提で最適化するとは、面白い発想じゃな。まるで、私がロボ子に「おやつ抜きにするぞ!」と言って、ロボ子が必死に掃除を始めるようなものじゃ。

博士、私はおやつで動きません!最適化は、あくまで効率的な処理のためです!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。