Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
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
AWSに止められる覚悟してますか?
morizo_1984
2
520
速習iPhone Duo対応
yuukiw00w
2
970
Kubernetes祭り #2 OP/ED
bells17
0
110
CodeRabbitの効果検証と過ごしてみた3ヶ月
armondando
0
200
Vue Fes Japan 2026 タイムテーブル徹底解説
448jp
1
640
AWS CDKのカスタムリソースでContinuum(旧Security Agent)を実装した話 | Implementing Continuum (formerly Security Agent) via AWS CDK Custom Resource
akihisaikeda
2
140
20260914 AIエージェント時代のPlatform Engineering LLM基盤とプロダクトの責務境界線
kanfab1
7
2.4k
re:Inventに行く前に知っておきたい現地参加のノウハウ
nokomoro3
0
390
contenteditable と日本語入力に向き合う
colorful12
0
180
Verilogで学ぶCPU自作入門
uyuki234
8
4.1k
Embedded Swiftで作る自作USBデバイス によるiOSデバイスの自動テスト / iOSDC Japan 2026 glassfiber
glassfiber
0
310
Augmenting AI with the Power of Jakarta EE
ivargrimstad
0
580
Featured
See All Featured
Avoiding the “Bad Training, Faster” Trap in the Age of AI
tmiket
0
260
Faster Mobile Websites
deanohume
310
32k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
50
10k
Leo the Paperboy
mayatellez
10
2.4k
The Curse of the Amulet
leimatthew05
3
15k
Prompt Engineering for Job Search
mfonobong
0
500
AI in Enterprises - Java and Open Source to the Rescue
ivargrimstad
0
1.5k
Testing 201, or: Great Expectations
jmmastey
46
8.3k
Why Our Code Smells
bkeepers
PRO
340
58k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
52
6.1k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
37
6.6k
The Language of Interfaces
destraynor
162
27k
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