#Julia言語 で @ distributed を使ってモンテカルロシミュレーションの足し上げを行うときに、forループの内側で rand() を使うと遅くなります。固定された rng について rand(rng) の形式で実行する必要がある。

解決策:@ my_distributed マクロを自作して使う!

gist.github.com/genkuroki/a6dc…
#Julia言語 例の e のモンテカルロ計算については

gist.github.com/genkuroki/5212…

を参照。色々試してみたが、私の環境では @ my_distributed 版がシンプルでかつ一番速かったです。
#Julia言語

@ my_threads - threads version of @ my_distributed

gist.github.com/genkuroki/1efd…
#Julia言語 @ my_threads マクロの仕様を変更した。

複数のスレッドの分けて実行するforループの前だけではなく、後に実行するコードも指定できるようにしておかないと困るという当たり前のことに気付いた。

gist.github.com/genkuroki/1efd…

添付画像の左右のコードは実質的に等価だと考えてよい。
#Julia言語 これらのマクロ達(@ my_threads, @ my_distributed)はものすごく頻繁に使いそうになるように思えたので、野良パッケージ化しました。

github.com/genkuroki/MyUt…

この野良パッケージは今度私の落書き帳のようになる可能性があります。
#Julia言語 例の e のモンテカルロ計算の @ threads を使ったコードが不適切だった。添付画像は訂正後の結果。

もとの話題ではJuliaで28秒かかったと書いていたが、普通に書けば私の環境だと1.4〜1.5秒程度でその20倍くらい速いし、並列化・分散化すると、0.27~0.29秒!

gist.github.com/genkuroki/5212…
#Julia言語 同名が存在する野良パッケージ

github.com/genkuroki/MyUt…
MyUtils.jl

を使った「e のモンテカルロ計算の並列化・分散化の例」

gist.github.com/genkuroki/fa10…

この例を知っているだけで、並列化・分散化を気軽に楽しめる人が増えると思う。
#Julia言語 準備。パソコンのCPUに合わせて環境変数を

JULIA_NUM_THREADS=8

などに設定または julia -t auto でjuliaを起動。

マンデルブロ集合の計算の並列化の例。
この場合はめちゃくちゃ簡単!
添付画像を参照。
本質的に @ threads を追加するだけ。

gist.github.com/genkuroki/4c0f…
#Julia言語

for i in 1:m
a[i] = f(i) # iについて互いに独立にf(i)の値が決まる
end



Threads.@ threads for i in 1:m
a[i] = f(i)
end

とするだけでスレッド並列化できます。

このパターンで済む場合は結構ある。
#Julia言語

c = 0
for i in 1:m
c += f(i)
end
c

のスレッド並列化は

using MyUtils # 上記の野良パッケージ

a = Atomic{Int}(0)
MyUtils.@ my_threads begin
c = 0
end for i in 1:N
c += f(i)
end begin
atomic_add!(a, c)
end
a[]

とします。

例↓
github.com/genkuroki/MyUt…
#Julia言語 最近のパソコンのCPUを使い切るためには並列化が必須。

Juliaなら、以上で説明したような場合には、ものすごく気楽に並列化できます。このことに気付くと、それまで並列化せずに長時間計算させていたことに後悔するようになる。

CPUを100%使い切るのは結構楽しいです。

• • •

Missing some Tweet in this thread? You can try to force a refresh
 

Keep Current with 黒木玄 Gen Kuroki

黒木玄 Gen Kuroki Profile picture

Stay in touch and get notified when new unrolls are available from this author!

Read all threads

This Thread may be Removed Anytime!

PDF

Twitter may remove this content at anytime! Save it as PDF for later use!

Try unrolling a thread yourself!

how to unroll video
  1. Follow @ThreadReaderApp to mention us!

  2. From a Twitter thread mention us with a keyword "unroll"
@threadreaderapp unroll

Practice here first or read more on our help page!

More from @genkuroki

12 Mar
Soraさんの意見にはいつも賛成です。

ただし、「立式」という用語は一般的な用語ではなく、算数教育では「場面や考え方を忠実に式に翻訳すること」という意味で使われており、たし算やかけ算の悪しき順序指導の根拠としても使われる言葉です。意味を代わりに簡単に説明させて下さい。 #超算数
#超算数 順序固定強制指導を氷山の一角とする算数教育界の事情を何も知らないと、「立式」という普通の国語辞典に載っていない特殊な用語の意味を、「問題文をよんで、問題を解くために役に立ちそうな式を書くこと」のような無害な意味で解釈しがち。

実際にはもっと極端な意味で使われています。
#超算数 例:「4人に3本ずつ鉛筆を配るとき、全部で何本の鉛筆が配られますか?」に「式 4×3=12 答え 12本」と答えることを、「答えは正しいが立式は間違っている」とするのが、かけ算順序固定強制指導の典型例です。

4×3が誤りになるという意味を「立式」という特殊な用語は含んでいます!😱
Read 6 tweets
10 Mar
#物理 #数楽 #Julia言語

バネで繋がった2つの質点の片方が自由な質点に弾性衝突する様子を数値計算で動画にしてみました。

衝突時に運動エネルギーがバネの振動エネルギーに移行し、非弾性衝突のようになります。

ソースコード↓
nbviewer.jupyter.org/gist/genkuroki…
ううむ、上下にマージンを入れた方が良かったな。
#Julia言語 動画を全部作り直した。

ソースコード↓
nbviewer.jupyter.org/gist/genkuroki…

丸の直径は質量の3乗根に比例しています。

添付動画では、左側から質量は 1, 1, 2 です。

真ん中の質点と右側の質点は弾性衝突しているのですが、バネにエネルギーが移動して、非弾性衝突っぽくなっています。
Read 22 tweets
10 Mar
個人的には、初学者に易しい(初学者に対してその段階では無用な厳密さの要求をする輩側には厳しくする)だけではなく、単なる半可通にも優しくてよいと思います。

しかし、半可通であるがゆえに正しい考え方をすることへの要求に対して反感をあらわにして暴れる輩には厳しく接してよいと思う。
数学において「間違ってもよい!」と強調し続けることは教育上必須だと思う。

さらに、ある程度以上の高度な数学については「理解できなくてもよい!」と強調せざるを得ない場合が多い(笑)。

しかし、「正しい考え方をしなければいけない」という要求に反感を露わにするのはアウト。
「どのようにしてより正しい考え方に近付いて行くか?」について、みんなでよく考えて行くことが大事。
Read 7 tweets
10 Mar
#統計 「尤度」は「ゆうど」と読み、英語の専門用語likelihood(日常用語としての意味は「もっともらしさ」)の訳語なのですが、尤度はもっともらしさではないので要注意。

「尤度」という用語を見たら、「モデルのデータへの適合度(の指標)」と読み換えると分かり易いと思います。
#統計 モデルが学習や推定のために使ったデータにぴったりフィットしているのに、そのデータ外のデータに全然フィットせず、全然もっともらしくない結果になってしまうことを、過学習、過剰適応、オーバーフィッティングなどと呼んだりします。

モデルのデータへの適合度はもっともらしさとは違う。
#統計 専門用語を日常用語の意味で解釈することは、通常「やっちゃいけないこと」になっているのに、「尤度はもっともらしさを意味する」のように解説している場合が多くてひどすぎ。

* 尤度はもっともらしさではない。

* 尤度はモデルのデータへの適合度の指標に過ぎない。
Read 7 tweets
9 Mar
#Julia言語 以下のリンク先で Julia カーネルの Jupyter notebook で音を鳴らす方法の例を示しておきました。

以下のリンク先の添付画像の部分では 880Hz と 1320Hz の正弦波の和が再生されるはずです。

nbviewer.jupyter.org/gist/genkuroki…
#Jupyter notebook で nbextensions の Gist-it を使えるようにすると、任意のカーネルで作った Jupyter notebook をワンボタンで GitHub Gist に投稿できるようにできます。

数式やコードを含む文章による解説
実際に動かすコード
計算結果
グラフ
動画


をまとめたものがワンボタンで公開可能!
こういう目的には #Jupyter notebook が現時点において最適なツールになっていると思います。 #Jupyter notebook は多くのプログラミング言語に対応しており、ユーザー側の自由度が大きいです。

解説↓

nbviewer.jupyter.org/github/genkuro…

nbviewer.jupyter.org/github/genkuro…
Read 4 tweets
8 Mar
数学市民さんという人がひどいことを言いまくっていた。

どういう人なのか知らないし、私のTLには登場しないし、検索しても発言が見当たらないと思ったら、なぜかミュートしていたようです。

色々謎が解決。

ビジネス数学にまつわる継続論争 - Togetter togetter.com/li/1679140 @togetter_jpより
私のTL以外の空間で、そのひどい発言がまともだと思った人達が出て来たりしていて、それを気にする発言が出ていたんですね。

私のところにはその気にする発言しか流れて来ず、一体何が起こっているのだろうかと思っていました。

ツイッターでの話題にリアルタイムでついて行くのは私には難しい。
ミュートはそのままにしておくことにした。😊
Read 6 tweets

Did Thread Reader help you today?

Support us! We are indie developers!


This site is made by just two indie developers on a laptop doing marketing, support and development! Read more about the story.

Become a Premium Member ($3/month or $30/year) and get exclusive features!

Become Premium

Too expensive? Make a small donation by buying us coffee ($5) or help with server cost ($10)

Donate via Paypal Become our Patreon

Thank you for your support!

Follow Us on Twitter!