run: Montecarlo PI : 3.144016 Montecarlo PI : 3.143836 Montecarlo PI : 3.140812 Montecarlo PI : 3.142616 Montecarlo PI : 3.141592 Montecarlo PI : 3.139224 Montecarlo PI : 3.143332 Montecarlo PI : 3.140608 Montecarlo PI : 3.141352 Montecarlo PI : 3.139116 Montecarlo PI : 3.140224 Montecarlo PI : 3.141696 Montecarlo PI : 3.144996 Montecarlo PI : 3.142304 Montecarlo PI : 3.14044 Montecarlo PI : 3.14482 Mathクラスによる円周率は 3.141592653589793 モンテカルロ法による円周率は 3.141936500000001 Time : 1516ミリ秒 構築成功 (合計時間: 1 秒)
run: Montecarlo PI : 3.143472 Montecarlo PI : 3.141672 Montecarlo PI : 3.1408 Montecarlo PI : 3.140352 Montecarlo PI : 3.141668 Montecarlo PI : 3.13966 Montecarlo PI : 3.139112 Montecarlo PI : 3.142532 Montecarlo PI : 3.13982 Montecarlo PI : 3.143956 Montecarlo PI : 3.141428 Montecarlo PI : 3.138096 Montecarlo PI : 3.141932 Montecarlo PI : 3.143548 Montecarlo PI : 3.14172 Montecarlo PI : 3.141612 Mathクラスによる円周率は 3.141592653589793 モンテカルロ法による円周率は 3.14133625 Time : 22172ミリ秒 構築成功 (合計時間: 22 秒)
(゜◇゜)ガーン
な、なんと 遙かに遅い!
ExecutorService でスレッドプール作って処理させるほうがコストが高くつく!
この程度の計算ならシングルスレッドでもいいみたい。
そこで時間のかかる処理を無意味に追加した場合どうなるか確認した。
次のコードをそれぞれのプログラムに追加した。
for (int k = 0; k < 10_000; ++k) { for (int n = 0; n < 10_000; ++n) { double p = k * n; p = Math.sqrt(p); } }
その結果は次のようになった。
二重ループのプログラムでは
run: Montecarlo PI : 3.138036 Montecarlo PI : 3.144924 Montecarlo PI : 3.139508 Montecarlo PI : 3.14336 Montecarlo PI : 3.140848 Montecarlo PI : 3.14178 Montecarlo PI : 3.141744 Montecarlo PI : 3.143868 Montecarlo PI : 3.14006 Montecarlo PI : 3.143568 Montecarlo PI : 3.137936 Montecarlo PI : 3.141968 Montecarlo PI : 3.143396 Montecarlo PI : 3.142736 Montecarlo PI : 3.137876 Montecarlo PI : 3.141624 Mathクラスによる円周率は 3.141592653589793 モンテカルロ法による円周率は 3.141452 Time : 250579ミリ秒 構築成功 (合計時間: 4 分 10 秒)
時間が結構かかってますね!
平行処理プログラムでは次のようになりました。
run: Montecarlo PI : 3.142172 Montecarlo PI : 3.140212 Montecarlo PI : 3.142544 Montecarlo PI : 3.14186 Montecarlo PI : 3.14264 Montecarlo PI : 3.143252 Montecarlo PI : 3.140788 Montecarlo PI : 3.140544 Montecarlo PI : 3.14346 Montecarlo PI : 3.144144 Montecarlo PI : 3.141128 Montecarlo PI : 3.140564 Montecarlo PI : 3.140828 Montecarlo PI : 3.13794 Montecarlo PI : 3.140336 Montecarlo PI : 3.141248 Mathクラスによる円周率は 3.141592653589793 モンテカルロ法による円周率は 3.1414787499999997 Time : 32468ミリ秒 構築成功 (合計時間: 32 秒)
run: Montecarlo PI : 3.14146332 Montecarlo PI : 3.1416326 Montecarlo PI : 3.1415482 Montecarlo PI : 3.141632 Montecarlo PI : 3.14127944 Montecarlo PI : 3.14178148 Montecarlo PI : 3.1416116 Montecarlo PI : 3.14141588 Montecarlo PI : 3.1416632 Montecarlo PI : 3.14117084 Montecarlo PI : 3.14161116 Montecarlo PI : 3.14168484 Montecarlo PI : 3.14166664 Montecarlo PI : 3.14151984 Montecarlo PI : 3.14131844 Montecarlo PI : 3.14161456 Montecarlo PI : 3.14160796 Montecarlo PI : 3.14157636 Montecarlo PI : 3.14174076 Montecarlo PI : 3.14137984 Montecarlo PI : 3.14161576 Montecarlo PI : 3.14160444 Montecarlo PI : 3.14165568 Montecarlo PI : 3.14140136 Montecarlo PI : 3.1414314 Montecarlo PI : 3.14134932 Montecarlo PI : 3.14164312 Montecarlo PI : 3.14159468 Montecarlo PI : 3.141492 Montecarlo PI : 3.14139636 Montecarlo PI : 3.14149788 Montecarlo PI : 3.1414862 Mathクラスによる円周率は 3.141592653589793 モンテカルロ法による円周率は 3.14153397375 構築成功 (合計時間: 22 分 47 秒)
時間に余裕のあるときに計算処理回数を増やしてみて結果を確認したいと思います。
ちなみにこの計算は Intel Core i7-2600K (3.4GHz) の CPU を積んだハードウェアでしました。