C#はCにどこまで迫れるか、VLCのガウスぼかしで直接対決

C vs. C#: racing VLC's Gaussian blur

C#はCにどこまで迫れるか、VLCのガウスぼかしで直接対決

VLCのガウスぼかしフィルタをC#に移植し、同じVLC内で同一フレームを処理して速度を比較。行単位の移植ではC#が約23%遅いが、ループ境界の事前計算とnint化で8%差まで縮まる。アルゴリズム最適化後はC#が現行VLCの2.5倍速、AVX2 SIMDまで使い切ると両者とも約30倍速になり、sigma 2と4ではほぼ互角となる。

C#を選ぶ本当のコストは、コンパイラが自分のループをどう扱うかを知っておくことだ。
  1. teo_zero

    いい記事だね!

    驚いたのは、元のVLCフィルタがSIMDを使っていないことだ。時々思うんだ、なぜ「モダン」なCPUにお金をかけたのかって。たくさんの新機能があるのに、毎日使うほとんどのソフトウェアに完全に無視されているんだから。

  2. tinykerneldev

    興味深い。もっと興味深かったのは、C#のSIMD組み込み関数がパフォーマンスをどのように改善するか(あるいはしないか)を見てみたかったことだ。

  3. theanonymousone

    > 小さな編集を2つ入れるだけでほとんど解決する:ループの前にループ境界をローカル変数に計算する、

    私は、まともなランタイムやコンパイラならそんな最適化はやってくれるものだといつも思っていて、Javaコードでは普通JDKに任せている。本当にそうではないのか?

  4. brookman64k

    フィルタはGPU上のシェーダーとして実行されるべきで、そうすればもっと効率的になるだろうと予想していた。

    20年近く前にGLSLで2パスガウスぼかしを実装したのを覚えている。

  5. anderskaseorg

    ただ、ガウスぼかしにはもっと高速なアルゴリズムが利用可能だ。nピクセル画像と半径σに対してO(nσ)ではなくO(n)で動作する。サーベイは https://www.ipol.im/pub/art/2013/87/article.pdf を参照。

この日のほかの記事

2026-10-24