Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Julia 開発の道具箱(チューニング編)
Search
Yuichi Motoyama
September 27, 2014
Programming
1.4k
3
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Julia 開発の道具箱(チューニング編)
Yuichi Motoyama
September 27, 2014
Other Decks in Programming
See All in Programming
夏だ!祭りだ!祭りとはドメインモデリングでは?
ryugen04
0
230
AI Engineeringは、AIプロダクトだけのものか? 〜AIがソフトウェアを作る時代の新しい当たり前〜 / No AI in your product. AI Engineering in your development.
rkaga
4
400
Apache Hive: そしてCloud Native Lakehouseへ
okumin
1
220
自動化したのに回らない テスト運用の壁―AI時代の品質責任と生産性
mfunaki
0
140
php-fpmのプロセスが枯渇した日-調査・対処・そして本当にやるべきだったこと-
shibuchaaaan
0
270
komatsuna「分散システムにおけるバグ分析手法」
komatsunaqa
0
250
わからない話を追いかけたら、プログラミング言語を作る側にいた
ydah
3
490
Jindong: Introducing Declarative Haptics in Compose Multiplatform
l2hyunwoo
0
110
仕様書を書く前にハーネスを作る - Agent Native開発は「探索を速く、判定を固く」
gotalab555
4
1.6k
Cloudflare is Agents
chimame
0
160
人間の目はかわらない、だからJPEGは30年もつ
yuzneri
12
18k
そこに3びきプロダクトがいるじゃろう——生成AI時代における“価値が届かない理由”の構造
kosuket
0
470
Featured
See All Featured
Designing Dashboards & Data Visualisations in Web Apps
destraynor
232
55k
SERP Conf. Vienna - Web Accessibility: Optimizing for Inclusivity and SEO
sarafernandez
2
1.5k
Groundhog Day: Seeking Process in Gaming for Health
codingconduct
0
270
Why Mistakes Are the Best Teachers: Turning Failure into a Pathway for Growth
auna
0
200
Lightning talk: Run Django tests with GitHub Actions
sabderemane
0
230
Music & Morning Musume
bryan
47
7.3k
Agile Leadership in an Agile Organization
kimpetersen
PRO
0
200
Breaking role norms: Why Content Design is so much more than writing copy - Taylor Woolridge
uxyall
0
370
Stop Working from a Prison Cell
hatefulcrawdad
274
21k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.7k
The Limits of Empathy - UXLibs8
cassininazir
1
600
Navigating Weather and Climate Data
rabernat
0
470
Transcript
Julia ։ൃͷಓ۩ശʢνϡʔχϯάฤʣ Yuichi Motoyama (yomichi) Institute for Solid State Physics,
Univ. of Tokyo JuliaTokyo #2 2014/09/27 εϥΠυͱαϯϓϧίʔυ https://github.com/yomichi/JuliaTokyo2 1 / 33
ࣗݾհ HN : ಓ, yomichi twitter : @yomichi_137 Ά͢Ͳ͍ͪ͘ͶΜ͍ͤ ౷ܭཧֶɾܭࢉཧֶ
ओʹϞϯςΧϧϩ๏ͱ͔ہࡏεϐϯܥͱ͔ Πϕϯτʢษڧձʣ࣮گ ࠷ۙͩͱશή࿈ʢಉਓήʔϜ։ൃʣͱ͔ɺ PyConJP ͱ͔ɺJuliaTokyo ͱ͔ ࣗͰࣗͷൃද࣮گͰ͖ͳ͍ͷ͕ͭΒ͍ Julia nightly build Julia ͷ։ൃڥ REPL ͱ Vim ڈͷՆίϛɾౙίϛͰ Julia ຊग़ͯ͠·ͨ͠ blog ͱ͔కΊΓ͕ͳ͍ͷͰॻ͚·ͤΜʼʻ நબड͔͍ͬͯͨΒ࣍ͷౙʹग़͠·͢ (thanks @am_11) 2 / 33
ࠓͷ͓ Julia ݴޠͰॻ͍ͨεΫϦϓτͷվળɺͭ·Γ σόοά ϦϑΝΫλϦϯά νϡʔχϯά Λ͢ΔͷʹศརͳπʔϧΛհʂʂ ͱ͍͏༧ఆͰ͕ͨ͠ɺخ͍͠ࣄʹࢥͬͨΑΓ͢͜ͱ͕͋ͬͯ࣌ؒ ͕ͳͦ͞͏ͳؾ͕͢ΔͷͰɺલ 2
ͭܰΊʹͯ͠ɺࠓओʹ νϡʔχϯάͷΛ͠·͢ʼʻ 3 / 33
ࠓͷ͓ Julia ݴޠͰॻ͍ͨεΫϦϓτͷվળɺͭ·Γ σόοά ϦϑΝΫλϦϯά νϡʔχϯά Λ͢ΔͷʹศརͳπʔϧΛհʂʂ ͱ͍͏༧ఆͰ͕ͨ͠ɺخ͍͠ࣄʹࢥͬͨΑΓ͢͜ͱ͕͋ͬͯ࣌ؒ ͕ͳͦ͞͏ͳؾ͕͢ΔͷͰɺલ 2
ͭܰΊʹͯ͠ɺࠓओʹ νϡʔχϯάͷΛ͠·͢ʼʻ 3 / 33
σόοάπʔϧ 4 / 33
σόοά༻πʔϧ Base.@show printf σόοά༻ϚΫϩ ࣜͦͷͷͱɺͦͷΛදࣔͰ͖Δ ෳҾɺλϓϧͱ͍͏༗ޮͳࣜͳͷͰͳ͘දࣔͰ͖Δ ඞཁλΠϓগͳ͍͠ɺ΄΅σόοάઐ༻ͳͷͰ grep ָ ਆϚΫϩͷͻͱͭ
1 julia > x = 42; 2 julia > @show x; 3 x = 42 4 julia > @show x,2x; 5 (x,2x) = (42 ,84) 5 / 33
σόοά༻πʔϧ Base.@assert ͨࣜ͠ͷِ͕ͳΒࣜΛදࣔͯ͠ڧ੍ऴྃ Ӵతϓϩάϥϛϯά༻ 1 julia > @assert x ==
42 2 julia > @assert x != 42 3 ERROR: assertion failed: x != 42 4 in error at error.jl:21 ϑϥά 1 ͭͰ@assert Λશ෦ແޮԽ͢Δɺͱ͍ͬͨػೳ࣮ ͳ͍ ͜ͳ͍ͩ issue ͕Ͱ͖ͨ͠ 1ɺ͍͔ͭͰ͖ΔΜ͡Όͳ͍Ͱ͠ΐ ͏͔ Base.@assert Λॻ͖͑Δ͜ͱͰΉΓΓແޮԽͰ͖Δ 1 julia > import Base.@assert 2 julia > macro assert(ex) 3 :nothing 4 end 1#7732 6 / 33
σόοά༻πʔϧ Debug.jl ରܕσόοΨ εςοϓ࣮ߦมࢀরͳͲͦΕͳΓʹग़དྷΔ σόοά͍ͨ͠ϒϩοΫʹ༧Ί@debug Λ͚͓ͭͯ͘ ϒϨʔΫϙΠϯτΛ༧Ί͚͍ͨ߹@bp Λ͚͓ͭͯ͘ gdb ؚΊ͋Μ·Γ͍ͬͯͳ͍ͷͰͳΜͱʜʜ
Logging.jl ϩάه༻πʔϧ ϩάใʹϨϕϧΛ༩͢Δ͜ͱ͕Ͱ͖Δ ࣮ߦϨϕϧΛม͑Δ͜ͱͰ͢ใΛऔࣺબͰ͖Δ SIUnits.jl ܕͷྗͰόάΛ͙͜ͱΛࢦ͢ύοέʔδͷͻͱͭ ͍ΘΏΔ࣍ݩղੳ ྫ࣭͑ྔͱ͞ɺී௨ͷϓϩάϥϛϯάͰͱʹී௨ͷ࣮ ͱͯ͠දݱ͞ΕΔ͕ɺຊ࣭తʹผ Ճݮڐ͞Εͳ͍͕আڐ͞Εɺ͞Βʹ৽ͨͳ୯ҐΛ࡞Δ ɾϝϞϦ্ͷΦʔόʔϔουແ͍ ࣮ࡍʹ͏ʹɺSI ୯ҐܥΛڧ੍͞ΕΔͷͰਖ਼ځ۶ʜʜ 7 / 33
ϦϑΝΫλϦϯάπʔϧ 8 / 33
ϦϑΝΫλϦϯά༻πʔϧ Lint.jl Julia ൛ lint ະ༻มͱ͔ if a = 0
ͱ͔ͦ͏͍͏ո͍͠ίʔυΛڭ͑ ͯ͘ΕΔ ݱࡏߋ৽͕͔ͳΓΜ 1 julia > using Lint 2 3 shell > cat ex_Lint.jl 4 let x = 42 5 end 6 7 julia > lintfile("ex_Lint.jl") 8 ex_Lint.jl [ ] 0 WARN Local vars declared but not used: x 9 / 33
ϦϑΝΫλϦϯά༻πʔϧ TypeCheck.jl ܕͷҰ؏ੑͳͲΛνΣοΫͰ͖Δ ίϯύΠϥ͕࠷దԽͯ͘͠ΕΔ͔Ͳ͏͔ʹޮ͍ͯ͘Δ checkreturntypes ؔͷฦΓͷܕ͕શ෦ಉ͔͡ checklooptypes ϧʔϓͷதͰมͷܕ͕ෆม͔ code typed
֤ม͕औΓ͏ΔܕΛซهͯؔ͠ͷఆٛΛ දࣔ 10 / 33
νϡʔχϯά 11 / 33
νϡʔχϯάʁͳʹͦΕ͓͍͍͠ͷʁ ϓϩάϥϜࣗମͷੑೳ࠷దԽ ͳʹΛ࠷దԽ͍ͨ͠ͷ͔ߟ͑ͯ͋Γ·͔͢ʁ େܭࢉ࣌ؒͷ࠷খԽ͔ɺཁٻϝϞϦͷ࠷খԽ ϦϑΝΫλϦϯάอकੑͷ࠷దԽͱݴ͑ͳ͘ͳ͍ ͦͦʢཁٻʣʹରͯ͠ਖ਼͍͑͠Λฦ͢ϓϩάϥϜ ॻ͚·͔ͨ͠ʁ ؒҧͬͨίʔυΛνϡʔχϯάͯ͠ਖ਼͘͠ͳΔ͜ͱ·ͣແ͍ ࠷దԽʹίετɾϦιʔε͕ඞཁ ͋ͳͨͷΓ͍ͨ͜ͱɺຊʹׂʹ߹͍·͔͢ʁ
Θ͟Θ͟େͳ࣌ؒΛඅ͠ɺอकੑΛԼ͛ͯ·ͰΔඞཁ ͋Γ·͔͢ʁ ଞʹΔ͜ͱͳ͍ͷͰ͔͢ʁ ͦͷ։ൃ࣌ؒΛͬͯ৽ػೳΛՃ͢Δ ͦͷ։ൃ࣌ؒΛܭࢉ࣌ؒͦͷͷʹॆͯΔ ͦͷ։ൃ࣌ؒͷɺૣ͘ؼͬͯ৸Δ ͜Ε͔ΒԿ͏ɺͱ͓͖ͬͯͷίʔυؤுͬͯຏ͘Ձ ͕͋Δ 12 / 33
νϡʔχϯάʁͳʹͦΕ͓͍͍͠ͷʁ ϓϩάϥϜࣗମͷੑೳ࠷దԽ ͳʹΛ࠷దԽ͍ͨ͠ͷ͔ߟ͑ͯ͋Γ·͔͢ʁ େܭࢉ࣌ؒͷ࠷খԽ͔ɺཁٻϝϞϦͷ࠷খԽ ϦϑΝΫλϦϯάอकੑͷ࠷దԽͱݴ͑ͳ͘ͳ͍ ͦͦʢཁٻʣʹରͯ͠ਖ਼͍͑͠Λฦ͢ϓϩάϥϜ ॻ͚·͔ͨ͠ʁ ؒҧͬͨίʔυΛνϡʔχϯάͯ͠ਖ਼͘͠ͳΔ͜ͱ·ͣແ͍ ࠷దԽʹίετɾϦιʔε͕ඞཁ ͋ͳͨͷΓ͍ͨ͜ͱɺຊʹׂʹ߹͍·͔͢ʁ
Θ͟Θ͟େͳ࣌ؒΛඅ͠ɺอकੑΛԼ͛ͯ·ͰΔඞཁ ͋Γ·͔͢ʁ ଞʹΔ͜ͱͳ͍ͷͰ͔͢ʁ ͦͷ։ൃ࣌ؒΛͬͯ৽ػೳΛՃ͢Δ ͦͷ։ൃ࣌ؒΛܭࢉ࣌ؒͦͷͷʹॆͯΔ ͦͷ։ൃ࣌ؒͷɺૣ͘ؼͬͯ৸Δ ͜Ε͔ΒԿ͏ɺͱ͓͖ͬͯͷίʔυؤுͬͯຏ͘Ձ ͕͋Δ 12 / 33
νϡʔχϯάʁͳʹͦΕ͓͍͍͠ͷʁ ϓϩάϥϜࣗମͷੑೳ࠷దԽ ͳʹΛ࠷దԽ͍ͨ͠ͷ͔ߟ͑ͯ͋Γ·͔͢ʁ େܭࢉ࣌ؒͷ࠷খԽ͔ɺཁٻϝϞϦͷ࠷খԽ ϦϑΝΫλϦϯάอकੑͷ࠷దԽͱݴ͑ͳ͘ͳ͍ ͦͦʢཁٻʣʹରͯ͠ਖ਼͍͑͠Λฦ͢ϓϩάϥϜ ॻ͚·͔ͨ͠ʁ ؒҧͬͨίʔυΛνϡʔχϯάͯ͠ਖ਼͘͠ͳΔ͜ͱ·ͣແ͍ ࠷దԽʹίετɾϦιʔε͕ඞཁ ͋ͳͨͷΓ͍ͨ͜ͱɺຊʹׂʹ߹͍·͔͢ʁ
Θ͟Θ͟େͳ࣌ؒΛඅ͠ɺอकੑΛԼ͛ͯ·ͰΔඞཁ ͋Γ·͔͢ʁ ଞʹΔ͜ͱͳ͍ͷͰ͔͢ʁ ͦͷ։ൃ࣌ؒΛͬͯ৽ػೳΛՃ͢Δ ͦͷ։ൃ࣌ؒΛܭࢉ࣌ؒͦͷͷʹॆͯΔ ͦͷ։ൃ࣌ؒͷɺૣ͘ؼͬͯ৸Δ ͜Ε͔ΒԿ͏ɺͱ͓͖ͬͯͷίʔυؤுͬͯຏ͘Ձ ͕͋Δ 12 / 33
νϡʔχϯάʁͳʹͦΕ͓͍͍͠ͷʁ ϓϩάϥϜࣗମͷੑೳ࠷దԽ ͳʹΛ࠷దԽ͍ͨ͠ͷ͔ߟ͑ͯ͋Γ·͔͢ʁ େܭࢉ࣌ؒͷ࠷খԽ͔ɺཁٻϝϞϦͷ࠷খԽ ϦϑΝΫλϦϯάอकੑͷ࠷దԽͱݴ͑ͳ͘ͳ͍ ͦͦʢཁٻʣʹରͯ͠ਖ਼͍͑͠Λฦ͢ϓϩάϥϜ ॻ͚·͔ͨ͠ʁ ؒҧͬͨίʔυΛνϡʔχϯάͯ͠ਖ਼͘͠ͳΔ͜ͱ·ͣແ͍ ࠷దԽʹίετɾϦιʔε͕ඞཁ ͋ͳͨͷΓ͍ͨ͜ͱɺຊʹׂʹ߹͍·͔͢ʁ
Θ͟Θ͟େͳ࣌ؒΛඅ͠ɺอकੑΛԼ͛ͯ·ͰΔඞཁ ͋Γ·͔͢ʁ ଞʹΔ͜ͱͳ͍ͷͰ͔͢ʁ ͦͷ։ൃ࣌ؒΛͬͯ৽ػೳΛՃ͢Δ ͦͷ։ൃ࣌ؒΛܭࢉ࣌ؒͦͷͷʹॆͯΔ ͦͷ։ൃ࣌ؒͷɺૣ͘ؼͬͯ৸Δ ͜Ε͔ΒԿ͏ɺͱ͓͖ͬͯͷίʔυؤுͬͯຏ͘Ձ ͕͋Δ 12 / 33
νϡʔχϯάʁͳʹͦΕ͓͍͍͠ͷʁ ϓϩάϥϜࣗମͷੑೳ࠷దԽ ͳʹΛ࠷దԽ͍ͨ͠ͷ͔ߟ͑ͯ͋Γ·͔͢ʁ େܭࢉ࣌ؒͷ࠷খԽ͔ɺཁٻϝϞϦͷ࠷খԽ ϦϑΝΫλϦϯάอकੑͷ࠷దԽͱݴ͑ͳ͘ͳ͍ ͦͦʢཁٻʣʹରͯ͠ਖ਼͍͑͠Λฦ͢ϓϩάϥϜ ॻ͚·͔ͨ͠ʁ ؒҧͬͨίʔυΛνϡʔχϯάͯ͠ਖ਼͘͠ͳΔ͜ͱ·ͣແ͍ ࠷దԽʹίετɾϦιʔε͕ඞཁ ͋ͳͨͷΓ͍ͨ͜ͱɺຊʹׂʹ߹͍·͔͢ʁ
Θ͟Θ͟େͳ࣌ؒΛඅ͠ɺอकੑΛԼ͛ͯ·ͰΔඞཁ ͋Γ·͔͢ʁ ଞʹΔ͜ͱͳ͍ͷͰ͔͢ʁ ͦͷ։ൃ࣌ؒΛͬͯ৽ػೳΛՃ͢Δ ͦͷ։ൃ࣌ؒΛܭࢉ࣌ؒͦͷͷʹॆͯΔ ͦͷ։ൃ࣌ؒͷɺૣ͘ؼͬͯ৸Δ ͜Ε͔ΒԿ͏ɺͱ͓͖ͬͯͷίʔυؤுͬͯຏ͘Ձ ͕͋Δ 12 / 33
νϡʔχϯάʁͳʹͦΕ͓͍͍͠ͷʁ ϓϩάϥϜࣗମͷੑೳ࠷దԽ ͳʹΛ࠷దԽ͍ͨ͠ͷ͔ߟ͑ͯ͋Γ·͔͢ʁ େܭࢉ࣌ؒͷ࠷খԽ͔ɺཁٻϝϞϦͷ࠷খԽ ϦϑΝΫλϦϯάอकੑͷ࠷దԽͱݴ͑ͳ͘ͳ͍ ͦͦʢཁٻʣʹରͯ͠ਖ਼͍͑͠Λฦ͢ϓϩάϥϜ ॻ͚·͔ͨ͠ʁ ؒҧͬͨίʔυΛνϡʔχϯάͯ͠ਖ਼͘͠ͳΔ͜ͱ·ͣແ͍ ࠷దԽʹίετɾϦιʔε͕ඞཁ ͋ͳͨͷΓ͍ͨ͜ͱɺຊʹׂʹ߹͍·͔͢ʁ
Θ͟Θ͟େͳ࣌ؒΛඅ͠ɺอकੑΛԼ͛ͯ·ͰΔඞཁ ͋Γ·͔͢ʁ ଞʹΔ͜ͱͳ͍ͷͰ͔͢ʁ ͦͷ։ൃ࣌ؒΛͬͯ৽ػೳΛՃ͢Δ ͦͷ։ൃ࣌ؒΛܭࢉ࣌ؒͦͷͷʹॆͯΔ ͦͷ։ൃ࣌ؒͷɺૣ͘ؼͬͯ৸Δ ͜Ε͔ΒԿ͏ɺͱ͓͖ͬͯͷίʔυؤுͬͯຏ͘Ձ ͕͋Δ 12 / 33
νϡʔχϯάʁͳʹͦΕ͓͍͍͠ͷʁ ϓϩάϥϜࣗମͷੑೳ࠷దԽ ͳʹΛ࠷దԽ͍ͨ͠ͷ͔ߟ͑ͯ͋Γ·͔͢ʁ େܭࢉ࣌ؒͷ࠷খԽ͔ɺཁٻϝϞϦͷ࠷খԽ ϦϑΝΫλϦϯάอकੑͷ࠷దԽͱݴ͑ͳ͘ͳ͍ ͦͦʢཁٻʣʹରͯ͠ਖ਼͍͑͠Λฦ͢ϓϩάϥϜ ॻ͚·͔ͨ͠ʁ ؒҧͬͨίʔυΛνϡʔχϯάͯ͠ਖ਼͘͠ͳΔ͜ͱ·ͣແ͍ ࠷దԽʹίετɾϦιʔε͕ඞཁ ͋ͳͨͷΓ͍ͨ͜ͱɺຊʹׂʹ߹͍·͔͢ʁ
Θ͟Θ͟େͳ࣌ؒΛඅ͠ɺอकੑΛԼ͛ͯ·ͰΔඞཁ ͋Γ·͔͢ʁ ଞʹΔ͜ͱͳ͍ͷͰ͔͢ʁ ͦͷ։ൃ࣌ؒΛͬͯ৽ػೳΛՃ͢Δ ͦͷ։ൃ࣌ؒΛܭࢉ࣌ؒͦͷͷʹॆͯΔ ͦͷ։ൃ࣌ؒͷɺૣ͘ؼͬͯ৸Δ ͜Ε͔ΒԿ͏ɺͱ͓͖ͬͯͷίʔυؤுͬͯຏ͘Ձ ͕͋Δ 12 / 33
νϡʔχϯάʁͳʹͦΕ͓͍͍͠ͷʁ ϓϩάϥϜࣗମͷੑೳ࠷దԽ ͳʹΛ࠷దԽ͍ͨ͠ͷ͔ߟ͑ͯ͋Γ·͔͢ʁ େܭࢉ࣌ؒͷ࠷খԽ͔ɺཁٻϝϞϦͷ࠷খԽ ϦϑΝΫλϦϯάอकੑͷ࠷దԽͱݴ͑ͳ͘ͳ͍ ͦͦʢཁٻʣʹରͯ͠ਖ਼͍͑͠Λฦ͢ϓϩάϥϜ ॻ͚·͔ͨ͠ʁ ؒҧͬͨίʔυΛνϡʔχϯάͯ͠ਖ਼͘͠ͳΔ͜ͱ·ͣແ͍ ࠷దԽʹίετɾϦιʔε͕ඞཁ ͋ͳͨͷΓ͍ͨ͜ͱɺຊʹׂʹ߹͍·͔͢ʁ
Θ͟Θ͟େͳ࣌ؒΛඅ͠ɺอकੑΛԼ͛ͯ·ͰΔඞཁ ͋Γ·͔͢ʁ ଞʹΔ͜ͱͳ͍ͷͰ͔͢ʁ ͦͷ։ൃ࣌ؒΛͬͯ৽ػೳΛՃ͢Δ ͦͷ։ൃ࣌ؒΛܭࢉ࣌ؒͦͷͷʹॆͯΔ ͦͷ։ൃ࣌ؒͷɺૣ͘ؼͬͯ৸Δ ͜Ε͔ΒԿ͏ɺͱ͓͖ͬͯͷίʔυؤுͬͯຏ͘Ձ ͕͋Δ 12 / 33
νϡʔχϯάʁͳʹͦΕ͓͍͍͠ͷʁ ϓϩάϥϜࣗମͷੑೳ࠷దԽ ͳʹΛ࠷దԽ͍ͨ͠ͷ͔ߟ͑ͯ͋Γ·͔͢ʁ େܭࢉ࣌ؒͷ࠷খԽ͔ɺཁٻϝϞϦͷ࠷খԽ ϦϑΝΫλϦϯάอकੑͷ࠷దԽͱݴ͑ͳ͘ͳ͍ ͦͦʢཁٻʣʹରͯ͠ਖ਼͍͑͠Λฦ͢ϓϩάϥϜ ॻ͚·͔ͨ͠ʁ ؒҧͬͨίʔυΛνϡʔχϯάͯ͠ਖ਼͘͠ͳΔ͜ͱ·ͣແ͍ ࠷దԽʹίετɾϦιʔε͕ඞཁ ͋ͳͨͷΓ͍ͨ͜ͱɺຊʹׂʹ߹͍·͔͢ʁ
Θ͟Θ͟େͳ࣌ؒΛඅ͠ɺอकੑΛԼ͛ͯ·ͰΔඞཁ ͋Γ·͔͢ʁ ଞʹΔ͜ͱͳ͍ͷͰ͔͢ʁ ͦͷ։ൃ࣌ؒΛͬͯ৽ػೳΛՃ͢Δ ͦͷ։ൃ࣌ؒΛܭࢉ࣌ؒͦͷͷʹॆͯΔ ͦͷ։ൃ࣌ؒͷɺૣ͘ؼͬͯ৸Δ ͜Ε͔ΒԿ͏ɺͱ͓͖ͬͯͷίʔυؤுͬͯຏ͘Ձ ͕͋Δ 12 / 33
νϡʔχϯάʁͳʹͦΕ͓͍͍͠ͷʁ ϓϩάϥϜࣗମͷੑೳ࠷దԽ ͳʹΛ࠷దԽ͍ͨ͠ͷ͔ߟ͑ͯ͋Γ·͔͢ʁ େܭࢉ࣌ؒͷ࠷খԽ͔ɺཁٻϝϞϦͷ࠷খԽ ϦϑΝΫλϦϯάอकੑͷ࠷దԽͱݴ͑ͳ͘ͳ͍ ͦͦʢཁٻʣʹରͯ͠ਖ਼͍͑͠Λฦ͢ϓϩάϥϜ ॻ͚·͔ͨ͠ʁ ؒҧͬͨίʔυΛνϡʔχϯάͯ͠ਖ਼͘͠ͳΔ͜ͱ·ͣແ͍ ࠷దԽʹίετɾϦιʔε͕ඞཁ ͋ͳͨͷΓ͍ͨ͜ͱɺຊʹׂʹ߹͍·͔͢ʁ
Θ͟Θ͟େͳ࣌ؒΛඅ͠ɺอकੑΛԼ͛ͯ·ͰΔඞཁ ͋Γ·͔͢ʁ ଞʹΔ͜ͱͳ͍ͷͰ͔͢ʁ ͦͷ։ൃ࣌ؒΛͬͯ৽ػೳΛՃ͢Δ ͦͷ։ൃ࣌ؒΛܭࢉ࣌ؒͦͷͷʹॆͯΔ ͦͷ։ൃ࣌ؒͷɺૣ͘ؼͬͯ৸Δ ͜Ε͔ΒԿ͏ɺͱ͓͖ͬͯͷίʔυؤுͬͯຏ͘Ձ ͕͋Δ 12 / 33
֨ݴू Donald Knuth ࣌ظঘૣͳ࠷దԽॾѱͷࠜݯͰ͋Δ Michael A. Jackson ࠷దԽͷୈҰ๏ଇ ࠷దԽ͢Δͳɻ ࠷దԽͷୈೋ๏ଇ
·ͩ͢Δͳɻ ʢ্ڃऀݶఆʣ ͔ͩΒͱ͍ͬͯɺ໌Β͔ʹμϝͳίʔυΛ์ஔ͍ͯͯ͠ྑ͍ Θ͚͡Όͳ͍ ࣌ؒΛ͔͚ͯͻͶͬͨίʔυΛ࢈Έग़ͯ͠·Ͱʮ࠷దԽʯ͢Δ ͷޙʹ͠Ζͱ͍͏͜ͱ Knuth ઌੜ͜ͷޙ͙͢ʹʮͦΕͰɺΫϦςΟΧϧͳ 3%ݟಀ͢ͳʯͱݴ͍ͬͯΔ͠ ͔ͤͬ͘ Julia ͪΌΜΛ͏Μ͔ͩΒɺͦͷΛҾ͖ग़ͯ͠ ͋͛Α͏ʂ 13 / 33
֨ݴू Donald Knuth ࣌ظঘૣͳ࠷దԽॾѱͷࠜݯͰ͋Δ Michael A. Jackson ࠷దԽͷୈҰ๏ଇ ࠷దԽ͢Δͳɻ ࠷దԽͷୈೋ๏ଇ
·ͩ͢Δͳɻ ʢ্ڃऀݶఆʣ ͔ͩΒͱ͍ͬͯɺ໌Β͔ʹμϝͳίʔυΛ์ஔ͍ͯͯ͠ྑ͍ Θ͚͡Όͳ͍ ࣌ؒΛ͔͚ͯͻͶͬͨίʔυΛ࢈Έग़ͯ͠·Ͱʮ࠷దԽʯ͢Δ ͷޙʹ͠Ζͱ͍͏͜ͱ Knuth ઌੜ͜ͷޙ͙͢ʹʮͦΕͰɺΫϦςΟΧϧͳ 3%ݟಀ͢ͳʯͱݴ͍ͬͯΔ͠ ͔ͤͬ͘ Julia ͪΌΜΛ͏Μ͔ͩΒɺͦͷΛҾ͖ग़ͯ͠ ͋͛Α͏ʂ 13 / 33
֨ݴू Donald Knuth ࣌ظঘૣͳ࠷దԽॾѱͷࠜݯͰ͋Δ Michael A. Jackson ࠷దԽͷୈҰ๏ଇ ࠷దԽ͢Δͳɻ ࠷దԽͷୈೋ๏ଇ
·ͩ͢Δͳɻ ʢ্ڃऀݶఆʣ ͔ͩΒͱ͍ͬͯɺ໌Β͔ʹμϝͳίʔυΛ์ஔ͍ͯͯ͠ྑ͍ Θ͚͡Όͳ͍ ࣌ؒΛ͔͚ͯͻͶͬͨίʔυΛ࢈Έग़ͯ͠·Ͱʮ࠷దԽʯ͢Δ ͷޙʹ͠Ζͱ͍͏͜ͱ Knuth ઌੜ͜ͷޙ͙͢ʹʮͦΕͰɺΫϦςΟΧϧͳ 3%ݟಀ͢ͳʯͱݴ͍ͬͯΔ͠ ͔ͤͬ͘ Julia ͪΌΜΛ͏Μ͔ͩΒɺͦͷΛҾ͖ग़ͯ͠ ͋͛Α͏ʂ 13 / 33
֨ݴू Donald Knuth ࣌ظঘૣͳ࠷దԽॾѱͷࠜݯͰ͋Δ Michael A. Jackson ࠷దԽͷୈҰ๏ଇ ࠷దԽ͢Δͳɻ ࠷దԽͷୈೋ๏ଇ
·ͩ͢Δͳɻ ʢ্ڃऀݶఆʣ ͔ͩΒͱ͍ͬͯɺ໌Β͔ʹμϝͳίʔυΛ์ஔ͍ͯͯ͠ྑ͍ Θ͚͡Όͳ͍ ࣌ؒΛ͔͚ͯͻͶͬͨίʔυΛ࢈Έग़ͯ͠·Ͱʮ࠷దԽʯ͢Δ ͷޙʹ͠Ζͱ͍͏͜ͱ Knuth ઌੜ͜ͷޙ͙͢ʹʮͦΕͰɺΫϦςΟΧϧͳ 3%ݟಀ͢ͳʯͱݴ͍ͬͯΔ͠ ͔ͤͬ͘ Julia ͪΌΜΛ͏Μ͔ͩΒɺͦͷΛҾ͖ग़ͯ͠ ͋͛Α͏ʂ 13 / 33
֨ݴू Donald Knuth ࣌ظঘૣͳ࠷దԽॾѱͷࠜݯͰ͋Δ Michael A. Jackson ࠷దԽͷୈҰ๏ଇ ࠷దԽ͢Δͳɻ ࠷దԽͷୈೋ๏ଇ
·ͩ͢Δͳɻ ʢ্ڃऀݶఆʣ ͔ͩΒͱ͍ͬͯɺ໌Β͔ʹμϝͳίʔυΛ์ஔ͍ͯͯ͠ྑ͍ Θ͚͡Όͳ͍ ࣌ؒΛ͔͚ͯͻͶͬͨίʔυΛ࢈Έग़ͯ͠·Ͱʮ࠷దԽʯ͢Δ ͷޙʹ͠Ζͱ͍͏͜ͱ Knuth ઌੜ͜ͷޙ͙͢ʹʮͦΕͰɺΫϦςΟΧϧͳ 3%ݟಀ͢ͳʯͱݴ͍ͬͯΔ͠ ͔ͤͬ͘ Julia ͪΌΜΛ͏Μ͔ͩΒɺͦͷΛҾ͖ग़ͯ͠ ͋͛Α͏ʂ 13 / 33
֨ݴू Donald Knuth ࣌ظঘૣͳ࠷దԽॾѱͷࠜݯͰ͋Δ Michael A. Jackson ࠷దԽͷୈҰ๏ଇ ࠷దԽ͢Δͳɻ ࠷దԽͷୈೋ๏ଇ
·ͩ͢Δͳɻ ʢ্ڃऀݶఆʣ ͔ͩΒͱ͍ͬͯɺ໌Β͔ʹμϝͳίʔυΛ์ஔ͍ͯͯ͠ྑ͍ Θ͚͡Όͳ͍ ࣌ؒΛ͔͚ͯͻͶͬͨίʔυΛ࢈Έग़ͯ͠·Ͱʮ࠷దԽʯ͢Δ ͷޙʹ͠Ζͱ͍͏͜ͱ Knuth ઌੜ͜ͷޙ͙͢ʹʮͦΕͰɺΫϦςΟΧϧͳ 3%ݟಀ͢ͳʯͱݴ͍ͬͯΔ͠ ͔ͤͬ͘ Julia ͪΌΜΛ͏Μ͔ͩΒɺͦͷΛҾ͖ग़ͯ͠ ͋͛Α͏ʂ 13 / 33
֨ݴू Donald Knuth ࣌ظঘૣͳ࠷దԽॾѱͷࠜݯͰ͋Δ Michael A. Jackson ࠷దԽͷୈҰ๏ଇ ࠷దԽ͢Δͳɻ ࠷దԽͷୈೋ๏ଇ
·ͩ͢Δͳɻ ʢ্ڃऀݶఆʣ ͔ͩΒͱ͍ͬͯɺ໌Β͔ʹμϝͳίʔυΛ์ஔ͍ͯͯ͠ྑ͍ Θ͚͡Όͳ͍ ࣌ؒΛ͔͚ͯͻͶͬͨίʔυΛ࢈Έग़ͯ͠·Ͱʮ࠷దԽʯ͢Δ ͷޙʹ͠Ζͱ͍͏͜ͱ Knuth ઌੜ͜ͷޙ͙͢ʹʮͦΕͰɺΫϦςΟΧϧͳ 3%ݟಀ͢ͳʯͱݴ͍ͬͯΔ͠ ͔ͤͬ͘ Julia ͪΌΜΛ͏Μ͔ͩΒɺͦͷΛҾ͖ग़ͯ͠ ͋͛Α͏ʂ 13 / 33
֨ݴू Donald Knuth ࣌ظঘૣͳ࠷దԽॾѱͷࠜݯͰ͋Δ Michael A. Jackson ࠷దԽͷୈҰ๏ଇ ࠷దԽ͢Δͳɻ ࠷దԽͷୈೋ๏ଇ
·ͩ͢Δͳɻ ʢ্ڃऀݶఆʣ ͔ͩΒͱ͍ͬͯɺ໌Β͔ʹμϝͳίʔυΛ์ஔ͍ͯͯ͠ྑ͍ Θ͚͡Όͳ͍ ࣌ؒΛ͔͚ͯͻͶͬͨίʔυΛ࢈Έग़ͯ͠·Ͱʮ࠷దԽʯ͢Δ ͷޙʹ͠Ζͱ͍͏͜ͱ Knuth ઌੜ͜ͷޙ͙͢ʹʮͦΕͰɺΫϦςΟΧϧͳ 3%ݟಀ͢ͳʯͱݴ͍ͬͯΔ͠ ͔ͤͬ͘ Julia ͪΌΜΛ͏Μ͔ͩΒɺͦͷΛҾ͖ग़ͯ͠ ͋͛Α͏ʂ 13 / 33
Ұൠతͳ࠷దԽͷΓ͔ͨ େલఏͱͯ͠ɺਖ਼͘͠ಈ͘ϓϩάϥϜʢςετཁٻ༷ͳͲʹద ߹͢ΔʣΛॻ্͖͛Δ 1 ϓϩϑΝΠϥͰϗοτεϙοτΛ୳͢ େ༧֎ͷͱ͜Ζʹ͋ΔͷͰπʔϧΛ͏͜ͱ શମతʹಉ͙͡Β͍͍ͱ͖ఘΊΑ͏ 2 νϡʔχϯάΛࢼΈΔ ΞϧΰϦζϜΛม͑Δ
ϥΠϒϥϦؔΛม͑Δ ίϯύΠϥϋʔυΣΞͷؾ࣋ͪʹͳͬͯߟ͑Δ ܭࢉػ༷͕ؾ࣋ͪΑ͘ࣄͰ͖ΔΑ͏ͳίʔυΛॻ͘ 3 ςετΛߦͬͯɺΤϯόά͍ͯ͠ͳ͍͜ͱΛ͔֬ΊΔ 4 ࣌ؒΛଌͬͯޮՌΛ֬ೝ͢Δ 5 ଥڠͰ͖Δͱ͜Ζ·Ͱ܁Γฦ͢ 14 / 33
Ұൠతͳ࠷దԽͷΓ͔ͨ େલఏͱͯ͠ɺਖ਼͘͠ಈ͘ϓϩάϥϜʢςετཁٻ༷ͳͲʹద ߹͢ΔʣΛॻ্͖͛Δ 1 ϓϩϑΝΠϥͰϗοτεϙοτΛ୳͢ େ༧֎ͷͱ͜Ζʹ͋ΔͷͰπʔϧΛ͏͜ͱ શମతʹಉ͙͡Β͍͍ͱ͖ఘΊΑ͏ 2 νϡʔχϯάΛࢼΈΔ ΞϧΰϦζϜΛม͑Δ
ϥΠϒϥϦؔΛม͑Δ ίϯύΠϥϋʔυΣΞͷؾ࣋ͪʹͳͬͯߟ͑Δ ܭࢉػ༷͕ؾ࣋ͪΑ͘ࣄͰ͖ΔΑ͏ͳίʔυΛॻ͘ 3 ςετΛߦͬͯɺΤϯόά͍ͯ͠ͳ͍͜ͱΛ͔֬ΊΔ 4 ࣌ؒΛଌͬͯޮՌΛ֬ೝ͢Δ 5 ଥڠͰ͖Δͱ͜Ζ·Ͱ܁Γฦ͢ 14 / 33
Ұൠతͳ࠷దԽͷΓ͔ͨ େલఏͱͯ͠ɺਖ਼͘͠ಈ͘ϓϩάϥϜʢςετཁٻ༷ͳͲʹద ߹͢ΔʣΛॻ্͖͛Δ 1 ϓϩϑΝΠϥͰϗοτεϙοτΛ୳͢ େ༧֎ͷͱ͜Ζʹ͋ΔͷͰπʔϧΛ͏͜ͱ શମతʹಉ͙͡Β͍͍ͱ͖ఘΊΑ͏ 2 νϡʔχϯάΛࢼΈΔ ΞϧΰϦζϜΛม͑Δ
ϥΠϒϥϦؔΛม͑Δ ίϯύΠϥϋʔυΣΞͷؾ࣋ͪʹͳͬͯߟ͑Δ ܭࢉػ༷͕ؾ࣋ͪΑ͘ࣄͰ͖ΔΑ͏ͳίʔυΛॻ͘ 3 ςετΛߦͬͯɺΤϯόά͍ͯ͠ͳ͍͜ͱΛ͔֬ΊΔ 4 ࣌ؒΛଌͬͯޮՌΛ֬ೝ͢Δ 5 ଥڠͰ͖Δͱ͜Ζ·Ͱ܁Γฦ͢ 14 / 33
Ұൠతͳ࠷దԽͷΓ͔ͨ େલఏͱͯ͠ɺਖ਼͘͠ಈ͘ϓϩάϥϜʢςετཁٻ༷ͳͲʹద ߹͢ΔʣΛॻ্͖͛Δ 1 ϓϩϑΝΠϥͰϗοτεϙοτΛ୳͢ େ༧֎ͷͱ͜Ζʹ͋ΔͷͰπʔϧΛ͏͜ͱ શମతʹಉ͙͡Β͍͍ͱ͖ఘΊΑ͏ 2 νϡʔχϯάΛࢼΈΔ ΞϧΰϦζϜΛม͑Δ
ϥΠϒϥϦؔΛม͑Δ ίϯύΠϥϋʔυΣΞͷؾ࣋ͪʹͳͬͯߟ͑Δ ܭࢉػ༷͕ؾ࣋ͪΑ͘ࣄͰ͖ΔΑ͏ͳίʔυΛॻ͘ 3 ςετΛߦͬͯɺΤϯόά͍ͯ͠ͳ͍͜ͱΛ͔֬ΊΔ 4 ࣌ؒΛଌͬͯޮՌΛ֬ೝ͢Δ 5 ଥڠͰ͖Δͱ͜Ζ·Ͱ܁Γฦ͢ 14 / 33
Ұൠతͳ࠷దԽͷΓ͔ͨ େલఏͱͯ͠ɺਖ਼͘͠ಈ͘ϓϩάϥϜʢςετཁٻ༷ͳͲʹద ߹͢ΔʣΛॻ্͖͛Δ 1 ϓϩϑΝΠϥͰϗοτεϙοτΛ୳͢ େ༧֎ͷͱ͜Ζʹ͋ΔͷͰπʔϧΛ͏͜ͱ શମతʹಉ͙͡Β͍͍ͱ͖ఘΊΑ͏ 2 νϡʔχϯάΛࢼΈΔ ΞϧΰϦζϜΛม͑Δ
ϥΠϒϥϦؔΛม͑Δ ίϯύΠϥϋʔυΣΞͷؾ࣋ͪʹͳͬͯߟ͑Δ ܭࢉػ༷͕ؾ࣋ͪΑ͘ࣄͰ͖ΔΑ͏ͳίʔυΛॻ͘ 3 ςετΛߦͬͯɺΤϯόά͍ͯ͠ͳ͍͜ͱΛ͔֬ΊΔ 4 ࣌ؒΛଌͬͯޮՌΛ֬ೝ͢Δ 5 ଥڠͰ͖Δͱ͜Ζ·Ͱ܁Γฦ͢ 14 / 33
Ұൠతͳ࠷దԽͷΓ͔ͨ େલఏͱͯ͠ɺਖ਼͘͠ಈ͘ϓϩάϥϜʢςετཁٻ༷ͳͲʹద ߹͢ΔʣΛॻ্͖͛Δ 1 ϓϩϑΝΠϥͰϗοτεϙοτΛ୳͢ େ༧֎ͷͱ͜Ζʹ͋ΔͷͰπʔϧΛ͏͜ͱ શମతʹಉ͙͡Β͍͍ͱ͖ఘΊΑ͏ 2 νϡʔχϯάΛࢼΈΔ ΞϧΰϦζϜΛม͑Δ
ϥΠϒϥϦؔΛม͑Δ ίϯύΠϥϋʔυΣΞͷؾ࣋ͪʹͳͬͯߟ͑Δ ܭࢉػ༷͕ؾ࣋ͪΑ͘ࣄͰ͖ΔΑ͏ͳίʔυΛॻ͘ 3 ςετΛߦͬͯɺΤϯόά͍ͯ͠ͳ͍͜ͱΛ͔֬ΊΔ 4 ࣌ؒΛଌͬͯޮՌΛ֬ೝ͢Δ 5 ଥڠͰ͖Δͱ͜Ζ·Ͱ܁Γฦ͢ 14 / 33
Julia ʹ͓͚Δੑೳଌఆπʔϧ ҎԼ Base Լʹ͋Δඪ४πʔϧ ࣌ؒɾϝϞϦ྆༻ @time / @timed ࣌ؒ
@elapsed tic / toc / toq time_ns ϝϞϦ @allocated ϓϩϑΝΠϥ Profile Ϟδϡʔϧ --track-allocation=user 15 / 33
࣌ؒɾϝϞϦଌఆπʔϧ @time(ex) / @timed(ex) ༩͑ͨࣜ ex ʹؔͯ͠ɺ࣮ߦ࣌ؒɾཁٻϝϞϦɾΨϕίϨ࣌ؒΛ ଌఆ͢Δ @time ଌఆ݁ՌΛඪ४ग़ྗʹग़͠ɺ@timed
ฦΓͱͯ͠ ฦ͢ جຊతʹ͜ΕΒΛ͑ OK 1 julia > @time sum(ones (1 < <24)) 2 elapsed time: 0.094370607 seconds (134217888 bytes allocated , 24.31% gc time) # STDOUT 3 1.6777216 e7 # ฦ Γ 4 5 julia > @timed sum(ones (1 < <24)) 6 (1.6777216e7 ,0.101337356 ,134217888 ,0.022860107) # ฦ Γ 16 / 33
࣌ؒଌఆπʔϧ @elapsed(ex) ࣜ ex Λ࣮ߦ͠ɺ͔͔ͬͨ࣌ؒΛඵ୯ҐͰฦ͢ ex ͷͦͷͷฦ͞ͳ͍ʢ༷ʣ 1 julia >
@elapsed sum(ones (1 < <24)) 2 0.09623339 # ฦ Γ 17 / 33
࣌ؒଌఆπʔϧ tic() ࣌ؒଌఆͷجΛηοτ͢Δ toq() tic() ͔Βͷܦա࣌ؒΛඵ୯ҐͰฦ͢ toq() ͢Δͱ tic() Ͱ࡞ͬͨجͳ͘ͳΔ
toc() toq() ͯ͠ɺܦա࣌ؒΛ println ͢Δ 1 julia > tic() 2 0 x0000a45b7e3a65c3 # ޙ ड़ ͢ Δ time_ns () ͷ ฦ Γ 3 4 julia > toc() 5 elapsed time: 3.471314971 seconds # STDOUT 6 3.471314971 # ฦ Γ 7 8 julia > toc() 9 ERROR: toc() without tic() 10 in toq at util.jl:28 11 in toc at util.jl:36 18 / 33
࣌ؒଌఆπʔϧ time_ns ݱࡏ࣌ࠁΛφϊඵ୯ҐͰฦ͢ ฦΓͷܕ UInt64 ͜͜·Ͱհͨؔ͠ɾϚΫϩ෦Ͱ͜ΕΛݺͿ θϩ͕۩ମతʹͲ͔͜ఆΊΒΕ͍ͯͳ͍ 5.8 पظͰΦʔόʔϑϩʔ͢ΔͨΊ 1
julia > time_ns () 2 0 x0000a44ebf7ad040 3 4 julia > (time_ns () - ans )/1e9 5 1.728456695 19 / 33
ϝϞϦଌఆπʔϧ @allocated(ex) ࣜ ex Λ࣮ߦ͠ɺͦͷؒʹ֬อͨ͠ϝϞϦΛ Byte ୯ҐͰฦ͢ ex ͷͦͷͷฦ͞ͳ͍ʢ༷ʣ @timed(ex)
ͷϝϞϦ൛ 1 julia > @allocated [1:1024] 2 8256 3 4 julia > @allocated [] 5 48 ۭྻΛ࡞Δ͚ͩͰΦʔόʔϔου͕͋ΔͬΆ͍ 20 / 33
ϓϩϑΝΠϥ Base.Profile Ϟδϡʔϧ ౷ܭతϓϩϑΝΠϥ पظతʹ (ඪ४Ͱ 1 ϛϦඵ) Ͳͷߦʹ͍Δͷ͔ΛௐΔ͜ͱ ͰɺͲ͜ͰͲͷ͘Β͍ͷ࣌ؒΛඅͨ͠ͷ͔ΛௐΔ
όοΫτϨʔεΛݟ͍ͯΔͷͰɺͲͷؔݺͼग़͔͠ΒݺΕ ͍ͯΔͷ͔۠ผՄೳ 21 / 33
ϓϩϑΝΠϥ 1 julia > function prof(N::Int =100) 2 xs =
rand(N,N,N) 3 x = maximum(xs) 4 ys = rand(N,N,N) 5 y = maximum(ys) 6 x - y 7 nothing 8 end ͜ͷؔΛௐͯΈΔʢެࣜυΩϡϝϯτͷྫΛ΄Μͷগͩ͠ ͚ෳࡶʹͨ͠ʣ 22 / 33
ϓϩϑΝΠϥ 1 julia > prof () # ؔ ͷ
J I T ί ϯ ύ Π ϧ 2 3 julia > Profile.clear () # Ҏ લ ʹ ଌ ఆ ͠ ͯ ͍ ͨ Β ফ ڈ ͠ ͯ ͓ ͘ 4 5 julia > @profile prof (200) # ଌ ఆ 23 / 33
ϓϩϑΝΠϥ 1 julia > Profile.print () 2 95 task.jl; anonymous;
line: 96 3 94 REPL.jl; eval_user_input ; line: 54 4 94 profile.jl; anonymous; line: 14 5 43 none; prof; line: 2 6 43 random.jl; rand !; line: 132 7 5 none; prof; line: 3 8 5 reduce.jl; _mapreduce; line: 168 9 2 reduce.jl; mapreduce_impl; line: 281 10 3 reduce.jl; mapreduce_impl; line: 285 11 41 none; prof; line: 4 12 41 random.jl; rand !; line: 132 13 5 none; prof; line: 5 14 ## ... Ҏ Լ ུ ֤ߦ಄͔Β؍ଌճɺϑΝΠϧ໊ɺ໊ؔɺߦ 24 / 33
ϓϩϑΝΠϥ 1 julia > Profile.print(format = :flat) 2 Count File
Function Line 3 94 REPL.jl eval_user_input 54 4 1 REPL.jl eval_user_input 56 5 43 none prof 2 6 5 none prof 3 7 41 none prof 4 8 5 none prof 5 9 94 profile.jl anonymous 14 10 84 random.jl rand! 132 11 10 reduce.jl _mapreduce 168 12 1 reduce.jl mapreduce_impl 274 13 5 reduce.jl mapreduce_impl 281 14 4 reduce.jl mapreduce_impl 285 15 95 task.jl anonymous 96 format = :flat ͱ͢Δ͜ͱͰɺؔݺͼग़͠πϦʔΛແࢹ͠ ͯ݁ՌΛ·ͱΊΒΕΔ 25 / 33
ϓϩϑΝΠϥ 1 julia > open("prof.dat", "w") do io 2 Profile.print(io
, col =500) 3 end println ͳͲͷΑ͏ʹɺୈҰҾʹ IO ܕΛऔΔ͜ͱͰϑΝΠ ϧॻ͖ग़͕͠Ͱ͖Δ ϑΝΠϧʹॻ͖ग़͔ͯ͠Β sort -n grep Λ͢Δͷ͕ศར col ΦϓγϣϯҾɺग़ྗϑΝΠϧͷ࠷େจࣈ෯Λࢦఆ ͢Δ ग़ྗจࣈ͕ա͢ΔͱɺϑΝΠϧ໊ͳͲ͕Γ٧ΊΒΕΔͷ ͰͰ͖Δ͚ͩେ͖͍Λࢦఆ͓ͯ͘͠ͱྑ͍ 26 / 33
ϓϩϑΝΠϥ ProfileView.jl Base.Profile ͷՄࢹԽπʔϧ ԣ͕࣠Χϯτɺॎ͕࣠ؔݺͼग़͠ͷਂ͞ ϚεΦʔόʔͰϑΝΠϧ໊ɾ໊ؔͳͲ͕දࣔ͞ΕΔ IProfile.jl instrumenting profiler ຊޠͩͱͳΜͯݴ͏ΜͩΖ͏ʁ
gprof Έ͍ͨʹεΫϦϓτ࣮ߦϑΝΠϧʹϓϩϑΝΠϧ༻ ίʔυΛຒΊࠐΜͰɺΑΓਫ਼ີʹௐΔϓϩϑΝΠϥ ࠓճͪΐͬͱௐ͕ࠪ࣌ؒͳ্͔ͬͨʹɺࣗͷιʔεʹͬͨ ΒམͪͨͷͰͲΜͳײ͔͡Α͘Θ͔Γ·ͤΜʜʜ 27 / 33
ϝϞϦνΣοΫ --track-allocation=user Φϓγϣϯ ίʔυͷͲ͜ͰͲͷ͘Β͍ϝϞϦΛ֬อ͍ͯ͠Δͷ͔ΛௐΔ Φϓγϣϯ ͜ΕΛ͚ͭͯ Julia Λىಈ͢Δͱɺinclude ֤ͨ͠ϑΝΠϧ ʹରͯͦ͠ΕͧΕ*.mem
ϑΝΠϧ͕ग़དྷΔ ͦΕͧΕͷߦͰͲΕ͚ͩ֬อͨ͠ͷ͔͕ࠨʹදࣔ͞ΕΔ ҆ఔʹ͓͍ͯͨ͠΄͏͕͍͍͔ʁ 1 - function alloc(N::Int) 2 65425632 xs = ones(N,N,N) 3 0 x = maximum(xs) 4 64000064 ys = ones(N,N,N) 5 0 y = maximum(ys) 6 - end 7 - @time alloc (200) ؔͷ಄ͰɺίϯύΠϧࣗಈมͷελοΫදࣔ͞Εͯ ͍Δʁ 28 / 33
νϡʔχϯάʹཱ͔ͭ͠Εͳ͍πʔϧͱ͔ ެࣜυΩϡϝϯτͷ “Performance Tips” JuliaTokyo#1 Ͱͷؔ͞ΜͷൃදࢿྉͰ࣮ࡍʹͷଌఆΛ ͍ͯ͠·͢ Tips հπʔϧ͕࣌ʑͬͦ͜ΓͱՃච͞ΕΔ --track-allocation
ͱ͔͓ͱͱ͍ॳΊͯͬͨ @inbounds ྻͷڥքνΣοΫΛΔϚΫϩ ීஈڥքνΣοΫʹࣦഊ͢Δͱ BoundsError ྫ֎͕ඈͿ --check-bounds={yes|no} ͱ͍͏ΦϓγϣϯͰɺϚΫϩΛແ ࢹͯ͠νΣοΫΛڧ੍͢Δ͜ͱɺٯʹશʹνΣοΫΛ֎͢ ͜ͱՄೳ 29 / 33
νϡʔχϯάʹཱ͔ͭ͠Εͳ͍πʔϧͱ͔ @simd ϧʔϓͷ SIMD / ϕΫτϧฒྻԽ ࠷ϧʔϓͷΈ͑Δ @inbounds ͱΈ߹ΘͤΔඞཁ͕͋Δ ଞʹ৭ʑͳ݅ʢԾఆʣ͕ඞཁ͕ͩɺ͏·͘ϋϚΕૣ͘ͳΔ
୯७ͳϧʔϓͷ߹ͦͦ LLVM ͕ࣗಈͰͬͯ͘ΕΔ @parallel for / pmap for ͓Αͼ map ͷϓϩηεฒྻԽ Julia ͷฒྻॲཧͷதͰҰ൪୯७Ͱ͍͍͢ sfchaos ͞ΜͷൃදͰղઆ͕͋Δͣʜʜ @inline v0.4-dev Ͱొ @inline ͨؔ͠Λݺͼग़ؔ͢ΛίϯύΠϧͨ࣌͠ʹɺଆ ͷؔΛΠϯϥΠϯల։͢Δ Ϟδϡʔϧͷ࠷֎είʔϓॳճݺͼग़͠ͳͲɺίϯύΠϧͰ ͖͍ͯͳ͍ॴ͔ΒݺͿ߹ɺٯʹΦʔόʔϔου͕ൃੜ͢Δ 30 / 33
νϡʔχϯάʹཱ͔ͭ͠Εͳ͍πʔϧͱ͔ NumericExtensions.jl Base.map ͦͷҰΛ֦ுɾߴԽ͢Δύοέʔδ NumericFuns.jl ؚΊɺܭࢉ͢Δਓʹਆύοέʔδ νϡʔχϯά࣮ྫͰ͍·͢ʢ͕࣌ؒ͋ΕΔʣ NumericFuns.jl ܭࢉͰ͏͚ΕͲඪ४ʹೖ͍ͬͯͳ͍ؔͳͲ C++
Ͱ͍͏ͱ͜ΖͷؔΦϒδΣΫτͷΑ͏ͳͷͷఆٛ ͨͱ͑ଟมؔΛແ໊ؔΛΘͣʹҰมؔʢͷΑ͏ͳ ͷʣʹͰ͖Δ ؔͰͳ͍ͷͰɺؔద༻ NumericFuns.evaluate(f,args...) ͱ͍͏ผͷؔʹͳͬͯ ͍Δ ແ໊ؔͱҧ͍ɺNumericFuns.evaluate ʹؔͯ͠ JIT ίϯύ Πϧ͕ಇ͘Α͏ʹͳΔͷͰɺಛʹ NumericExtensions.map ͳ Ͳͷߴ֊ؔͱΈ߹ΘͤΔͱ͔ͳΓߴԽ͞ΕΔ @inline ͱͷΈ߹ΘͤͳͲྑͦ͞͏ ݩʑ NumericExtensions.jl ͷαϒϞδϡʔϧ͕ͩͬͨಠ ཱͨ͠ 31 / 33
νϡʔχϯά࣮ྫ 1 ࣍ݩϥϯμϜΥʔΫͷϞϯςΧϧϩܭࢉ https://github.com/yomichi/JuliaTokyo2/src/randomwalk *_version σΟϨΫτϦʹɺͦΕͧΕνϡʔχϯάͷ֤ஈ ֊͕ೖ͍ͬͯΔ ࠓճͨͩͻͱͭͷ map Λ
NumericExtensions.jl Ͱॻ͖ͳ ͓ͨ͠ ֤σΟϨΫτϦʹ͋Δ prof.jl Λ࣮ߦ͢Δͱ࣌ؒଌఆͱϓϩ ϑΝΠϦϯάΛߦ͏ 1 ## before (1 st_version) 2 elapsed time: 5.182680705 seconds (803357776 bytes allocated , 5.34% gc time) 3 4 ## after (4 th_version) 5 elapsed time: 1.824523981 seconds (414096 bytes allocated) ݁ɿNumericExtensions.jl ਆύοέʔδ 32 / 33
·ͱΊ Julia ͷιʔείʔυΛվળ͢ΔͨΊͷπʔϧΛௐͯΈͨ ࢥͬͨΑΓͨ͘͞Μ͋ͬͨͷͰɺ·ͩ·͖ͩ͑Ε͍ͯͳ͍ ͦͦௐ͖Ε͍ͯͳ͍͆ πʔϧͷ΄ͱΜͲ͕ Julia ͷதͰ͍݁ͯ͠Δ Julia ϓϩάϥϜ͕ಡΊΕݪཧతʹશ෦ಡΊΔ
୭͔ macro ߨ࠲ΛͰ͢Ͷʜʜ ެࣜυΩϡϝϯτɺͱͯେࣄ ಡΜͩͭΓͷ߲ʹه͕ͳ͞ΕΔͷͰ͍ͭ·ͰͰಡΜͰ ͍ΒΕΔ ͙͢ʹߋ৽͞ΕΔ͔Β༁͋Μ·Γਪ͞Εͳ͍͆ Base.@show ͱ NumericExtensions.jl ਆ 33 / 33