マルチコアの恩恵

iPodPSP用の動画変換とか良くやるわけですが、前のCPU(Athlon64 3700+だとイマイチだったので今回Core2Quad(Q9550)にしてみたわけで。
しかし、意外とQuadに対応したアプリがあまり無いのが現状。WMEncorderやTMPGEncくらい?
複数起動という技もあるんですが、一杯やるならともかく単一ファイルでは効果ないですし。
とりあえず携帯動画変換君の複数起動方法とかwebで調べてたら、
なんか携帯動画変換君のエンジンであるffmpegがマルチスレッド化できるらしい!?
これは去年くらいから知られてたことらしいけど、個人的にかなり初耳。



こんな具合で、default_settingフォルダ内の設定ファイル内でffmpegのあとに、
-threads n *1
を追加して、保存。setup.exeで新しい設定ファイル読み直すだけ。


200MBほどのXvid, 23.976 fpsの動画を変換するのにかかった時間は、

n=1 6:45
n=2 3:59
n=4 2:45

(min:sec)
CPU Core2Quad Q9550@3.6GHz
Codec:H264.
変換プロセス優先度:2

という結果に。
予想してなかったけど、こんなに速いとは。
タスクマネージャー見ても、4に設定した時は、確かに4コアとも70%以上負荷かかっててる感じ。
4スレ化で4倍とはいかないけど大体170%くらい高速化されているみたい。
もうちょい上がるとうれしいけど、とりあえず倍近く速くなるので満足です。
試しにn=8とか設定してみたけどあまり効果無し。
コア数くらいがちょうどいいのかもね。


それよりか、優先度を3のリアルタイムにすると、あと5%ほど向上。
でも、どうやっても全コア100%ロードにはならんね。
ここでさらに複数起動とかすればいいのかな。


ちなみに、ffmpegのマルチスレッド化が可能なコーディックはH264くらいなので、より軽快なXvidとかはダメっぽい。DivXとかはしらん・・・。
まあ、no optionのXvidの方がマルチスレッドのH264よりか速いかもしれませんが、H264の画質とサイズはなかなか捨てがたいので。
あと、PSPは確か?H264しかダメだった気がするので、この場合は問題なし。

*1:ここでnはスレッド数。Core2Duoなら2, Quadなら4くらいが妥当