上のタスクマネージャのSSは「①シングルスレッドモデル(上)」「②UIスレッド1+ワーカースレッド8(下)」のモデルを、Intel Core 2 Quad QX6700で動作させた同じデータの処理状況です。
①のシングルスレッドモデルでは、グラフにばらつきがでていますが、それはシングルスレッドモデルなため、バックグラウンド処理などの他の処理が働いているなどでしょうね。OS自身もマルチスレッドモデルが採用されてますし、ある程度分散して処理している様子が、計算中のスレッド以外の波としてでているようです。
②こちらは、みてのとおり、ワーカースレッド8が別に動作しているためか、計算中しっかり4コアが連動してCPU使用率があがっているのが見て取れるでしょう。もちろん、CPU使用率からみてみると、おおざっぱではありますが、①のモデルに比べて半分以下の単位時間で計算がすんでいます。
一定以上スレッドを分けても、CPUの処理能力に限界がありますから、どこまでスレッドを分散するのがよいのか。自動的に生成するスレッド数をCPUのコア数に関連付けるとかすればいいのかな~とかおもいつつ・・・・
とりあえず、PS3FreePops34 のマルチスレッド8モデルでのシュミレーションでは、クアドコアCPUを使用した場合、シングルスレッド版の半分以下の単位時間で処理がおわるという実験結果がでました。
さてさて、ほかのスレッド生成数にすると、どうなるかなぁw