2016/03/26

コンパイラの吐くアセンブリコードがほぼ手書きと同じレベルな件

というかもはや最適化はインラインアセンブリではなく、
「如何にコンパイラが最適化しやすいCコードを書くか」ということに尽きる気がします。

というわけで21500ぐらいまで来ました。

何はともあれ、自分の環境(DevilsCannyon=Haswell)4.5GHzで普段使っているフィルタをかけて25~26fps出るようになったため、24フレームのアニメをフィルタをかけてリアルタイム再生できます。

参考にいつものフィルタは↓(TFMは事前処理(1pass目)なので2pass目では実質バイパス)
TFM(mode=1,order=-1,PP=1,slow=2,input=TFMout,batch=true)
TDecimate(mode=1,tfmIn=TFMout,input=TDout,batch=true)
FluxSmoothT(temporal_threshold=3)
Spline144Resize(resizex,resizey)
block=32
dfttest(ftype=0,f0beta=1,sigma=4,sbsize=block,sosize=block/2,smode=1,swin=0,tbsize=1,tmode=0,twin=7,dither=1,opt=0)
unsharpHQ(STR=1.0)

5 件のコメント:

  1. コードを弄られてるのはTFM、TIVTCなのですか?
    また公開されることはありますか?

    返信削除
  2. 最初TIVTC(TFM)のコードを弄っていたのですが、3~5%ぐらいしか変わらなかったような・・・
    結局、僕の使い方(1pass目でTFMを通す)ではボトルネックは別なことが判明し、dfttestのdither処理を弄ったら(?)20%ぐらい速くなりました。
    dfttestもdither=1の処理を弄っているだけなので、使ってなければ変わりません。
    TIVTCも、もっとちゃんと考えれば速くなるのでしょうが・・・

    ソースの公開は要望があれば・・・

    返信削除
  3. メジャーなTIVTC24P2関数だとどうなんでしょうか?
    私は3~5%でも早くなるならぜひ使いたいです。

    返信削除
  4. 3~5%といってもプラグイン単体の速度なので、全体でどうなるかは使い方次第だと思います。
    TIVTC24P2はあまりよく知りませんが、ググったところではEEDI2やTDeintを使っているようなので、そちらの方がボトルネックになっているのではないでしょうか?
    一度、VisualStudio(私的利用では無料です)などのプロファイラでどこがボトルネックになっているのかを確認すると良いと思います。

    GPLはバイナリを公開するといろいろ面倒(ソースの入手手段を用意しなければならない)なので、申し訳ないですがソースのみで。
    とは言ってもアセンブラをCに直しただけだったような・・・
    https://drive.google.com/open?id=0B0rhAUR48oeVUW5zblpYZUh2b1k

    返信削除
  5. ありがとうございます。
    プログラミングは全くダメなのでビルドだけしました。
    結果は0.250fpsほどの高速化となりました。
    とりあえずバグが出るまでこのまま使うことになりそうです。
    ありがとうございました。

    返信削除