今回組み立てたPCのCPUはDualCoreです。
OSは懐かしいWindows2000Professionalで2CPUまで対応しています。
Athlon 64×2では、タスクマネージャのCPU使用率のグラフが2つ表示されて2CPUとして認識されていることがわかります。
2CPUは本当に速いのかということを検証してみます。
複数のCPUを使用して処理が早くなる場合を考えます。 一番単純なのがCPUの数だけプログラムを起動すれば各CPUにそれぞれのプログラムが割り当てられて一つのCPUで処理するより速くなるはずです。 同様に一つのプロセスを速くするにはCPUの数だけスレッドを起動すれば良いはずです。
そこで簡単なプログラムを書いてみました。 乱数を指定した回数生成するスレッドを指定した数だけ起動します。
全回数(1スレッド毎の回数) | スレッド数 | 実行時間(秒) |
---|---|---|
2000000(2000000) | 1 | 16.0 |
2000000(1000000) | 2 | 8.0 |
2000000(666666) | 3 | 8.6 |
2000000(5000000) | 4 | 8.5 |
2000000(2500000) | 8 | 8.9 |
2000000(1250000) | 16 | 8.8 |
1スレッドの場合は1CPUと同等と考えられます。 2スレッド以上の場合はそれぞれのCPUにスレッドが割り当てられて1スレッドの場合のほぼ半分の時間で処理が完了しているので有効にCPUが使用されていることがわかります。 今回は1スレッドの場合も他のプログラムと同様にメインプログラムからスレッドを生成しているため2CPUが半分の処理時間になっていますがメインプログラムにて処理を行えばスレッド生成のオーバーヘッドが無くなるので倍までは速くならないかもしれません。 また、CPUの数とスレッドの数が同じ場合の処理時間が一番短くなっておりCPUの数よりスレッドを増やした場合は若干処理時間がかかるようになります。 これは、スレッド処理生成やスレッド終了を待つ処理のオーバーヘッドが増えるためと思われます。 どちらにしても複数のプログラムまたはスレッドを使用すれば複数CPUが有効に利用されることがわかりました。