リンク先のパッチを見ると、ベースライン(ff_detect_range_c)[1]は普通のスカラーCコードで、スピードアップは同じ計算のAVX-512バージョン(ff_detect_rangeb_avx512)[2]で達成されてるのがわかる。FFmpegの開発者たちは、自分たちが管理しているベクトル幅に依存しないマクロのライブラリを使って、アセンブリを直接書くのを好むけど、ざっと見た感じ、同等のコードはIntelの命令を使えばCで簡単に表現できそうだね(それが好きなら)。まあ、実質的にはアセンブリと同じだけど、レジスタアロケータがあるから実際の違いは限られてる。スピードアップの大部分はベクトル化によるもので、アセンブリではない。大まかに言うと、現代のコンパイラは最も単純なループ(例えばドット積)を超えてベクトル化できないし、そもそもそれをお願いしないといけない(例えばgcc -O3、他の場合ではしばしば-O2より遅いこともある)。だから、こういう数学的なコードでは、広いベクトル(AVX/AVX2やAVX-512)と比べてパフォーマンスが数十倍遅れることもあるよ、特に個々の要素が小さい場合(ここでの8ビットみたいに)。現代のスーパースカラーCPUでの非常にタイトなスカラーコード…時にはコンパイラを意味のある差で上回ることもある(今の例だと40%のスピードアップ)。でも、すごく注意が必要だね(依存関係や実行ポートの負荷を考えて)、そのチャンスはそんなに多くないし(そもそもスカラーコードを書く理由は何なの?)。 [1] https://ffmpeg.org/pipermail/ffmpeg-devel/2025-July/346725.h... [2] https://ffmpeg.org/pipermail/ffmpeg-devel/2025-July/346726.h...