自動ニュース作成G
マルチメディアライブラリ「FFmpeg」がアセンブリ言語の手書きで爆速になったという報告 94倍も処理速度が向上、新しいCPUほど効果あり
https://forest.watch.impress.co.jp/docs/serial/yajiuma/1638345.html
2024-11-12 20:20:59
>この試みが行われたのはAV1デコーダー「dav1d」においてですが、もともと約8%がアセンブリなのだそうです。そのほかはC/C++言語のソースコードとして記述され、CPUが直接理解できる機械語にコンパイル(変換)された上で実行されています。
>しかし、コンパイラーによる変換に頼らず、人の手でアセンブリを記述し、最新CPUに搭載されている「SSSE3」「AVX2」「AVX-512」といった拡張命令を積極的に活用することで、思った以上の効率化が実現できたのだとか。
>「FFmpeg」の開発チームは、近いうちにこのアプローチに関するチュートリアルを提供するとしています。(略)なお、今回手書きアセンブリで94倍の速度向上を達成したのはx86プラットフォームでの話です。|
◆
・アセンブリで手書きって一体何行書いたんだろう・・・
・実際、コンパイルした時って拡張命令どれくらい使われてるのかな。
・午後のこ〜だの高速化を思い出す
・いま仕事でこういうことをしたい場面があるとすればx86じゃなくてARMだからな…
・使われてたC/C++言語のソースコードがアホだったのか、それともコンパイラがアホだったんじゃね?何処のコンパイラ使ってたんだよw
・関連:https://www.itmedia.co.jp/news/articles/2406/28/news163.html Meta、コード最適化のためのAIモデル「LLM Compiler」を商用ライセンスで公開
・アセンブル書いた人「コンパイラもっと仕事しろ!」って思ってそう
・低水準も記述出来るC/C++とかだとオプティマイザーの最適化にも限度がある。現状副作用も含めて動作を変えられないから、動作に関係しない副作用を無視出来るよう意図を理解するAIでも使わないとな。
・#4 ARM Cortex-M33のSIMD/FPUを想定したフィルタ関数をC言語で書いているけど、CMSISで約2倍、自分でインライン展開を想定したコード書くと4~5倍速くなるよ。とにかくメモリアクセス負荷が重いので、const指定でコードとしてタップを展開して、SIMDで効率よく計算できるようループ展開をうまく併用するのがコツ。
・浮動小数点→固定小数点化もやればさらに5倍ぐらい速くなるけど桁落ち対策例外処理が面倒