- 現代の高級プログラミング言語と高度なコンパイラはソフトウェア開発を大幅に簡素化し、コストを下げる一方で、APIの非効率性により現代のハードウェアが持つ性能機能を隠してしまう傾向がある
- FFmpeg開発者によれば、アセンブリコードを使うことで、ワークロードによっては性能が3倍から94倍まで向上する可能性がある
- FFmpeg内の特定機能を高速化するために、AVX-512命令セットを使った最適化コードパスを作成し、標準実装と比べてはるかに高速な性能を達成できた
- AVX-512は512ビットレジスタを用いて、単精度FLOP 16個または倍精度FLOP 8個を1回の演算で処理できるため、大量のデータを並列処理できる
- ベンチマーク結果によれば、新しい手書きAVX-512コードパスは、基準となるCコードや、AVX2およびSSE3のようなより低いSIMD命令セットを含む他の実装よりも大幅に高速だった
- この開発は、AVX-512対応ハードウェアで実行するユーザーにとって特に有用であり、メディアコンテンツをはるかに効率的に処理できる
- ただしIntelは第12世代、第13世代、第14世代CoreプロセッサでAVX-512を無効化しており、これらのCPU所有者は利用できない
- 一方、AMDのRyzen 9000シリーズCPUは完全に有効化されたAVX-512 FPUを備えているため、これらのプロセッサの所有者はFFmpegの成果を活用できる
- とはいえ、AVX-512の複雑さと特殊性のため、この種の最適化は一般に性能が重要なアプリケーションに限られ、低レベルプログラミングやプロセッサのマイクロアーキテクチャに関する専門知識が必要になる
( この内容は Tom's Hardware の FFmpeg devs boast of up to 94x performance boost after implementing handwritten AVX-512 assembly code からのもの )
6件のコメント
以前、関連する作業を少しやった経験から言うと、まず94という数字は煽りです。
コメントにもある通り、スカラーコードとベクターコードの違いによって性能差が大きく現れたものです。
しかし、ほとんどの商用コーデックはアセンブリコーディングによって最適化を行います。
「大半のCコードは最適なアセンブリコードにコンパイルされる」というのは正しい話ではありますが、商用製品を開発するにはその“大半”の水準より高くなければならないからです。特に組み込み分野ではさらに重要です。
Hacker Newsのコメント
Intel Downfall の新しい AVX2/AVX-512 脆弱性と、それによる甚大な性能への影響
https://tuxcare.com/ko/blog/…
ああ、だからインテルはAVX-512を外したのですね。
その理由というより、EコアがAVX-512をサポートしていないため、ソフトウェア的に無効化されていたと理解しています。
Pコアは非公式にAVX-512をサポートしていました。
そうですね。お知らせいただきありがとうございます :)