FFmpeg、アセンブリ言語で書き直したところ94倍の高速化に成功😳

サムネイル
1 : 2024/11/11(月) 18:18:58.83 ID:t9CKUigHd1111

ビデオ・オーディオを扱うアプリの多くで採用されているオープンソースライブラリ「FFmpeg」で、驚くべきパフォーマンス向上が達成されました。
アセンブリ言語(assembly)を手書きすることで、94倍も処理速度が向上したとのこと。

この試みが行われたのはAV1デコーダー「dav1d」においてですが、もともと約8%がアセンブリなのだそうです。
そのほかはC/C++言語のソースコードとして記述され、CPUが直接理解できる機械語にコンパイル(変換)された上で実行されています。

 しかし、コンパイラーによる変換に頼らず、人の手でアセンブリを記述し、最新CPUに搭載されている「SSSE3」「AVX2」「AVX-512」といった拡張命令を積極的に活用することで、思った以上の効率化が実現できたのだとか。

 コンパイラーもそうした最新のCPU拡張命令を活用するオプションがあり、人手を介さなくてもかなりの最適化を行ってくれるはずですが、細部には改善の余地が多く残されているのかもしれません。
もしかすると、将来バージョンの「FFmpeg」はかなり速くなる……のかも。そうなれば、「FFmpeg」を採用するアプリにも恩恵は大きいでしょう。

 「FFmpeg」の開発チームは、近いうちにこのアプローチに関するチュートリアルを提供するとしています。
筆者の手には負えそうにありませんが、興味ある方はウォッチしてみるとよいでしょう。

マルチメディアライブラリ「FFmpeg」がアセンブリ言語の手書きで爆速になったという報告
https://forest.watch.impress.co.jp/docs/serial/yajiuma/1638345.html

2 : 2024/11/11(月) 18:20:42.01 ID:arKg2gHU01111
インストールできるCPU限られるのか?
9 : 2024/11/11(月) 18:23:34.26 ID:MBavmrnT01111
>>2
AVX512は最近のAMD64のCPUにはだいたいついてるだろ
ARM Neon用は別で書いてるだろうけど
62 : 2024/11/11(月) 18:40:40.61 ID:Q9zAwzNj01111
>>2
限られないんじゃね?
まだ中身見てないけど普通こういうのは全部のCPUで動くジェネリックな実装があって
特定の CPU 拡張が存在するとき個別のアセンブリ実装に切り替わる
3 : 2024/11/11(月) 18:21:24.34 ID:arKg2gHU01111
すべてのコアに対応したアセンブラって書けるの?
66 : 2024/11/11(月) 18:41:02.99 ID:Q9zAwzNj01111
>>3
不可能
個別対応になる
4 : 2024/11/11(月) 18:21:36.13 ID:UtY5uAwW01111
コンパイラさん…どうして…
5 : 2024/11/11(月) 18:22:07.81 ID:UtY5uAwW01111
お絵かきソフトのSAIはアセンブラで書かれてたんだよね
6 : 2024/11/11(月) 18:22:12.56 ID:aB83Ffv901111
天才の所業やな
7 : 2024/11/11(月) 18:22:28.32 ID:/LqusvjW01111
アセンブリ言語ってなに?安倍晋三で例えて
10 : 2024/11/11(月) 18:23:35.99 ID:arKg2gHU01111
>>7
心臓と晋三の間を埋める言語じゃないかな?よーわからんけどw
44 : 2024/11/11(月) 18:35:57.89 ID:yBLqDHeb01111
>>7
アベ言語「隠蔽というのはですね、隠蔽というのはー、隠蔽というのはじゃあ、わたくしが隠蔽したんですか」
8 : 2024/11/11(月) 18:23:13.13 ID:dIj8TwUGd1111
っぱ時代はアセンブラよ😤
11 : 2024/11/11(月) 18:23:51.58 ID:9fUsHCjj01111
開始したら他の全ての処理が止まってマウスすら動かなくなったりしそう
12 : 2024/11/11(月) 18:24:25.79 ID:99jn2jtPa1111
人の手のぬくもりがあるほうが高速化できる
13 : 2024/11/11(月) 18:24:35.21 ID:moVrz2YS01111
動画編集ツール作ってるがこれ導入してえ
遅すぎるんよどれも
17 : 2024/11/11(月) 18:27:09.10 ID:MBavmrnT01111
>>13
たぶんAV1の動画を読みこむとこしか速くならんけどオープンソースだから使えるは使えると思う
14 : 2024/11/11(月) 18:26:04.98 ID:8JvAKKUO01111
Intel CPUはSIMD命令酷使して負荷かけるとクロック下がる欠陥設計なんでおすすめしません(´・ω・`)
15 : 2024/11/11(月) 18:26:12.24 ID:ZWqF/AOC01111
元々C/C++で書かれてたのをアセンブリ言語に書き直して94倍も速くなるんなら、たぶんコンパイル時の最適化オプションが間違ってただけだと思う。
22 : 2024/11/11(月) 18:27:51.59 ID:MBavmrnT01111
>>15
SIMDの使い方でしょ
35 : 2024/11/11(月) 18:31:57.80 ID:9t7piVGL01111
>>15
拡張命令は特殊すぎてコンパイラで最適化できない
16 : 2024/11/11(月) 18:26:26.95 ID:zZdRyE//01111
メンテナビリティやばそう
18 : 2024/11/11(月) 18:27:12.61 ID:PBgqqz3001111
携帯動画変換君とかでお世話になった気がする🤔
19 : 2024/11/11(月) 18:27:29.35 ID:MVZU1WB201111
デコーダかよ高速化して欲しいのはAV1のエンコーダの方なんだけど
20 : 2024/11/11(月) 18:27:32.62 ID:MpWy/pFH01111
12世代CoreだとPコアはAVX-512に対応できるんだけどEコアが対応してない
そのせいでCPUとしては無効になってる
21 : 2024/11/11(月) 18:27:38.52 ID:ZWqF/AOC01111
それか、最適化が下手なコンパイラ使ってたか。
その場合はコンパイラをまともなのに変更すれば解決するだろ。
23 : 2024/11/11(月) 18:28:13.83 ID:GFRFZPsz01111
ベクトル化するだけなら別に難しくないぞ
avx512は並び替えとか柔軟にやってくれる命令が沢山追加されてだいぶやりやすくなってる(面白みも減ったが)
25 : 2024/11/11(月) 18:29:15.36 ID:MBavmrnT01111
>>23
とはいえ頭が混乱する感じはあるな俺の場合
24 : 2024/11/11(月) 18:29:10.58 ID:s7qGqJpc01111
まだまだあると思うよ、こういうの
効率化でビジネスのスピードしか優先されてない結果だよ
26 : 2024/11/11(月) 18:29:20.43 ID:CtfLCisV01111
コンパイラが信用できんのは今も昔も同じか
27 : 2024/11/11(月) 18:29:36.93 ID:lAk9samVH1111
コボラーおじさんの中に混じってるアセンブリ爺さんの魅力
28 : 2024/11/11(月) 18:29:37.29 ID:A9DDTbp001111
コンパイラの最適も万能ではなくて
ベクトル演算とか複素数演算はハンドアセンブルまでいかなくても
intrinsic使うだけでもかなり早くなるんだよな
メモリアライメントにシビアだからコンパイラ最適化では対応できない場面が多い
29 : 2024/11/11(月) 18:30:09.03 ID:J/cMqph/H1111
AVX-512って日本語wikipediaページ無いのかよ
30 : 2024/11/11(月) 18:30:10.71 ID:ZWqF/AOC01111
もしコンパイラの問題だとしたら、たぶん最近の拡張命令にコンパイラのバージョンアップが追いついてないだけだから、アセンブリ言語に書き直すよりもコンパイラのバージョンアップを気長に待ってた方がいいと思う。
31 : 2024/11/11(月) 18:30:11.97 ID:Q5UqbqfQ01111
そりやコンパイラの最適化はどんなソースも変換する前提で冗長度の高い機械語命令を出してフロー最適化とか節穴最適化とか汎用的な最適化をする物だから
仮に効率の良い特定の命令を出力できるとしても、それ専用のソース書き換えが必要だから、アセンブリ言語でパズルするよりは効率悪くて当然だろ
83 : 2024/11/11(月) 18:46:31.70 ID:W154C/8Zr1111
>>31
コンピューター・サイエンスの学位持ってるの?
32 : 2024/11/11(月) 18:30:18.73 ID:UY2kF3Jz01111
dav1dって強いの?
33 : 2024/11/11(月) 18:31:28.37 ID:xaWrjqbY01111
コンパイラという足かせ。
34 : 2024/11/11(月) 18:31:56.18 ID:Q5UqbqfQ01111
コンパイラのバージョンアップがあっても
特定の機械語の使用条件やCPU内部動作を意識したソースを書かないと冗長になるよね
36 : 2024/11/11(月) 18:32:06.07 ID:Dp2whBXm01111
アーキテクチャを設計できるレベルの知能と知識が無いとコンパイラより効率的にするなんて無理でしょ
38 : 2024/11/11(月) 18:32:56.79 ID:J/cMqph/H1111
youtubeの中で再エンコードやってる人とかバリバリに自社製作してるんだろうな
39 : 2024/11/11(月) 18:33:25.97 ID:bbjiWwYlH1111
この手のPC関連スレに必ずやってくる名物の話通じないおっさん今日も来るかな?
43 : 2024/11/11(月) 18:35:54.65 ID:99jn2jtPa1111
>>39
山形大学が~
41 : 2024/11/11(月) 18:33:47.94 ID:BFVftqgg01111
AV1の動画が軽くなるんか?
再生支援無くても再生できる?
42 : 2024/11/11(月) 18:33:51.57 ID:Im5s/7c501111
業務アプリでおんなじ事やったら死後も棺桶に変更依頼書入れられそうで怖いよな
51 : 2024/11/11(月) 18:36:37.98 ID:bbjiWwYlH1111
>>42
本人はエスプリの効いたジョークだと思ってるけど実際にはクソつまらないパソコンの大先生お得意のクソ寒発言やめろ
46 : 2024/11/11(月) 18:36:15.10 ID:MVZU1WB201111
ffmpegはgccかclangでコンパイルして使うことを主に想定してるからな
Intelの有償のコンパイラのようにはいかない
47 : 2024/11/11(月) 18:36:21.10 ID:ZCB2FZ5S01111
コンパイラさえしっかり作ればすべての言語がチップ性能無駄なく使えるはずなんだけどな
ビルゲイツがなにかやってたはず
48 : 2024/11/11(月) 18:36:22.98 ID:uS2zrwyY01111
つまりどういうことだってばよ?
49 : 2024/11/11(月) 18:36:26.72 ID:jZs3fpya01111
とんでもないコストじゃないか
50 : 2024/11/11(月) 18:36:27.18 ID:K57/GEXG01111
でその書き直した版のソフトはどこにあるの?
52 : 2024/11/11(月) 18:36:40.95 ID:lBYvoufCM1111
ダンプリスト松本
53 : 2024/11/11(月) 18:37:37.55 ID:zY0gQvVAH1111
こんなのこそAIにやらせろよ
54 : 2024/11/11(月) 18:37:43.54 ID:Q5UqbqfQ01111
業務アプリでアセンブリ言語使うって、ハードとソフトの限界まで使うような極端な制約は少ないだろ
FAとか宇宙開発とかチップの世代とか消費電力とかメモリフットプリントとかタイミングがクリティカルなら組むだろうけど、どっちかというと理系の科学技術系分野だろうね
55 : 2024/11/11(月) 18:37:44.80 ID:cnFUNAld01111
要はメモ帳に01の並び何マンと書けば全部できるの?
56 : 2024/11/11(月) 18:37:52.96 ID:w8DcWCCjr1111
昔の組み込みだとcでタイミングがきついところは
インラインアセンブラで書いたりするな
57 : 2024/11/11(月) 18:38:30.15 ID:lyMIoT9j01111
コンパイラーってAIなんかでごりごりに詰めていけば最終的にアセンブリに近づいていったりするのかな将来的には
58 : 2024/11/11(月) 18:38:35.74 ID:Oh10JAMH01111
つまり94秒かかってたのが1秒で終わるってこと?
59 : 2024/11/11(月) 18:39:14.78 ID:99jn2jtPa1111
アセンブリ言語を使った最適化のコンテストに参加したことあるけど
人によって性能に差がめちゃくちゃあるぞ
コンパイラじゃ細かいところが無理だよ
67 : 2024/11/11(月) 18:41:46.02 ID:JRNBrDCo01111
>>59
うん
アセンブラ使えばどんなプログラミング言語よりも速い
ただそれだけしか知らずそれだけしか言えないこのスレのアホ共をもっと説教してやってくれ
71 : 2024/11/11(月) 18:43:08.59 ID:++GQddoT01111
>>59
凄え
並べ替えるしかわからん
61 : 2024/11/11(月) 18:40:19.03 ID:J/cMqph/H1111
水の女にストーカーしてるおじさんか
69 : 2024/11/11(月) 18:42:28.43 ID:Q5UqbqfQ01111
>>61
キミの言う水の女がストーキングハラスメントで通報されている犯罪常習者だね

ン!わざわざ毎回幼稚な繰り言を書いて、頭が空っぽすぎる

63 : 2024/11/11(月) 18:40:44.57 ID:erCqOnb101111
アセンブラで直接叩くとか久しぶりに聞いた
ファミコン時代とかはそれでカツカツに処理力を上げてた
64 : 2024/11/11(月) 18:40:51.77 ID:UY2kF3Jz01111
みんなパイプラインの動きが頭の中で完全に再現できてるか?
65 : 2024/11/11(月) 18:40:59.74 ID:Q5UqbqfQ01111
なんか嫌儲で職場名や自身の苗字を毎回書いている人の
知能とメンタルが幼稚過ぎて呆れ返るよね

まともな雑談もできない幼稚な障碍者

68 : 2024/11/11(月) 18:42:08.46 ID:Dp2whBXm01111
C言語でさえメモリの取り扱いで危険だらけなのに
アセンブリ言語手打ちで脆弱性とか大丈夫なんかね
76 : 2024/11/11(月) 18:44:54.24 ID:Q9zAwzNj01111
>>68
もちろん大丈夫ではないし
C で書くより遥かにミスし易い
70 : 2024/11/11(月) 18:42:35.26 ID:CeWmhiYJ01111
ytdlpおじさん「いいなこれ」
73 : 2024/11/11(月) 18:43:35.80 ID:W154C/8Zr1111
何で君達そんなにコンピューターに詳しいの?
CS degree 持ってるの?
74 : 2024/11/11(月) 18:44:09.92 ID:29iONLkd01111
オプティマイザーがタコなんだろう
75 : 2024/11/11(月) 18:44:10.25 ID:Rm1hZVr801111
変態かよw
77 : 2024/11/11(月) 18:44:55.85 ID:UY2kF3Jz01111
キャッシュヒット率とか考えてデータ構造設計してくれよ
78 : 2024/11/11(月) 18:45:08.74 ID:Qbq47IrS01111
OpenCVにも使われてんのかこれ
79 : 2024/11/11(月) 18:45:15.98 ID:Q5UqbqfQ01111
>59
キチガ●ジ本人やん
暗黒通信団のπの人ならその手のコンテスト経験があるだろうけど
トンボの人はプログラムが苦手で学位論文研究未完のまま学位を要求したポンコツでしょ

虚言に具体性もなく小学生レベル

80 : 2024/11/11(月) 18:45:47.02 ID:pr9gdvAd01111
全部とは言わず演算の重いところだけでもアセンブラに切り替えたら早くなりそうよね。絶対やりたくないし出来ないけど
81 : 2024/11/11(月) 18:45:52.70 ID:MpWy/pFH01111
頭の中でレジスタと演算とパイプラインとキャッシュのシミュレーションができる人間ならコンパイラに勝てる
84 : 2024/11/11(月) 18:47:15.12 ID:/O2zLxu701111
アセンブリ記述で94倍の性能向上ができたということは、元のコードが悪かっただけ。
並列化できるように書いてないとか、キャッシュ構造を理解してないとか、コンパイラのチューニングが悪いとか。
85 : 2024/11/11(月) 18:47:22.80 ID:Q9zAwzNj01111
なんかスレに関係ない人物名とか出して暴れてる奴が居るけど
これ何?
89 : 2024/11/11(月) 18:48:20.62 ID:A9DDTbp001111
>>85
皆スルーしてるよ
アカデミックな話題になると涌いてくる私怨拗らせた可哀想な人
94 : 2024/11/11(月) 18:49:37.45 ID:W154C/8Zr1111
>>89
コンピューター・サイエンスの学位持ってるの?
87 : 2024/11/11(月) 18:47:25.59 ID:bP7BBLrj01111
av1遅すぎてエンコできない問題解決したの
90 : 2024/11/11(月) 18:48:28.87 ID:Q9zAwzNj01111
>>87
それについては続報を聞かないな
まだじゃないか?
88 : 2024/11/11(月) 18:48:11.47 ID:3N6xY5g/H1111
今どきのアセンブラも命令入れ替えてペアリングとかしてるの?
もはやロストテクニックなのでは
91 : 2024/11/11(月) 18:48:41.86 ID:erCqOnb101111
こういう職人芸はパソコンならx68kゲームならPS1が最後か?
92 : 2024/11/11(月) 18:49:09.83 ID:6la48I9M01111
30年くらい前には16進数の文字の羅列をチラっと眺めて問題点指摘出来る天才がいたってNRIに居た時に聞いたが本当か?
93 : 2024/11/11(月) 18:49:10.81 ID:99jn2jtPa1111
俺は知らなかったが有名な話で
モジュラー演算はコンパイラで最適化すると
割ってなくてシフト演算してるんだってさ
知ってた?w

コメント

タイトルとURLをコピーしました