読者です 読者をやめる 読者になる 読者になる

モンテカルロ法で円周率の(並行)計算

先日Matlabで書いたものと同じアルゴリズムを、Juliaで並行計算できるようにしました。

tic()

N = 1000000;
K = 1000;
est_pi_total = @parallel (+) for k=1:K
  x = rand(N);
  y = rand(N);
  4*( sum(x.*x + y.*y < 1) / N)
end
printf("K=%d N=%d ==> pi=%f\n", K, N, est_pi_total / K);

toc()

MacBook Pro 13 (Mid 2009)はコア数が2個なので、使用コアが1つの時と2つの時で比較してみました。まずは標準の1コア版。

$ julia
julia> load("montecarlo_pi.jl")
K=1000 N=1000000 ==> pi=3.141652
elapsed time: 54.607524156570435 seconds

そしてオプションで使用するコアを2に指定します。

$ julia -p 2
julia> load("montecarlo_pi.jl")
K=1000 N=1000000 ==> pi=3.141499
elapsed time: 43.42981815338135 seconds

若干、速くなったかな。