マルチコアCPUについて前に書いたのですが、
色々と使い込み始めたので体験をふまえて補足をしたいと思います。
現在の環境はホームページを参考にしてください。
クアッドコアというと大抵の人は適当に分散して処理を行い
4倍高速化されると思っているのである。
実際にはこんなことはなく、高クロックのCPUが早いことが多々ある。
これはスレッドという単位でしか処理分散できないことに大きな原因がある。
よく、エンコードならばクアッドコアと言われているが、これは本当か?
答えはYESでもあり、Noだ。
試しにx264というコーデックでMPEG2を圧縮してみた。
(x264というのはMPEG4 AVCといわれるH.264の動画を圧縮できるCODECです。)
解像度は720×480で時間は一時間番組ので実質45である。
x264で1スレッドのみに設定し、圧縮したところ約2時間で終わった
このときのCPU使用率は25~30%とほぼ一個のみのコアしか働いていないことがわかる
そこで、4スレッドにして実行したところ、約1時間という結果になった。
CPU使用率も45~50%程度でCPUがうまく活用されていないことがわかる。
この原因は、最近のCODECの複雑な処理にある。
MPEG2以降の圧縮は前のフレームの映像と次のフレームを比べて、書き換わった部分のみを圧縮し、データを削減している。
つまり、前のフレームの処理がある程度終了しなくては次のフレームは処理できない
フレーム単位でスレッドを作り、各CPUコアに割り当てると処理待ちが生まれてしまう
そのため、ある程度の予測でも動作させているが、互いの処理が関係しているので、高速化には限界がある。独立した処理を行った方が処理効率はよいのである。
しかも、予測で動くためx264ではマルチスレッド時の画質が落ちる問題がある。
クアッドコアで4倍の電力を使用して、2倍の速度ではあまり効率がいいとは言えない。
ただ、現実にクアッドコアの2倍のクロックで動くCPUがないので、エンコードは一番早いというだけで、実は効率が悪い。
x264に限って言えば、動き予測を6のMulti Hexagonで処理すると、CPU使用率が70以上になり、重い処理をやらせているのに、エンコード時間は1.5倍かそれ以下で行える。
ただ、単純に言えることはシングルスレッドのエンコードを4つ同時に走らせるのがもっともCPU効率がいいのである。
なにしろ、別の動画は、お互いに関係のない処理になるので、処理待ちが理論上なくなるのだ。
このようにクアッドコアは非常に扱いにくいことは確かで、これがなにも考えずに使用できるソフトを期待したいものだ
クアッドコアでエンコード(x264)
投稿日:
執筆者:はざーど