OpenMPでの最適なスレッド数 (2)

CPU4コアマシンがきたので。

環境

CPU
Intel Core 2 Quad Q9550 @2.8GHz
RAM
1GB x 4

結果

// シングル/マルチ[スレッド数]: 完了時間ms: (素数数 @並列化がバグっていると変な値になる)
S   : 5078 (6541)
S   : 5079 (6541)
S   : 5093 (6541)
S   : 5078 (6541)
S   : 5079 (6541)
M2  : 3812 (6541)
M2  : 3813 (6541)
M2  : 3812 (6541)
M2  : 3813 (6541)
M2  : 3812 (6541)
M4  : 2219 (6541)
M4  : 2234 (6541)
M4  : 2219 (6541)
M4  : 2219 (6541)
M4  : 2234 (6541)
M8  : 1563 (6541)
M8  : 1578 (6541)
M8  : 1593 (6541)
M8  : 1610 (6541)
M8  : 1594 (6541)
M16 : 1312 (6541)
M16 : 1328 (6541)
M16 : 1375 (6541)
M16 : 1328 (6541)
M16 : 1344 (6541)
M32 : 1313 (6541)
M32 : 1296 (6541)
M32 : 1282 (6541)
M32 : 1312 (6541)
M32 : 1297 (6541)
M64 : 1281 (6541)
M64 : 1282 (6541)
M64 : 1281 (6541)
M64 : 1281 (6541)
M64 : 1281 (6541)

やっぱり多いほうが速い。Intelが書いたという噂のOpenCVのコードを見ていたら、OpenMPの処理でスレッド数=コア数にされていた。普通に考えるとそうなんだけど、この結果を見ると多くしてしまう。並列処理用のスレッド数=使用可能なプロセッサ数×8 にするようにした。