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/media/mrzEdDpXhSLCJYnATGM

#julialang #python #numpy #gcc #gpp #openmp

私のWindows環境での最高速をまとめておきます。円周率のモンテカルロの1億回ループにかかる時間です。

Python + numpy → 2.3秒台

mingw64 gcc + Mersenne Twister → 0.8秒台

mingw64 g++ + OpenMP (並列化) → 0.4秒台

Julia (非並列化) → 0.4秒台

Julia (並列化) → 0.12秒

#python #numpy

たぶん、Python + numpy のケースはもっと高速化できると思います。

私の現時点での知識と能力ではやり方が思い付かないのですが、原理的には Python の for ループを避けることと配列を避けることが同時にできれば確実に速くなるはず。

https://mathtod.online/@waidotto/409847

#julialang #gcc #dsfmt

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 をダウンロードして展開しておく必要があります。

https://mathtod.online/media/-8HAEg24dlSX9Fm7A6w