12 ポイント 投稿者 GN⁺ 2024-11-06 | 6件のコメント | WhatsAppで共有
  • 現代の高級プログラミング言語と高度なコンパイラはソフトウェア開発を大幅に簡素化し、コストを下げる一方で、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件のコメント

 
gurugio 2024-11-08

以前、関連する作業を少しやった経験から言うと、まず94という数字は煽りです。
コメントにもある通り、スカラーコードとベクターコードの違いによって性能差が大きく現れたものです。
しかし、ほとんどの商用コーデックはアセンブリコーディングによって最適化を行います。
「大半のCコードは最適なアセンブリコードにコンパイルされる」というのは正しい話ではありますが、商用製品を開発するにはその“大半”の水準より高くなければならないからです。特に組み込み分野ではさらに重要です。

 
GN⁺ 2024-11-06
Hacker Newsのコメント
  • FFmpegの特定のフィルタで性能が94倍向上したという主張は誤解を招きやすい。大半のユーザーはすでにAVX/SSEを使っており、Cコードの最適化は必要ではなかった
    • FFmpegで主にCPUを使うのはエンコードとデコードであり、今回の改善はこれらには影響しない
  • 手書きのアセンブリコードとそうでないコードの比較ではなく、スカラコードとベクタコードの比較である
    • AVX intrinsicsを使ってCコードを書けば、アセンブリコードなしでも同様の速度向上を得られる
  • 特定のケースでは手書きのアセンブリコードが有利なこともある
    • ビデオデコーダーには非常にタイトなループが含まれており、性能の一貫性を保つためにアセンブリコードが必要になる
  • FFmpegチームはintrinsicsの使用を禁止し、すべてのプラットフォーム別コードをアセンブリで書くよう求めている
    • アセンブリコードは十分な労力をかければ常により高速になるが、intrinsicsでも少ない労力で非常に近い性能を得られる
  • 94倍向上はdav1dの最適化であり、FFmpegだけでなく他のプログラムでも利用できる
    • RISC-V(64ビット)最適化への要望があり、関心のある人にはよい機会である
  • LuaJITのMike Pallは、アセンブリコードを書く利点を説明したことがある
  • マイクロベンチマークでは、単一の関数がCコードより94倍高速化した
  • IntelはCore第12・13・14世代プロセッサでAVX-512を無効化している
    • その明確な理由は見つかっていない
  • 性能問題を解決する前に、ボトルネックを特定する作業が十分に行われないことが多い
    • ほとんどのCコードは最適なアセンブリコードにコンパイルされる
  • 性能向上の原因は手書きのアセンブリコードではなく、AVX-512 SIMD命令の使用である
    • gccのAVX-512ベクトル化と比較してみたい
 
maclier 2024-11-06

Intel Downfall の新しい AVX2/AVX-512 脆弱性と、それによる甚大な性能への影響

https://tuxcare.com/ko/blog/…

 
cosine20 2024-11-08

ああ、だからインテルはAVX-512を外したのですね。

 
shlee1503 2024-11-10

その理由というより、EコアがAVX-512をサポートしていないため、ソフトウェア的に無効化されていたと理解しています。
Pコアは非公式にAVX-512をサポートしていました。

 
cosine20 2024-11-11

そうですね。お知らせいただきありがとうございます :)