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

サムネイル
1 : 2024/11/11(月) 18:15:08.24 ID:xFvWLnU40

ビデオ・オーディオを扱うアプリの多くで採用されているオープンソースライブラリ「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:16:54.03 ID:AWJZRKJi0
全部アセンブラで書いたら鬼のように速くなると思う
アセンブラ書けないやつは全部クビね
3 : 2024/11/11(月) 18:17:35.82 ID:U6cCKAhA0
凄いけど滅茶苦茶大変だろ
4 : 2024/11/11(月) 18:17:58.26 ID:seZCdwoh0
今でもエムペグ動画とか使ってる奴いるの?
5 : 2024/11/11(月) 18:18:13.47 ID:RI5N/92k0
手間が凄そう
6 : 2024/11/11(月) 18:18:21.48 ID:OheXIiN00
そうだ!人の手によるアセンブリをプログラム化すれば!!
7 : 2024/11/11(月) 18:18:29.49 ID:LODI36BJ0
上手い人間が最適化すれば、そういう事もあるだろうな
もともとCは関数呼び出しのオーバーヘッドが大きいから計算には向かんって言われてるし
その昔、技術計算に特化したUBASICてのもあったな
15 : 2024/11/11(月) 18:22:00.14 ID:x33gFWWH0
>>7
Cつーかブランチはスタックにレジスタの中身退避とか
戻ってきたらスタックから戻すとかコストかかるしね
レジスタ増えてるから違うのかもしれないが
8 : 2024/11/11(月) 18:18:34.22 ID:iN0HF5UZ0
1時間かかるエンコードが1分かからなくなるのか?
9 : 2024/11/11(月) 18:18:44.77 ID:o85zTIi60
AIに最適化させろよ
41 : 2024/11/11(月) 18:38:22.79 ID:ZnSTNFje0
>>9
だな
73 : 2024/11/11(月) 19:02:23.78 ID:3PNHKzq50
>>9
> AIに最適化させろよ

人の手で書いたら早くなったんだよ

10 : 2024/11/11(月) 18:19:25.17 ID:LIwQ9/dL0
ChatGPTでアセンブラに直してもらったら
速くなる?
11 : 2024/11/11(月) 18:19:36.21 ID:4CXOLJIt0
汚染ブラジャー?
12 : 2024/11/11(月) 18:19:37.49 ID:SZIYwdD50
arm系はどうなの
13 : 2024/11/11(月) 18:19:42.02 ID:AWJZRKJi0
最適化Cって無くなったのかな?
MSCは遅いよ…
14 : 2024/11/11(月) 18:20:16.83 ID:uu1YzsFN0
なんで人間様がアセンブラ書かなきゃならねえんだよ💢
コンパイラがもっと頑張れよ💢😡
16 : 2024/11/11(月) 18:22:14.12 ID:9YvzLxX40
マジかよアセンブリ言語習得してくる
17 : 2024/11/11(月) 18:22:26.08 ID:BPjEDvNl0
AIにアセンブラ変換させるといいな
18 : 2024/11/11(月) 18:24:28.55 ID:QdKeYwFO0
AIにって言ってるやつそれただのコンパイラやん
19 : 2024/11/11(月) 18:24:49.66 ID:x33gFWWH0
今ってCPUキャッシュもでかいし面白そうではある
20 : 2024/11/11(月) 18:25:51.05 ID:iqXsTURh0
困憊ら酷すぎでは
21 : 2024/11/11(月) 18:25:51.79 ID:JjCoQ8ew0
>>1
AV1デコーダー限定じゃ、使い道がないなw
22 : 2024/11/11(月) 18:26:53.74 ID:GYp2REAE0
なるほど
これからはシステムはプロンプターが生成AIに作らせて人間はアセンブラでボトルネックの高速化担当か
まさに人間はAIの奴隷だな
23 : 2024/11/11(月) 18:27:47.93 ID:fikdhU4z0
インラインアセンブラ
昔は凄いプログラマーが高速化やってたよな
高級言語しか書けない今のプログラマーは平凡
61 : 2024/11/11(月) 18:53:31.50 ID:ZQd+X78a0
>>23
処理が高速化&メモリも増えてるから可読性を重視してるんだよ、今は
24 : 2024/11/11(月) 18:28:15.23 ID:CmSw8ixB0
スタックしたり無駄な部分はコンパイラでコード吐かせたらあるやろな
26 : 2024/11/11(月) 18:28:59.65 ID:AGAHpHyj0
AVX-512無い人はどうすんのさ
27 : 2024/11/11(月) 18:29:54.22 ID:x33gFWWH0
>>26
AVX256?で2回とか
28 : 2024/11/11(月) 18:29:56.28 ID:18PmoTnF0
アセンブラって言語なん?
ニモニック並べてるだけだよな
39 : 2024/11/11(月) 18:36:55.94 ID:GYp2REAE0
>>28
ニモニックとか言葉使ってるのにアセンブラ分からないは無いだろ
当然、アセンブラも機械語ではあるが中身はレジスタレベルの転送が何回か行われている
29 : 2024/11/11(月) 18:30:34.90 ID:bVg14Q4l0
そりゃそうだろ
30 : 2024/11/11(月) 18:30:48.29 ID:/KgINDnm0
昔はゴリゴリ書いてた
31 : 2024/11/11(月) 18:30:58.79 ID:C4mxT4DF0
互換性保てるなら何しようが構わんが
32 : 2024/11/11(月) 18:31:22.64 ID:nkOMbi5/0
本当のアセンブリはCPUもGPUも専用になるからな
いまのプログラミングなんて本当の意味では昔のbasicと同じでインタプリンタみたいなもんだから最適化されたアセンブリと比べたらクソ遅いに決まってる
33 : 2024/11/11(月) 18:31:55.59 ID:01Mbjpdh0
これコンパイラがダメダメってことでは
35 : 2024/11/11(月) 18:34:30.16 ID:x33gFWWH0
>>33
長いコード書いちゃだめって言われてるので
関数の呼び出し(ブランチ)の多用にどうしてもなってしまう
34 : 2024/11/11(月) 18:32:58.96 ID:ZHiiIUou0
intrinsicで勘弁して
37 : 2024/11/11(月) 18:35:57.99 ID:h91b1fnb0
Z80のマシン語で腕を鍛えたわいの出番か!
38 : 2024/11/11(月) 18:36:11.97 ID:x33gFWWH0
ループでせいぜい数回ならメモリもいっぱいの時代なので
ジャンプ命令とか使わず同じコードを並べた方が早いのかな?
50 : 2024/11/11(月) 18:44:28.76 ID:FiLDT3AP0
>>38
早いよ。
先読みとか付いてたらわからんけど、ループカウンターインクリメントとカウンタ値判定とループ元へのJUMP命令分クロックを余計に使うからね
53 : 2024/11/11(月) 18:47:21.35 ID:h91b1fnb0
>>38
キャッシュがない時代は高速化のためにループ展開してたが今はCPUキャッシュがあるからループした方がキャッシュがヒットして速い
40 : 2024/11/11(月) 18:37:43.04 ID:nI3dQ9/q0
アセンブリで高速化を突き詰めると書いた人しか分からなくなるんだよ…
47 : 2024/11/11(月) 18:42:35.31 ID:x33gFWWH0
>>40
そうそう
メモリを介するとクロック無駄になるのでレジスタ上で全部終わらせて
変数がメモリに存在しないとか普通だし
論理演算やビットシフトで計算コスト減らしたり
54 : 2024/11/11(月) 18:47:49.89 ID:FiLDT3AP0
>>47
AレジスタクリアはAに0を代入じゃなくて、A同士で排他的論理和とかな
42 : 2024/11/11(月) 18:38:56.12 ID:6QCob8uT0
そりゃアセンブリで機械側の言語のほうが余計な処理が入らず早いに決まっとるわw

ただ小さなアプリならできるかもしれんが
大規模だと無理なわけで

43 : 2024/11/11(月) 18:40:01.16 ID:FiLDT3AP0
昔はニーモニック書いてハンドアセンブラでMZ-80に打ち込んで遊んでたなぁ
マシン語だと死ぬほど早かった
44 : 2024/11/11(月) 18:40:31.95 ID:+OlXFyWk0
コンパイラうんこ過ぎない?
Microsoftとかでそんなになる?
そんなにうんこなら未だにアセンブラー生きてるでしょ。
45 : 2024/11/11(月) 18:40:46.77 ID:tIHQCMqB0
誰もメンテ出来なくなるな
46 : 2024/11/11(月) 18:41:36.77 ID:ATZXY+6r0
今ではc言語速いと言われてるけど本当に処理速度が必要な部分はアセンブラで書いてたな、pc98全盛期の頃だけど
56 : 2024/11/11(月) 18:48:26.01 ID:h91b1fnb0
>>46
PC98はなんの面白みもないクソみたいなパソコンたったなぁ
48 : 2024/11/11(月) 18:42:55.29 ID:dDuqMsHk0
アセンブラで書けば桁違いに早いのは当然だろうね。
49 : 2024/11/11(月) 18:43:26.43 ID:Vzx70kmz0
マシン語の本を立ち読みして家で記憶を頼りにMSXへ打ち込んでたわ
小学生で本買う金なかったけど記憶力は鍛えられた
51 : 2024/11/11(月) 18:44:45.33 ID:yt17i8gx0
BASICでゲーム作ったら遅くてお話にならんかった。
繰り返し呼ばれる処理をハンドアセンブルして機械語で打ち込んだらクッソ速くなったのを思い出した。
52 : 2024/11/11(月) 18:46:28.25 ID:3hYj7rZ20
アセンブリ言語とかを勉強すればいいのか?
55 : 2024/11/11(月) 18:47:51.85 ID:rTolIQKB0
dsPIC使ったら高速処理はアセンブリで書けって
訳もわからずコピペしてた
58 : 2024/11/11(月) 18:48:46.76 ID:mjnQ94p90
やわ銀ジジイが来てないか確認
59 : 2024/11/11(月) 18:49:41.29 ID:7VhDfm7Y0
コンパイラが馬鹿だったってこと?
60 : 2024/11/11(月) 18:50:48.67 ID:u3Q8W4I80
セキュリティホールを意図的に埋め込んでも誰も発見できなくなりそう
AIが見つけてくれる?
62 : 2024/11/11(月) 18:53:43.48 ID:eBJUpb1A0
HDL使えよ
アセンブラより速いぞ
63 : 2024/11/11(月) 18:55:58.66 ID:c/wR5glz0
汗って結局、機種、cpu別に書き分けするの?グラボ毎にも?
64 : 2024/11/11(月) 18:56:33.02 ID:/8uOqkFT0
ひと頃はコンパイラの方が速いとよく言われたものだが
歴史の浅いSIMD命令は人の方がまだ上なのかね
65 : 2024/11/11(月) 18:58:31.00 ID:PRoDzkY10
じゃば「ₙ́͘ ɪ ̵」
66 : 2024/11/11(月) 18:58:38.08 ID:5Et20Hal0
それよりもめちゃくちゃ効率のいいコンパイラ作れば 億万長者になれるんじゃね?
67 : 2024/11/11(月) 18:58:43.64 ID:iU4tCwkN0
このスレに限らずなんでもかんでも
AIという奴が多くて笑う
魔法じゃねーんだぞ
68 : 2024/11/11(月) 18:59:01.49 ID:vpJqZ9UH0
AIにやらせておけば作ってくれると思ってたら。
69 : 2024/11/11(月) 19:00:36.02 ID:oi43BhPn0
最近AIにスクリプトのことをずっと聞いてるけどわりとポンコツだからAIはそこまで万能じゃないぞ
70 : 2024/11/11(月) 19:00:56.55 ID:djJMj0qj0
AIにやらせろってw
それただのコンパイラだろwww
71 : 2024/11/11(月) 19:01:08.30 ID:80nmg7fZ0
コンパイラはオーバヘッドだらけだし
マシン語最強っすね
72 : 2024/11/11(月) 19:02:10.62 ID:80nmg7fZ0
Windowsもアセンブラで記述しろ
74 : 2024/11/11(月) 19:02:48.61 ID:UU3fTUwg0
こいう一瞬の輝きはできるけど、潰しが効かないだろアセンブラは

コメント

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