https://mathtod.online/@tetu/409449
おお!tetuさん、素晴らしいです!
私の手元の環境(MSYS2 mingw64 g++)で同じコードを実行したら、pragma がばっちり効いて高速化されました。
pragma無しだと
time ./find_g++ で2.6秒台。
しかし、pragma有りで並列処理では
time ./findpi_g++pragma で0.4秒台。
これはJuliaの並列処理を使わない場合の速さと同じです。(並列処理を使うと0.12~0.14秒になる。)
Julia はどうしてこんなに速いのでしょうかね?
https://mathtod.online/@waidotto/409847
y.さんのおかげで、gccでJuliaと同じ速さ、円周率モンテカルロをできるようになりました!
gcc で並列化を使わずに0.4秒台が出ました!
私が追試するときに使ったコードとコンパイルの仕方(Makefile)は次の場所にあります。
https://gist.github.com/genkuroki/67a5ab63a44ad88446f31db499f08d1c
findpi_dSFMT.c のコンパイルのためには
http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/SFMT/index-jp.html
から dSFMT-src-2.2.3 をダウンロードして展開しておく必要があります。
#gpp #openmp
あと g++ の場合ですが、OpenMP のプラグマが効けば速くなり、0.4秒台が出ます。
しかし、プラグマをコメントアウトすると、2.6秒まで遅くなってしまうんですね。
これだとg++を使っているのに、Python + numpy よりも遅いです。
おそらく、こちらももっと高速化できるのだと思います。