マルチコアによる性能向上についての考察。

マルチコアによる性能向上についての考察。

先日、Core i7 マシンを導入しました。今回購入したCore i7 860は4コア8スレッドで、いよいよマルチコアとかメニイコアとか言われる時代を実感させられる代物です。

さて、CPUのコアの数が2倍になっても必ずしも性能も2倍にはならないことはよく知られていますが、コアの数が増えれば増えるほど性能向上率が低くなると言われています。これについてはアムダールの法則というのがよく引用されていて、一般のPCにはデュアルコアがせいぜいで、これ以上コア数を増やしても性能向上は見込めないという人も少なくないようです。

アムダールの法則というのはPCの性能向上に関する法則で、特にマルチコアについての法則というわけではないのですが、マルチコアの部分に関して簡単に言ってしまえば、アプリケーションのうち、マルチスレッド化できない部分が全体の N%あったら、どんなに頑張っても性能は100/N倍にしかならないというものです。

法則とかNとか言うと難しく見えますが、実例で考えてみましょう。エンコードするアプリケーションで『ファイルの読み込み』と『ファイルの書き出し』がマルチスレッド化できない部分、『エンコード』がマルチスレッド化できる部分とします(実際はどうか知りませんが)。シングルコアでは『ファイルの読み込み』と『ファイルの書き出し』が10分、『エンコード』が90分かかっていたとします。すると、コアの数をどんどん増やせば『エンコード』の時間はどんどん短くなります。デュアルコアにすれば45分、クアッドコアなら22.5分、オクタコアなら11.25分・・・そして、一兆コアとかになればほとんど一瞬で終わってしまいます。

しかし、『ファイルの読み込み』と『ファイルの書き出し』は変わらず10分です。もともとの処理時間は100分で、どんなにコアの数を増やしても10分までしか短縮できないので、このアプリケーションは10倍までしか性能向上できないということになります。上のマルチスレッド化できない部分が『ファイルの読み込み』と『ファイルの書き出し』で、10分というのは全体の10%に相当するので、100/10=10倍ということになるわけです。

アプリケーションの性能向上率がわかれば、あとはコストとパフォーマンスのバランスを考えてコアの数の最適な値が決まるわけです。逆に言えば、アプリケーションの設計によって大きく左右されるとも言えます。では、現行のアプリケーション環境としてはCore i7の4コア8スレッドはどうなのでしょうか。

前置きが長くなってしまいましたが、簡単に言えばタスクマネージャーのCPU使用率が100%近くを達していれば、いっぱいコアがあって良かったなぁっていう話になります。

まず、とりあえず、8コアを無駄に使うアプリケーション(というほどの代物じゃないですが)を作ってみました。たしかに、CPU占有率が100%になっているのでアプリケーション次第では有効に活用できることがわかります。

イメージ

続いてエンコードを見てみましょう。動画のエンコードは現在のPCで行う作業の中でもとりわけ重く、PCの性能向上が望まれる分野です。

今回は信頼と実績のTMPGEnc(体験版)でエンコードしてみたところ、だいたい70%~80%の間を推移していました。単純に考えれば6コア分くらいは活用しているようなのでCore i5じゃなくて良かったと言えるわけですw。

イメージ

ちなみに、ハイパースレッディングはCPUの余っている演算器を活用する技術なので通常のマルチコアよりもマルチスレッド化の条件が厳しくなります。ですから生粋の8コアだったら同じTMPGEncでも性能が向上する可能性は高いと考えられます。

さて、動画エンコードのように一つの作業をマルチスレッド化できる処理の他にも、複数のシングルスレッドの処理を並列して行うこともできます。たとえば、画像の100枚の画像をそれぞれ640×480にリサイズするというような場合です。仮に1枚の画像をリサイズする処理がマルチスレッド化できなくても、同時に複数枚の画像を処理することができるので全体として性能向上が見込めます。

今回はVisual Studio(プログラミングに使うソフト)でビルドを並列処理してみました。Visual StudioではVisual Studio 2005からビルドを並列に行うことができるようになっています。(当時としてはマルチコア化は時代を先取りしていた思います)

イメージ

こちらは90%以上とかなり活用できている様子です。ただ、ビルドする対象が最低でも8個以上ないといけないので、規模の大きめなアプリケーションを開発していないと、その性能を生かすことができないと言えます。

イメージ

ここに挙げた例では、ちゃんと4コア以上でもしっかり性能を生かしているという結果になっています。エンコード作業はある意味CPUよりも遙かにマルチコアなGPUによる処理なども考えられるのでCPUのマルチコア化が必ずしも将来にわたって生かせるとは言えないかもしれませんが、複数のシングルスレッドの処理を同時に行うことに関する性能向上は、Windows Vistaの登場した際に話題になったバックグラウンドサービスによる性能の低下が少なくできるというメリットがあります。

マルチコア化が進めば、近い将来ユーザーが明示的にやらなくてもバックグラウンドでうまいことやっておいてくれるようなサービスが活用されるような時代になるのかもしれません。そのためにはメモリやHDDもそれに見合った性能向上が必要になるのですが。