#JuliaLang

v1.5.3 vs. v1.6.0-rc1

random counting

11 sec (v1.5.3)
↓
3 sec (v1.6.0-rc1)

😊😊😊😊😊

gist.github.com/genkuroki/33f6

#JuliaLang

3 sec (v1.6.0-rc1, single thread)
↓
0.9 sec (v1.6.0-rc1, ThreadPools.tmap)

ThreadPools.tmap example.ipynb
gist.github.com/genkuroki/2e8f

#Julia蚀語

forルヌプの凜数版返り倀のある凜数fをX成分ごずに䜜甚させた結果を埗るためにはmap(f,X)を䜿い、返り倀を䜿わずにXの各成分ごずにfを実行するにはforeach(f,X)を䜿う。

それぞれのスレッド䞊列版がThreadPools.{tmap, tforeach}。
github.com/tro3/ThreadPoo

#Julia蚀語

ThreadPools.{tmap, tforeach}だけではなく、ThreadPools.{qmap, qforeach, bmap, bforeach}に぀いおの解説を誰かしおくれないものだろうかず思う。

github.com/tro3/ThreadPoo

#Julia蚀語 互いに独立なモンテカルロシミュレヌションを倧量に䞊列で走らせたければ

using Base.Threads

@ threads for i in 1:niters
result[i] = monte_carlo_simulation()
end

実際には现かい泚意が必芁。

现かい泚意の具䜓䟋に぀いおは以䞋のリンク先を参照。

gist.github.com/genkuroki/3672

#Julia蚀語 繰り返しを分割しお、各々を別のスレッドで䞊列凊理したい堎合には、分割されたレンゞを Distributed.splitrange(start, stop, n) で䜜れるこずを知っおいるず䟿利です。

@ threads for ran in Distributed.splitrange(1, N, nthreads())
for i in ran

end
end
#Julia蚀語 䞊列化によっおすべおのコアが100%䜿われおいる様子を芋るのは結構気分がよいです。

䞊列化では無駄なメモリアロケヌションを防ぐこずも重芁性が増したす。

䜜業甚の配列の類も各スレッドごずに甚意する必芁がある。
#Julia蚀語 無駄な(重耇した)蚈算やメモリアロケヌションを無くしお、スレッド䞊列化した結果、7倍皋床速くなりたした。CPUは4コア。コア数がもっず倚ければより倧きな高速化が可胜なはず。

①最適化前 41.4秒
②最適化埌 5.8 秒

数秒ず数十秒では詊行錯誀のルヌプの回転の速さが党然違う。
詊行錯誀で数孊的に䜕が起こっおいるかを確認したい堎合には蚈算速床は非垞に重芁。速いは正矩

さらにコヌドを少し倉えおやり盎すこずも繰り返すので、コヌドを倉曎しおから実行するたでの時間(コンパむル時間など)は可胜ならばれロであっお欲しい。

このような点に぀いお珟時点ではJuliaが最匷
#Julia蚀語 マルチスレッドを䜿いたい堎合には、環境倉数 JULIA_NUM_THREADS を蚭定しおおくか(v1.4以䞋でもOk)、

julia -t auto

のようにオプションを぀けおjuliaを起動するようにしおおくこずを忘れずに(v1.5以䞊)

docs.julialang.org/en/v1/manual/m

#Julia蚀語 では、マルチスレッドの他に、耇数のjuliaのプロセスを走らせお分散凊理を行うこずもできたす。

マルチスレッドのお手軜マクロが Threads.@ threads

分散凊理のお手軜マクロが using Distributed の埌の @ distributed

分散凊理では procs, workers, addprocs, rmprocsも必芁。
#Julia蚀語

Threads.@ threads (マルチスレッド)
Distributed.@ distributed (マルチプロセスの分散凊理)

の違いに぀いおは、

スレッドずプロセスの違いに぀いお怜玢↓
google.com/search?q=%E3%8

#Julia蚀語 ThreadPools.tmapの解説

4sum(tmap(count_isindisk, splitint(N, Base.Threads.nthreads())))/N

でやっおいるこずは

①splitintでNをnthreads()個に分割
②その各々にtmapでcount_isindiskを適甚(䞊列化される)
③その和の4倍をNで割る

gist.github.com/genkuroki/2e8f

#Julia蚀語

正の敎数Nをn個の数に N = k_1 + 
 + k_n ず分割するのではなく、レンゞ 1:N をn個のレンゞに分割するには Distributed.splitrange を䜿える。

泚意その凜数の仕様は今埌倉わるかもしれない。(過去に倉わったこずがある。)
#Julia蚀語 以䞋のリンク先皋床のこずなら、Threads.@ threads マクロでも楜に可胜だが、ThreadPools.tmapを䜿っおシンプルに曞いおいる。
#Julia蚀語 やっおはいけないこず

f(k) = [
0.1
0.2
0.4
0.6
0.8
0.9
][k+1]

のような凜数f(k)をルヌプの内偎で䜿うず、無甚なメモリアロケヌションが膚倧に発生しおしたう。[] の配列の分のメモリ割圓がf(k)を呌ぶごずに発生する。

[ ] を ( ) に眮き換えれば倧䞈倫。
#Julia蚀語 䞊列化関連

䞊列化せずに曞いたコヌドを「小さなn」でテストした埌に、やっおいるこずがシンプルなら、ちょっずだけコヌドを远加しお䞊列化できるず結構矎味しいです。

#Julia蚀語 Arrayではなく、Tupleが䜿える堎合には、Tupleで枈たせた方が効率的に特になるこずが倚い。

しかし、Tupleには線圢代数の挔算が定矩されおいない。

Tupleを「線圢代数化」したものに

github.com/JuliaArrays/St

StaticArrays.jl

ずいう䟿利なパッケヌゞがある。

• • •

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

21 Feb
#超算数

「(算数は)定矩ずか論理じゃないので」のようなこずを、100幎以䞊の䌝統を持぀非垞識な算数教育の䌝統に沿っお蚀う人達は基本的に嘘぀き。

䟋えば、小2算数教科曞での長方圢ず正方圢の定矩は非垞に正確で小2の子にも「正方圢は長方圢の特別な堎合であるこず」が分かるようになっおいたす。 Image
#超算数 長方圢ず正方圢に぀いおは、すでに小2算数教科曞に正確な定矩が噛み砕かれた圢匏で茉っおいるのに、ちょヌ算数の䌝統に則っお算数の教え方を指南する人達が、小孊校の先生達をおかしな方向に誘導しおいる。

ちょヌ算数信者の発蚀は倧䜓においお党郚「嘘」だず思っおおく方がよいです。
#超算数 小2の子であっおも、正方圢を芋せお、すべおの角が盎角かどうかを聞いおみお、党郚盎角だず答えた盎埌に、教科曞にある長方圢の定矩を読たせお、その条件を満たしおいるこずを確認させるず、正方圢も長方圢の䞀皮であるこずをすぐに理解できたす。

教科曞に曞いおあるルヌルに埓うだけ。 Image
Read 13 tweets
21 Feb
その皋床のこずは #Julia蚀語 では実珟枈み(添付画像)。

64ビットのい぀もの浮動小数点数の芏栌だけに特化されたコヌドを曞くこずに投資し続けるこずが、長期的に適切なやり方だずは思えない、ずいう非垞に穏健で普通の話をしおいるのだず私は思いたした。 Image
#Julia蚀語 で sin(2πkx) を蚈算するコヌドを曞くずきには

sinpi(2k*x)

のように曞いた方が粟床的にも効率的にも埗です。䞉角凜数の匕数にπがかけられおいる堎合は倚いので、芚えおおく䟡倀がありたす。
sinpiの #Julia蚀語 での実装のコヌド(添付画像①)はすでに玹介枈み。

そのコヌドを芋れば分かるように、sinpi(1/2)やsinpi(1/6)などを特別扱いしお添付画像②のようになっおいるわけではないです。 ImageImage
Read 4 tweets
21 Feb
今たで数秒で蚈算できおいたのに、粟床を䞊げた途端に数十秒数分の蚈算時間が必芁になるのはかなり䞍快なので、①そういう犠牲を払う䟡倀がある問題を扱うこず、②粟床を䞊げたこずによる速床的劣化を最小化するこずの2぀が重芁。最適化をちょっずサボるだけで蚈算速床は容易に1〜2桁䞋がる。
#Julia蚀語 では、実行時に、必芁な粟床が䞎えられたずきに、その粟床で効率よく蚈算できるコヌドを自動的に生成しお、即時ネむティブコヌドにコンパむルしお実行する、ずいうようなこずができたす。

Juliaのような環境では、各粟床ごずに最適化をダむナミックに行えるずいう利点がありたす。
以䞋のSGJさんの講挔の最埌の方では、䞎えられた諞々の状況に合わせおFFT(高速フヌリ゚倉換)の効率的なコヌドが自動生成されるようにしおおけば、ハヌドりェアに䟝存しないゞェネリックで効率的なFFTのラむブラリを䜜れるずいう話をしおいたす(それがFFTW!)。続く

Read 10 tweets
20 Feb
#Julia蚀語 ほずんどマクロヌリン展開なのですが、DS1DS6の倀をじっず芋れば、高次の係数ほど倧きくずらしおあっお、ぎったりマクロヌリン展開にはなっおいないこずが分かりたす。

この埮劙な点も結構面癜いはず。

Juliaのリポゞトリぞのリンク↓
github.com/JuliaLang/juli
 Image
#Julia蚀語 返答や匕甚ツむヌトを芋るず、これをテむラヌ・マクロヌリン展開そのものだず誀解しおいる人が倚いな。

マクロヌリン展開ならDS1, DS2が

-1/6=-0.16666

1/120=0.0083333


ず6,3がずっず続くこずになるのですが、そうなっおいない。

マクロヌリン展開そのものだず粟床的に損。
#Julia蚀語 #数楜

浮動小数点数の mod 2π での剰䜙を求めるのは非垞に倧倉。

Juliaではそのためのコヌドが別ファむルになっおいお、非垞に耇雑。

rem_pio2_kernel(x::Union{Float32, Float64}) はxをπ/2で割った剰䜙ずxを2πで割った剰䜙がその䜕倍かを蚈算。

github.com/JuliaLang/juli
 Image
Read 27 tweets
19 Feb
#超算数

【超算数をむンストヌルされた人、なぜか再生産を行う傟向にある】

そうなる理由↓

日本で算数教育で飯を食っお行きたい堎合には、ちょヌ算数マスタヌになるず、就職先が増えたり、出䞖できる可胜性が増えたりする。

ちょヌ算数には100幎以䞊の䌝統に支えられた瀟䌚的基盀がありたす。
かけ算順序問題が新聞で話題にされおも、ダメヌゞも受けない理由は、瀟䌚的に硬い基盀を持っおいるから。

子䟛の保護者偎は自分ちの子が被害を受けずに通過すれば発蚀を続ける意欲は枛りたす。

ちょヌ算数マスタヌになるず算数教育界で出䞖しおより良い地䜍に転職できるかもしれない。

この察比。
䟋えば、算数の教科曞の著䜜者リストに茉っおいる人達がちょヌ算数に぀いおどのような考え方を持っおいるか、どこでその考えを身に぀けたのか、どのような経歎で算数の教科曞の著䜜者たで出䞖できたのか、などに぀いおは調べる䟡倀がありたす。

これ面倒な䜜業で結構倧倉。
Read 8 tweets
19 Feb
#Julia蚀語

github.com/johnmyleswhite


は叀過ぎるパッケヌゞであるこずがProject.tomlがないこずからわかりたす。

そしお、add ContinuedFractionsでむンストヌルされるパッケヌゞはさらに叀く、ContinuedFraction自䜓を持っおいたせん。

叀めのパッケヌゞが攟眮されおいるこずがあるので芁泚意。
#Julia蚀語 適圓なフォルダに

github.com/johnmyleswhite


をクロヌンしおおいお、そこにaddで远加されたContinuedFractionsのProject.tomlをコピヌしお、devで䜿えるようにすれば、ContinuedFractionを最初から含むそのパッケヌゞを䜿えるようになりたす。

たたにこういうこずがある。
#Julia蚀語 スクショ

~/.julia/dev/ContinuedFractions にリポゞトリのクロヌンを眮いおおいお、そこにProject.tomlを远加し、

pkg> dev ContinuedFractions

しおある。こうしおおけば、ContinuedFractions.jlパッケヌゞを䜿える↓
Read 4 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!