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
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
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
スマート反転とウェブアクセシビリティ
camiha
0
210
Augmenting AI with the Power of Jakarta EE
ivargrimstad
0
120
XP祭りでしか伝わらないフリップネタ #xpjug
murabayashi
0
150
海上で動くGoサーバー: goroutineとchannelでさばく航行データストリーム
atsuki_seo
0
720
WebAssembly in Android Apps 〜 WASMはJNIの夢を見るか
keiji
1
110
MVNOの申込からeSIM開通までをiOSアプリでつなぐ- 本人確認・MNP・通信事業者基盤をまたぐ実装
satotakeshi
0
430
マイコン向けの軽量Ruby「PicoRuby」で各種デバイスを制御するネイティブアプリの実現手法
bash0c7
0
410
How I Stole PSI from Android Studio - DroidKaigi2026
worker8
0
130
AI に Inclusive UI を書かせよう — Design Rules Skill で Compose UI を作り直す
theoriatec2024
1
490
C#の現在地 進化の歴史と、AI時代の.NET Everywhere
neuecc
4
2.2k
WebMCP Challenge に星空観察アプリで参加した話
okajun35
0
180
選挙速報を多くのユーザーへ 届ける Live Activities 設計
hamayokokuririn
0
140
Featured
See All Featured
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
23k
世界の人気アプリ100個を分析して見えたペイウォール設計の心得
akihiro_kokubo
PRO
74
42k
Leading Effective Engineering Teams in the AI Era
addyosmani
9
2.6k
Deep Space Network (abreviated)
tonyrice
0
310
The AI Search Optimization Roadmap by Aleyda Solis
aleyda
1
6.2k
Breaking role norms: Why Content Design is so much more than writing copy - Taylor Woolridge
uxyall
1
410
Avoiding the “Bad Training, Faster” Trap in the Age of AI
tmiket
0
240
The SEO Collaboration Effect
kristinabergwall1
1
570
Redefining SEO in the New Era of Traffic Generation
szymonslowik
1
420
The innovator’s Mindset - Leading Through an Era of Exponential Change - McGill University 2025
jdejongh
PRO
1
340
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.8k
Future Trends and Review - Lecture 12 - Web Technologies (1019888BNR)
signer
PRO
0
3.7k
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