Slide 1

Slide 1 text

Julia ։ൃͷಓ۩ശʢνϡʔχϯάฤʣ Yuichi Motoyama (yomichi) Institute for Solid State Physics, Univ. of Tokyo JuliaTokyo #2 2014/09/27 εϥΠυͱαϯϓϧίʔυ https://github.com/yomichi/JuliaTokyo2 1 / 33

Slide 2

Slide 2 text

ࣗݾ঺հ HN : ໷ಓ, yomichi twitter : @yomichi_137 Ά͢Ͳ͍ͪ͘ͶΜ͍ͤ ౷ܭ෺ཧֶɾܭࢉ෺ཧֶ ओʹϞϯςΧϧϩ๏ͱ͔ہࡏεϐϯܥͱ͔ Πϕϯτʢษڧձʣ࣮گ੎ ࠷ۙͩͱશή࿈ʢಉਓήʔϜ։ൃʣͱ͔ɺ PyConJP ͱ͔ɺJuliaTokyo ͱ͔ ࣗ෼Ͱࣗ෼ͷൃද͸࣮گͰ͖ͳ͍ͷ͕ͭΒ͍ Julia nightly build ੎ Julia ͷ։ൃ؀ڥ͸ REPL ͱ Vim ڈ೥ͷՆίϛɾౙίϛͰ Julia ຊग़ͯ͠·ͨ͠ blog ͱ͔కΊ੾Γ͕ͳ͍ͷͰॻ͚·ͤΜʼʻ நબड͔͍ͬͯͨΒ࣍ͷౙʹ΋ग़͠·͢ (thanks @am_11) 2 / 33

Slide 3

Slide 3 text

ࠓ೔ͷ͓࿩ Julia ݴޠͰॻ͍ͨεΫϦϓτͷվળɺͭ·Γ σόοά ϦϑΝΫλϦϯά νϡʔχϯά Λ͢ΔͷʹศརͳπʔϧΛ঺հʂʂ ͱ͍͏༧ఆͰ͕ͨ͠ɺخ͍͠ࣄʹࢥͬͨΑΓ࿩͢͜ͱ͕͋ͬͯ࣌ؒ ͕ͳͦ͞͏ͳؾ͕͢ΔͷͰɺલ 2 ͭ͸ܰΊʹͯ͠ɺࠓ೔͸ओʹ νϡʔχϯάͷ࿩Λ͠·͢ʼʻ 3 / 33

Slide 4

Slide 4 text

ࠓ೔ͷ͓࿩ Julia ݴޠͰॻ͍ͨεΫϦϓτͷվળɺͭ·Γ σόοά ϦϑΝΫλϦϯά νϡʔχϯά Λ͢ΔͷʹศརͳπʔϧΛ঺հʂʂ ͱ͍͏༧ఆͰ͕ͨ͠ɺخ͍͠ࣄʹࢥͬͨΑΓ࿩͢͜ͱ͕͋ͬͯ࣌ؒ ͕ͳͦ͞͏ͳؾ͕͢ΔͷͰɺલ 2 ͭ͸ܰΊʹͯ͠ɺࠓ೔͸ओʹ νϡʔχϯάͷ࿩Λ͠·͢ʼʻ 3 / 33

Slide 5

Slide 5 text

σόοάπʔϧ 4 / 33

Slide 6

Slide 6 text

σόοά༻πʔϧ 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

Slide 7

Slide 7 text

σόοά༻πʔϧ 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

Slide 8

Slide 8 text

σόοά༻πʔϧ Debug.jl ର࿩ܕσόοΨ εςοϓ࣮ߦ΍ม਺ࢀরͳͲͦΕͳΓʹग़དྷΔ σόοά͍ͨ͠ϒϩοΫʹ༧Ί@debug Λ͚͓ͭͯ͘ ϒϨʔΫϙΠϯτΛ༧Ί෇͚͍ͨ৔߹@bp Λ͚͓ͭͯ͘ gdb ؚΊ͋Μ·Γ࢖͍ͬͯͳ͍ͷͰͳΜͱ΋ʜʜ Logging.jl ϩάه࿥༻πʔϧ ϩά৘ใʹϨϕϧΛ෇༩͢Δ͜ͱ͕Ͱ͖Δ ࣮ߦϨϕϧΛม͑Δ͜ͱͰ࢒͢৘ใΛऔࣺબ୒Ͱ͖Δ SIUnits.jl ܕͷྗͰόάΛ๷͙͜ͱΛ໨ࢦ͢ύοέʔδͷͻͱͭ ͍ΘΏΔ࣍ݩղੳ ྫ͑͹࣭ྔͱ௕͞͸ɺී௨ͷϓϩάϥϛϯάͰ͸ͱ΋ʹී௨ͷ࣮ ਺ͱͯ͠දݱ͞ΕΔ͕ɺຊ࣭తʹ͸ผ෺ Ճݮ͸ڐ͞Εͳ͍͕৐আ͸ڐ͞Εɺ͞Βʹ৽ͨͳ୯ҐΛ࡞Δ ଎౓ɾϝϞϦ্ͷΦʔόʔϔου΋ແ͍ ࣮ࡍʹ࢖͏ʹ͸ɺSI ୯ҐܥΛڧ੍͞ΕΔͷͰਖ਼௚ځ۶ʜʜ 7 / 33

Slide 9

Slide 9 text

ϦϑΝΫλϦϯάπʔϧ 8 / 33

Slide 10

Slide 10 text

ϦϑΝΫλϦϯά༻πʔϧ 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

Slide 11

Slide 11 text

ϦϑΝΫλϦϯά༻πʔϧ TypeCheck.jl ܕͷҰ؏ੑͳͲΛνΣοΫͰ͖Δ ίϯύΠϥ͕࠷దԽͯ͘͠ΕΔ͔Ͳ͏͔ʹޮ͍ͯ͘Δ checkreturntypes ؔ਺ͷฦΓ஋ͷܕ͕શ෦ಉ͔͡ checklooptypes ϧʔϓͷதͰม਺ͷܕ͕ෆม͔ code typed ֤ม਺͕औΓ͏ΔܕΛซهͯؔ͠਺ͷఆٛΛ දࣔ 10 / 33

Slide 12

Slide 12 text

νϡʔχϯά 11 / 33

Slide 13

Slide 13 text

νϡʔχϯάʁͳʹͦΕ͓͍͍͠ͷʁ ϓϩάϥϜࣗମͷੑೳ࠷దԽ ͳʹΛ࠷దԽ͍ͨ͠ͷ͔ߟ͑ͯ͋Γ·͔͢ʁ େ఍͸ܭࢉ࣌ؒͷ࠷খԽ͔ɺཁٻϝϞϦͷ࠷খԽ ϦϑΝΫλϦϯά΋อकੑͷ࠷దԽͱݴ͑ͳ͘΋ͳ͍ ͦ΋ͦ΋໰୊ʢཁٻʣʹରͯ͠ਖ਼͍͠౴͑Λฦ͢ϓϩάϥϜ͸ ॻ͚·͔ͨ͠ʁ ؒҧͬͨίʔυΛνϡʔχϯάͯ͠΋ਖ਼͘͠ͳΔ͜ͱ͸·ͣແ͍ ࠷దԽʹ΋ίετɾϦιʔε͕ඞཁ ͋ͳͨͷ΍Γ͍ͨ͜ͱɺຊ౰ʹׂʹ߹͍·͔͢ʁ Θ͟Θ͟େ੾ͳ࣌ؒΛඅ΍͠ɺอकੑΛԼ͛ͯ·Ͱ΍Δඞཁ͸ ͋Γ·͔͢ʁ ଞʹ΍Δ͜ͱ͸ͳ͍ͷͰ͔͢ʁ ͦͷ։ൃ࣌ؒΛ࢖ͬͯ৽ػೳΛ௥Ճ͢Δ ͦͷ։ൃ࣌ؒΛܭࢉ࣌ؒͦͷ΋ͷʹॆͯΔ ͦͷ։ൃ࣌ؒͷ෼ɺૣ͘ؼͬͯ৸Δ ͜Ε͔ΒԿ౓΋࢖͏ɺͱ͓͖ͬͯͷίʔυ͸ؤுͬͯຏ͘Ձ஋ ͕͋Δ 12 / 33

Slide 14

Slide 14 text

νϡʔχϯάʁͳʹͦΕ͓͍͍͠ͷʁ ϓϩάϥϜࣗମͷੑೳ࠷దԽ ͳʹΛ࠷దԽ͍ͨ͠ͷ͔ߟ͑ͯ͋Γ·͔͢ʁ େ఍͸ܭࢉ࣌ؒͷ࠷খԽ͔ɺཁٻϝϞϦͷ࠷খԽ ϦϑΝΫλϦϯά΋อकੑͷ࠷దԽͱݴ͑ͳ͘΋ͳ͍ ͦ΋ͦ΋໰୊ʢཁٻʣʹରͯ͠ਖ਼͍͠౴͑Λฦ͢ϓϩάϥϜ͸ ॻ͚·͔ͨ͠ʁ ؒҧͬͨίʔυΛνϡʔχϯάͯ͠΋ਖ਼͘͠ͳΔ͜ͱ͸·ͣແ͍ ࠷దԽʹ΋ίετɾϦιʔε͕ඞཁ ͋ͳͨͷ΍Γ͍ͨ͜ͱɺຊ౰ʹׂʹ߹͍·͔͢ʁ Θ͟Θ͟େ੾ͳ࣌ؒΛඅ΍͠ɺอकੑΛԼ͛ͯ·Ͱ΍Δඞཁ͸ ͋Γ·͔͢ʁ ଞʹ΍Δ͜ͱ͸ͳ͍ͷͰ͔͢ʁ ͦͷ։ൃ࣌ؒΛ࢖ͬͯ৽ػೳΛ௥Ճ͢Δ ͦͷ։ൃ࣌ؒΛܭࢉ࣌ؒͦͷ΋ͷʹॆͯΔ ͦͷ։ൃ࣌ؒͷ෼ɺૣ͘ؼͬͯ৸Δ ͜Ε͔ΒԿ౓΋࢖͏ɺͱ͓͖ͬͯͷίʔυ͸ؤுͬͯຏ͘Ձ஋ ͕͋Δ 12 / 33

Slide 15

Slide 15 text

νϡʔχϯάʁͳʹͦΕ͓͍͍͠ͷʁ ϓϩάϥϜࣗମͷੑೳ࠷దԽ ͳʹΛ࠷దԽ͍ͨ͠ͷ͔ߟ͑ͯ͋Γ·͔͢ʁ େ఍͸ܭࢉ࣌ؒͷ࠷খԽ͔ɺཁٻϝϞϦͷ࠷খԽ ϦϑΝΫλϦϯά΋อकੑͷ࠷దԽͱݴ͑ͳ͘΋ͳ͍ ͦ΋ͦ΋໰୊ʢཁٻʣʹରͯ͠ਖ਼͍͠౴͑Λฦ͢ϓϩάϥϜ͸ ॻ͚·͔ͨ͠ʁ ؒҧͬͨίʔυΛνϡʔχϯάͯ͠΋ਖ਼͘͠ͳΔ͜ͱ͸·ͣແ͍ ࠷దԽʹ΋ίετɾϦιʔε͕ඞཁ ͋ͳͨͷ΍Γ͍ͨ͜ͱɺຊ౰ʹׂʹ߹͍·͔͢ʁ Θ͟Θ͟େ੾ͳ࣌ؒΛඅ΍͠ɺอकੑΛԼ͛ͯ·Ͱ΍Δඞཁ͸ ͋Γ·͔͢ʁ ଞʹ΍Δ͜ͱ͸ͳ͍ͷͰ͔͢ʁ ͦͷ։ൃ࣌ؒΛ࢖ͬͯ৽ػೳΛ௥Ճ͢Δ ͦͷ։ൃ࣌ؒΛܭࢉ࣌ؒͦͷ΋ͷʹॆͯΔ ͦͷ։ൃ࣌ؒͷ෼ɺૣ͘ؼͬͯ৸Δ ͜Ε͔ΒԿ౓΋࢖͏ɺͱ͓͖ͬͯͷίʔυ͸ؤுͬͯຏ͘Ձ஋ ͕͋Δ 12 / 33

Slide 16

Slide 16 text

νϡʔχϯάʁͳʹͦΕ͓͍͍͠ͷʁ ϓϩάϥϜࣗମͷੑೳ࠷దԽ ͳʹΛ࠷దԽ͍ͨ͠ͷ͔ߟ͑ͯ͋Γ·͔͢ʁ େ఍͸ܭࢉ࣌ؒͷ࠷খԽ͔ɺཁٻϝϞϦͷ࠷খԽ ϦϑΝΫλϦϯά΋อकੑͷ࠷దԽͱݴ͑ͳ͘΋ͳ͍ ͦ΋ͦ΋໰୊ʢཁٻʣʹରͯ͠ਖ਼͍͠౴͑Λฦ͢ϓϩάϥϜ͸ ॻ͚·͔ͨ͠ʁ ؒҧͬͨίʔυΛνϡʔχϯάͯ͠΋ਖ਼͘͠ͳΔ͜ͱ͸·ͣແ͍ ࠷దԽʹ΋ίετɾϦιʔε͕ඞཁ ͋ͳͨͷ΍Γ͍ͨ͜ͱɺຊ౰ʹׂʹ߹͍·͔͢ʁ Θ͟Θ͟େ੾ͳ࣌ؒΛඅ΍͠ɺอकੑΛԼ͛ͯ·Ͱ΍Δඞཁ͸ ͋Γ·͔͢ʁ ଞʹ΍Δ͜ͱ͸ͳ͍ͷͰ͔͢ʁ ͦͷ։ൃ࣌ؒΛ࢖ͬͯ৽ػೳΛ௥Ճ͢Δ ͦͷ։ൃ࣌ؒΛܭࢉ࣌ؒͦͷ΋ͷʹॆͯΔ ͦͷ։ൃ࣌ؒͷ෼ɺૣ͘ؼͬͯ৸Δ ͜Ε͔ΒԿ౓΋࢖͏ɺͱ͓͖ͬͯͷίʔυ͸ؤுͬͯຏ͘Ձ஋ ͕͋Δ 12 / 33

Slide 17

Slide 17 text

νϡʔχϯάʁͳʹͦΕ͓͍͍͠ͷʁ ϓϩάϥϜࣗମͷੑೳ࠷దԽ ͳʹΛ࠷దԽ͍ͨ͠ͷ͔ߟ͑ͯ͋Γ·͔͢ʁ େ఍͸ܭࢉ࣌ؒͷ࠷খԽ͔ɺཁٻϝϞϦͷ࠷খԽ ϦϑΝΫλϦϯά΋อकੑͷ࠷దԽͱݴ͑ͳ͘΋ͳ͍ ͦ΋ͦ΋໰୊ʢཁٻʣʹରͯ͠ਖ਼͍͠౴͑Λฦ͢ϓϩάϥϜ͸ ॻ͚·͔ͨ͠ʁ ؒҧͬͨίʔυΛνϡʔχϯάͯ͠΋ਖ਼͘͠ͳΔ͜ͱ͸·ͣແ͍ ࠷దԽʹ΋ίετɾϦιʔε͕ඞཁ ͋ͳͨͷ΍Γ͍ͨ͜ͱɺຊ౰ʹׂʹ߹͍·͔͢ʁ Θ͟Θ͟େ੾ͳ࣌ؒΛඅ΍͠ɺอकੑΛԼ͛ͯ·Ͱ΍Δඞཁ͸ ͋Γ·͔͢ʁ ଞʹ΍Δ͜ͱ͸ͳ͍ͷͰ͔͢ʁ ͦͷ։ൃ࣌ؒΛ࢖ͬͯ৽ػೳΛ௥Ճ͢Δ ͦͷ։ൃ࣌ؒΛܭࢉ࣌ؒͦͷ΋ͷʹॆͯΔ ͦͷ։ൃ࣌ؒͷ෼ɺૣ͘ؼͬͯ৸Δ ͜Ε͔ΒԿ౓΋࢖͏ɺͱ͓͖ͬͯͷίʔυ͸ؤுͬͯຏ͘Ձ஋ ͕͋Δ 12 / 33

Slide 18

Slide 18 text

νϡʔχϯάʁͳʹͦΕ͓͍͍͠ͷʁ ϓϩάϥϜࣗମͷੑೳ࠷దԽ ͳʹΛ࠷దԽ͍ͨ͠ͷ͔ߟ͑ͯ͋Γ·͔͢ʁ େ఍͸ܭࢉ࣌ؒͷ࠷খԽ͔ɺཁٻϝϞϦͷ࠷খԽ ϦϑΝΫλϦϯά΋อकੑͷ࠷దԽͱݴ͑ͳ͘΋ͳ͍ ͦ΋ͦ΋໰୊ʢཁٻʣʹରͯ͠ਖ਼͍͠౴͑Λฦ͢ϓϩάϥϜ͸ ॻ͚·͔ͨ͠ʁ ؒҧͬͨίʔυΛνϡʔχϯάͯ͠΋ਖ਼͘͠ͳΔ͜ͱ͸·ͣແ͍ ࠷దԽʹ΋ίετɾϦιʔε͕ඞཁ ͋ͳͨͷ΍Γ͍ͨ͜ͱɺຊ౰ʹׂʹ߹͍·͔͢ʁ Θ͟Θ͟େ੾ͳ࣌ؒΛඅ΍͠ɺอकੑΛԼ͛ͯ·Ͱ΍Δඞཁ͸ ͋Γ·͔͢ʁ ଞʹ΍Δ͜ͱ͸ͳ͍ͷͰ͔͢ʁ ͦͷ։ൃ࣌ؒΛ࢖ͬͯ৽ػೳΛ௥Ճ͢Δ ͦͷ։ൃ࣌ؒΛܭࢉ࣌ؒͦͷ΋ͷʹॆͯΔ ͦͷ։ൃ࣌ؒͷ෼ɺૣ͘ؼͬͯ৸Δ ͜Ε͔ΒԿ౓΋࢖͏ɺͱ͓͖ͬͯͷίʔυ͸ؤுͬͯຏ͘Ձ஋ ͕͋Δ 12 / 33

Slide 19

Slide 19 text

νϡʔχϯάʁͳʹͦΕ͓͍͍͠ͷʁ ϓϩάϥϜࣗମͷੑೳ࠷దԽ ͳʹΛ࠷దԽ͍ͨ͠ͷ͔ߟ͑ͯ͋Γ·͔͢ʁ େ఍͸ܭࢉ࣌ؒͷ࠷খԽ͔ɺཁٻϝϞϦͷ࠷খԽ ϦϑΝΫλϦϯά΋อकੑͷ࠷దԽͱݴ͑ͳ͘΋ͳ͍ ͦ΋ͦ΋໰୊ʢཁٻʣʹରͯ͠ਖ਼͍͠౴͑Λฦ͢ϓϩάϥϜ͸ ॻ͚·͔ͨ͠ʁ ؒҧͬͨίʔυΛνϡʔχϯάͯ͠΋ਖ਼͘͠ͳΔ͜ͱ͸·ͣແ͍ ࠷దԽʹ΋ίετɾϦιʔε͕ඞཁ ͋ͳͨͷ΍Γ͍ͨ͜ͱɺຊ౰ʹׂʹ߹͍·͔͢ʁ Θ͟Θ͟େ੾ͳ࣌ؒΛඅ΍͠ɺอकੑΛԼ͛ͯ·Ͱ΍Δඞཁ͸ ͋Γ·͔͢ʁ ଞʹ΍Δ͜ͱ͸ͳ͍ͷͰ͔͢ʁ ͦͷ։ൃ࣌ؒΛ࢖ͬͯ৽ػೳΛ௥Ճ͢Δ ͦͷ։ൃ࣌ؒΛܭࢉ࣌ؒͦͷ΋ͷʹॆͯΔ ͦͷ։ൃ࣌ؒͷ෼ɺૣ͘ؼͬͯ৸Δ ͜Ε͔ΒԿ౓΋࢖͏ɺͱ͓͖ͬͯͷίʔυ͸ؤுͬͯຏ͘Ձ஋ ͕͋Δ 12 / 33

Slide 20

Slide 20 text

νϡʔχϯάʁͳʹͦΕ͓͍͍͠ͷʁ ϓϩάϥϜࣗମͷੑೳ࠷దԽ ͳʹΛ࠷దԽ͍ͨ͠ͷ͔ߟ͑ͯ͋Γ·͔͢ʁ େ఍͸ܭࢉ࣌ؒͷ࠷খԽ͔ɺཁٻϝϞϦͷ࠷খԽ ϦϑΝΫλϦϯά΋อकੑͷ࠷దԽͱݴ͑ͳ͘΋ͳ͍ ͦ΋ͦ΋໰୊ʢཁٻʣʹରͯ͠ਖ਼͍͠౴͑Λฦ͢ϓϩάϥϜ͸ ॻ͚·͔ͨ͠ʁ ؒҧͬͨίʔυΛνϡʔχϯάͯ͠΋ਖ਼͘͠ͳΔ͜ͱ͸·ͣແ͍ ࠷దԽʹ΋ίετɾϦιʔε͕ඞཁ ͋ͳͨͷ΍Γ͍ͨ͜ͱɺຊ౰ʹׂʹ߹͍·͔͢ʁ Θ͟Θ͟େ੾ͳ࣌ؒΛඅ΍͠ɺอकੑΛԼ͛ͯ·Ͱ΍Δඞཁ͸ ͋Γ·͔͢ʁ ଞʹ΍Δ͜ͱ͸ͳ͍ͷͰ͔͢ʁ ͦͷ։ൃ࣌ؒΛ࢖ͬͯ৽ػೳΛ௥Ճ͢Δ ͦͷ։ൃ࣌ؒΛܭࢉ࣌ؒͦͷ΋ͷʹॆͯΔ ͦͷ։ൃ࣌ؒͷ෼ɺૣ͘ؼͬͯ৸Δ ͜Ε͔ΒԿ౓΋࢖͏ɺͱ͓͖ͬͯͷίʔυ͸ؤுͬͯຏ͘Ձ஋ ͕͋Δ 12 / 33

Slide 21

Slide 21 text

νϡʔχϯάʁͳʹͦΕ͓͍͍͠ͷʁ ϓϩάϥϜࣗମͷੑೳ࠷దԽ ͳʹΛ࠷దԽ͍ͨ͠ͷ͔ߟ͑ͯ͋Γ·͔͢ʁ େ఍͸ܭࢉ࣌ؒͷ࠷খԽ͔ɺཁٻϝϞϦͷ࠷খԽ ϦϑΝΫλϦϯά΋อकੑͷ࠷దԽͱݴ͑ͳ͘΋ͳ͍ ͦ΋ͦ΋໰୊ʢཁٻʣʹରͯ͠ਖ਼͍͠౴͑Λฦ͢ϓϩάϥϜ͸ ॻ͚·͔ͨ͠ʁ ؒҧͬͨίʔυΛνϡʔχϯάͯ͠΋ਖ਼͘͠ͳΔ͜ͱ͸·ͣແ͍ ࠷దԽʹ΋ίετɾϦιʔε͕ඞཁ ͋ͳͨͷ΍Γ͍ͨ͜ͱɺຊ౰ʹׂʹ߹͍·͔͢ʁ Θ͟Θ͟େ੾ͳ࣌ؒΛඅ΍͠ɺอकੑΛԼ͛ͯ·Ͱ΍Δඞཁ͸ ͋Γ·͔͢ʁ ଞʹ΍Δ͜ͱ͸ͳ͍ͷͰ͔͢ʁ ͦͷ։ൃ࣌ؒΛ࢖ͬͯ৽ػೳΛ௥Ճ͢Δ ͦͷ։ൃ࣌ؒΛܭࢉ࣌ؒͦͷ΋ͷʹॆͯΔ ͦͷ։ൃ࣌ؒͷ෼ɺૣ͘ؼͬͯ৸Δ ͜Ε͔ΒԿ౓΋࢖͏ɺͱ͓͖ͬͯͷίʔυ͸ؤுͬͯຏ͘Ձ஋ ͕͋Δ 12 / 33

Slide 22

Slide 22 text

νϡʔχϯάʁͳʹͦΕ͓͍͍͠ͷʁ ϓϩάϥϜࣗମͷੑೳ࠷దԽ ͳʹΛ࠷దԽ͍ͨ͠ͷ͔ߟ͑ͯ͋Γ·͔͢ʁ େ఍͸ܭࢉ࣌ؒͷ࠷খԽ͔ɺཁٻϝϞϦͷ࠷খԽ ϦϑΝΫλϦϯά΋อकੑͷ࠷దԽͱݴ͑ͳ͘΋ͳ͍ ͦ΋ͦ΋໰୊ʢཁٻʣʹରͯ͠ਖ਼͍͠౴͑Λฦ͢ϓϩάϥϜ͸ ॻ͚·͔ͨ͠ʁ ؒҧͬͨίʔυΛνϡʔχϯάͯ͠΋ਖ਼͘͠ͳΔ͜ͱ͸·ͣແ͍ ࠷దԽʹ΋ίετɾϦιʔε͕ඞཁ ͋ͳͨͷ΍Γ͍ͨ͜ͱɺຊ౰ʹׂʹ߹͍·͔͢ʁ Θ͟Θ͟େ੾ͳ࣌ؒΛඅ΍͠ɺอकੑΛԼ͛ͯ·Ͱ΍Δඞཁ͸ ͋Γ·͔͢ʁ ଞʹ΍Δ͜ͱ͸ͳ͍ͷͰ͔͢ʁ ͦͷ։ൃ࣌ؒΛ࢖ͬͯ৽ػೳΛ௥Ճ͢Δ ͦͷ։ൃ࣌ؒΛܭࢉ࣌ؒͦͷ΋ͷʹॆͯΔ ͦͷ։ൃ࣌ؒͷ෼ɺૣ͘ؼͬͯ৸Δ ͜Ε͔ΒԿ౓΋࢖͏ɺͱ͓͖ͬͯͷίʔυ͸ؤுͬͯຏ͘Ձ஋ ͕͋Δ 12 / 33

Slide 23

Slide 23 text

֨ݴू Donald Knuth ࣌ظঘૣͳ࠷దԽ͸ॾѱͷࠜݯͰ͋Δ Michael A. Jackson ࠷దԽͷୈҰ๏ଇ ࠷దԽ͢Δͳɻ ࠷దԽͷୈೋ๏ଇ ·ͩ͢Δͳɻ ʢ্ڃऀݶఆʣ ͔ͩΒͱ͍ͬͯɺ໌Β͔ʹμϝͳίʔυΛ์ஔ͍ͯͯ͠΋ྑ͍ Θ͚͡Όͳ͍ ࣌ؒΛ͔͚ͯͻͶͬͨίʔυΛ࢈Έग़ͯ͠·Ͱʮ࠷దԽʯ͢Δ ͷ͸ޙʹ͠Ζͱ͍͏͜ͱ Knuth ઌੜ΋͜ͷޙ͙͢ʹʮͦΕͰ΋ɺΫϦςΟΧϧͳ 3%͸ݟಀ͢ͳʯͱݴ͍ͬͯΔ͠ ͔ͤͬ͘ Julia ͪΌΜΛ࢖͏Μ͔ͩΒɺͦͷ଎౓ΛҾ͖ग़ͯ͠ ͋͛Α͏ʂ 13 / 33

Slide 24

Slide 24 text

֨ݴू Donald Knuth ࣌ظঘૣͳ࠷దԽ͸ॾѱͷࠜݯͰ͋Δ Michael A. Jackson ࠷దԽͷୈҰ๏ଇ ࠷దԽ͢Δͳɻ ࠷దԽͷୈೋ๏ଇ ·ͩ͢Δͳɻ ʢ্ڃऀݶఆʣ ͔ͩΒͱ͍ͬͯɺ໌Β͔ʹμϝͳίʔυΛ์ஔ͍ͯͯ͠΋ྑ͍ Θ͚͡Όͳ͍ ࣌ؒΛ͔͚ͯͻͶͬͨίʔυΛ࢈Έग़ͯ͠·Ͱʮ࠷దԽʯ͢Δ ͷ͸ޙʹ͠Ζͱ͍͏͜ͱ Knuth ઌੜ΋͜ͷޙ͙͢ʹʮͦΕͰ΋ɺΫϦςΟΧϧͳ 3%͸ݟಀ͢ͳʯͱݴ͍ͬͯΔ͠ ͔ͤͬ͘ Julia ͪΌΜΛ࢖͏Μ͔ͩΒɺͦͷ଎౓ΛҾ͖ग़ͯ͠ ͋͛Α͏ʂ 13 / 33

Slide 25

Slide 25 text

֨ݴू Donald Knuth ࣌ظঘૣͳ࠷దԽ͸ॾѱͷࠜݯͰ͋Δ Michael A. Jackson ࠷దԽͷୈҰ๏ଇ ࠷దԽ͢Δͳɻ ࠷దԽͷୈೋ๏ଇ ·ͩ͢Δͳɻ ʢ্ڃऀݶఆʣ ͔ͩΒͱ͍ͬͯɺ໌Β͔ʹμϝͳίʔυΛ์ஔ͍ͯͯ͠΋ྑ͍ Θ͚͡Όͳ͍ ࣌ؒΛ͔͚ͯͻͶͬͨίʔυΛ࢈Έग़ͯ͠·Ͱʮ࠷దԽʯ͢Δ ͷ͸ޙʹ͠Ζͱ͍͏͜ͱ Knuth ઌੜ΋͜ͷޙ͙͢ʹʮͦΕͰ΋ɺΫϦςΟΧϧͳ 3%͸ݟಀ͢ͳʯͱݴ͍ͬͯΔ͠ ͔ͤͬ͘ Julia ͪΌΜΛ࢖͏Μ͔ͩΒɺͦͷ଎౓ΛҾ͖ग़ͯ͠ ͋͛Α͏ʂ 13 / 33

Slide 26

Slide 26 text

֨ݴू Donald Knuth ࣌ظঘૣͳ࠷దԽ͸ॾѱͷࠜݯͰ͋Δ Michael A. Jackson ࠷దԽͷୈҰ๏ଇ ࠷దԽ͢Δͳɻ ࠷దԽͷୈೋ๏ଇ ·ͩ͢Δͳɻ ʢ্ڃऀݶఆʣ ͔ͩΒͱ͍ͬͯɺ໌Β͔ʹμϝͳίʔυΛ์ஔ͍ͯͯ͠΋ྑ͍ Θ͚͡Όͳ͍ ࣌ؒΛ͔͚ͯͻͶͬͨίʔυΛ࢈Έग़ͯ͠·Ͱʮ࠷దԽʯ͢Δ ͷ͸ޙʹ͠Ζͱ͍͏͜ͱ Knuth ઌੜ΋͜ͷޙ͙͢ʹʮͦΕͰ΋ɺΫϦςΟΧϧͳ 3%͸ݟಀ͢ͳʯͱݴ͍ͬͯΔ͠ ͔ͤͬ͘ Julia ͪΌΜΛ࢖͏Μ͔ͩΒɺͦͷ଎౓ΛҾ͖ग़ͯ͠ ͋͛Α͏ʂ 13 / 33

Slide 27

Slide 27 text

֨ݴू Donald Knuth ࣌ظঘૣͳ࠷దԽ͸ॾѱͷࠜݯͰ͋Δ Michael A. Jackson ࠷దԽͷୈҰ๏ଇ ࠷దԽ͢Δͳɻ ࠷దԽͷୈೋ๏ଇ ·ͩ͢Δͳɻ ʢ্ڃऀݶఆʣ ͔ͩΒͱ͍ͬͯɺ໌Β͔ʹμϝͳίʔυΛ์ஔ͍ͯͯ͠΋ྑ͍ Θ͚͡Όͳ͍ ࣌ؒΛ͔͚ͯͻͶͬͨίʔυΛ࢈Έग़ͯ͠·Ͱʮ࠷దԽʯ͢Δ ͷ͸ޙʹ͠Ζͱ͍͏͜ͱ Knuth ઌੜ΋͜ͷޙ͙͢ʹʮͦΕͰ΋ɺΫϦςΟΧϧͳ 3%͸ݟಀ͢ͳʯͱݴ͍ͬͯΔ͠ ͔ͤͬ͘ Julia ͪΌΜΛ࢖͏Μ͔ͩΒɺͦͷ଎౓ΛҾ͖ग़ͯ͠ ͋͛Α͏ʂ 13 / 33

Slide 28

Slide 28 text

֨ݴू Donald Knuth ࣌ظঘૣͳ࠷దԽ͸ॾѱͷࠜݯͰ͋Δ Michael A. Jackson ࠷దԽͷୈҰ๏ଇ ࠷దԽ͢Δͳɻ ࠷దԽͷୈೋ๏ଇ ·ͩ͢Δͳɻ ʢ্ڃऀݶఆʣ ͔ͩΒͱ͍ͬͯɺ໌Β͔ʹμϝͳίʔυΛ์ஔ͍ͯͯ͠΋ྑ͍ Θ͚͡Όͳ͍ ࣌ؒΛ͔͚ͯͻͶͬͨίʔυΛ࢈Έग़ͯ͠·Ͱʮ࠷దԽʯ͢Δ ͷ͸ޙʹ͠Ζͱ͍͏͜ͱ Knuth ઌੜ΋͜ͷޙ͙͢ʹʮͦΕͰ΋ɺΫϦςΟΧϧͳ 3%͸ݟಀ͢ͳʯͱݴ͍ͬͯΔ͠ ͔ͤͬ͘ Julia ͪΌΜΛ࢖͏Μ͔ͩΒɺͦͷ଎౓ΛҾ͖ग़ͯ͠ ͋͛Α͏ʂ 13 / 33

Slide 29

Slide 29 text

֨ݴू Donald Knuth ࣌ظঘૣͳ࠷దԽ͸ॾѱͷࠜݯͰ͋Δ Michael A. Jackson ࠷దԽͷୈҰ๏ଇ ࠷దԽ͢Δͳɻ ࠷దԽͷୈೋ๏ଇ ·ͩ͢Δͳɻ ʢ্ڃऀݶఆʣ ͔ͩΒͱ͍ͬͯɺ໌Β͔ʹμϝͳίʔυΛ์ஔ͍ͯͯ͠΋ྑ͍ Θ͚͡Όͳ͍ ࣌ؒΛ͔͚ͯͻͶͬͨίʔυΛ࢈Έग़ͯ͠·Ͱʮ࠷దԽʯ͢Δ ͷ͸ޙʹ͠Ζͱ͍͏͜ͱ Knuth ઌੜ΋͜ͷޙ͙͢ʹʮͦΕͰ΋ɺΫϦςΟΧϧͳ 3%͸ݟಀ͢ͳʯͱݴ͍ͬͯΔ͠ ͔ͤͬ͘ Julia ͪΌΜΛ࢖͏Μ͔ͩΒɺͦͷ଎౓ΛҾ͖ग़ͯ͠ ͋͛Α͏ʂ 13 / 33

Slide 30

Slide 30 text

֨ݴू Donald Knuth ࣌ظঘૣͳ࠷దԽ͸ॾѱͷࠜݯͰ͋Δ Michael A. Jackson ࠷దԽͷୈҰ๏ଇ ࠷దԽ͢Δͳɻ ࠷దԽͷୈೋ๏ଇ ·ͩ͢Δͳɻ ʢ্ڃऀݶఆʣ ͔ͩΒͱ͍ͬͯɺ໌Β͔ʹμϝͳίʔυΛ์ஔ͍ͯͯ͠΋ྑ͍ Θ͚͡Όͳ͍ ࣌ؒΛ͔͚ͯͻͶͬͨίʔυΛ࢈Έग़ͯ͠·Ͱʮ࠷దԽʯ͢Δ ͷ͸ޙʹ͠Ζͱ͍͏͜ͱ Knuth ઌੜ΋͜ͷޙ͙͢ʹʮͦΕͰ΋ɺΫϦςΟΧϧͳ 3%͸ݟಀ͢ͳʯͱݴ͍ͬͯΔ͠ ͔ͤͬ͘ Julia ͪΌΜΛ࢖͏Μ͔ͩΒɺͦͷ଎౓ΛҾ͖ग़ͯ͠ ͋͛Α͏ʂ 13 / 33

Slide 31

Slide 31 text

Ұൠతͳ࠷దԽͷ΍Γ͔ͨ େલఏͱͯ͠ɺਖ਼͘͠ಈ͘ϓϩάϥϜʢςετ΍ཁٻ࢓༷ͳͲʹద ߹͢ΔʣΛॻ্͖͛Δ 1 ϓϩϑΝΠϥͰϗοτεϙοτΛ୳͢ େ఍༧૝֎ͷͱ͜Ζʹ͋ΔͷͰπʔϧΛ࢖͏͜ͱ શମతʹಉ͙͡Β͍஗͍ͱ͖͸ఘΊΑ͏ 2 νϡʔχϯάΛࢼΈΔ ΞϧΰϦζϜΛม͑Δ ϥΠϒϥϦ΍ؔ਺Λม͑Δ ίϯύΠϥ΍ϋʔυ΢ΣΞͷؾ࣋ͪʹͳͬͯߟ͑Δ ܭࢉػ༷͕ؾ࣋ͪΑ͘࢓ࣄͰ͖ΔΑ͏ͳίʔυΛॻ͘ 3 ςετΛߦͬͯɺΤϯόά͍ͯ͠ͳ͍͜ͱΛ͔֬ΊΔ 4 ࣌ؒΛଌͬͯޮՌΛ֬ೝ͢Δ 5 ଥڠͰ͖Δͱ͜Ζ·Ͱ܁Γฦ͢ 14 / 33

Slide 32

Slide 32 text

Ұൠతͳ࠷దԽͷ΍Γ͔ͨ େલఏͱͯ͠ɺਖ਼͘͠ಈ͘ϓϩάϥϜʢςετ΍ཁٻ࢓༷ͳͲʹద ߹͢ΔʣΛॻ্͖͛Δ 1 ϓϩϑΝΠϥͰϗοτεϙοτΛ୳͢ େ఍༧૝֎ͷͱ͜Ζʹ͋ΔͷͰπʔϧΛ࢖͏͜ͱ શମతʹಉ͙͡Β͍஗͍ͱ͖͸ఘΊΑ͏ 2 νϡʔχϯάΛࢼΈΔ ΞϧΰϦζϜΛม͑Δ ϥΠϒϥϦ΍ؔ਺Λม͑Δ ίϯύΠϥ΍ϋʔυ΢ΣΞͷؾ࣋ͪʹͳͬͯߟ͑Δ ܭࢉػ༷͕ؾ࣋ͪΑ͘࢓ࣄͰ͖ΔΑ͏ͳίʔυΛॻ͘ 3 ςετΛߦͬͯɺΤϯόά͍ͯ͠ͳ͍͜ͱΛ͔֬ΊΔ 4 ࣌ؒΛଌͬͯޮՌΛ֬ೝ͢Δ 5 ଥڠͰ͖Δͱ͜Ζ·Ͱ܁Γฦ͢ 14 / 33

Slide 33

Slide 33 text

Ұൠతͳ࠷దԽͷ΍Γ͔ͨ େલఏͱͯ͠ɺਖ਼͘͠ಈ͘ϓϩάϥϜʢςετ΍ཁٻ࢓༷ͳͲʹద ߹͢ΔʣΛॻ্͖͛Δ 1 ϓϩϑΝΠϥͰϗοτεϙοτΛ୳͢ େ఍༧૝֎ͷͱ͜Ζʹ͋ΔͷͰπʔϧΛ࢖͏͜ͱ શମతʹಉ͙͡Β͍஗͍ͱ͖͸ఘΊΑ͏ 2 νϡʔχϯάΛࢼΈΔ ΞϧΰϦζϜΛม͑Δ ϥΠϒϥϦ΍ؔ਺Λม͑Δ ίϯύΠϥ΍ϋʔυ΢ΣΞͷؾ࣋ͪʹͳͬͯߟ͑Δ ܭࢉػ༷͕ؾ࣋ͪΑ͘࢓ࣄͰ͖ΔΑ͏ͳίʔυΛॻ͘ 3 ςετΛߦͬͯɺΤϯόά͍ͯ͠ͳ͍͜ͱΛ͔֬ΊΔ 4 ࣌ؒΛଌͬͯޮՌΛ֬ೝ͢Δ 5 ଥڠͰ͖Δͱ͜Ζ·Ͱ܁Γฦ͢ 14 / 33

Slide 34

Slide 34 text

Ұൠతͳ࠷దԽͷ΍Γ͔ͨ େલఏͱͯ͠ɺਖ਼͘͠ಈ͘ϓϩάϥϜʢςετ΍ཁٻ࢓༷ͳͲʹద ߹͢ΔʣΛॻ্͖͛Δ 1 ϓϩϑΝΠϥͰϗοτεϙοτΛ୳͢ େ఍༧૝֎ͷͱ͜Ζʹ͋ΔͷͰπʔϧΛ࢖͏͜ͱ શମతʹಉ͙͡Β͍஗͍ͱ͖͸ఘΊΑ͏ 2 νϡʔχϯάΛࢼΈΔ ΞϧΰϦζϜΛม͑Δ ϥΠϒϥϦ΍ؔ਺Λม͑Δ ίϯύΠϥ΍ϋʔυ΢ΣΞͷؾ࣋ͪʹͳͬͯߟ͑Δ ܭࢉػ༷͕ؾ࣋ͪΑ͘࢓ࣄͰ͖ΔΑ͏ͳίʔυΛॻ͘ 3 ςετΛߦͬͯɺΤϯόά͍ͯ͠ͳ͍͜ͱΛ͔֬ΊΔ 4 ࣌ؒΛଌͬͯޮՌΛ֬ೝ͢Δ 5 ଥڠͰ͖Δͱ͜Ζ·Ͱ܁Γฦ͢ 14 / 33

Slide 35

Slide 35 text

Ұൠతͳ࠷దԽͷ΍Γ͔ͨ େલఏͱͯ͠ɺਖ਼͘͠ಈ͘ϓϩάϥϜʢςετ΍ཁٻ࢓༷ͳͲʹద ߹͢ΔʣΛॻ্͖͛Δ 1 ϓϩϑΝΠϥͰϗοτεϙοτΛ୳͢ େ఍༧૝֎ͷͱ͜Ζʹ͋ΔͷͰπʔϧΛ࢖͏͜ͱ શମతʹಉ͙͡Β͍஗͍ͱ͖͸ఘΊΑ͏ 2 νϡʔχϯάΛࢼΈΔ ΞϧΰϦζϜΛม͑Δ ϥΠϒϥϦ΍ؔ਺Λม͑Δ ίϯύΠϥ΍ϋʔυ΢ΣΞͷؾ࣋ͪʹͳͬͯߟ͑Δ ܭࢉػ༷͕ؾ࣋ͪΑ͘࢓ࣄͰ͖ΔΑ͏ͳίʔυΛॻ͘ 3 ςετΛߦͬͯɺΤϯόά͍ͯ͠ͳ͍͜ͱΛ͔֬ΊΔ 4 ࣌ؒΛଌͬͯޮՌΛ֬ೝ͢Δ 5 ଥڠͰ͖Δͱ͜Ζ·Ͱ܁Γฦ͢ 14 / 33

Slide 36

Slide 36 text

Ұൠతͳ࠷దԽͷ΍Γ͔ͨ େલఏͱͯ͠ɺਖ਼͘͠ಈ͘ϓϩάϥϜʢςετ΍ཁٻ࢓༷ͳͲʹద ߹͢ΔʣΛॻ্͖͛Δ 1 ϓϩϑΝΠϥͰϗοτεϙοτΛ୳͢ େ఍༧૝֎ͷͱ͜Ζʹ͋ΔͷͰπʔϧΛ࢖͏͜ͱ શମతʹಉ͙͡Β͍஗͍ͱ͖͸ఘΊΑ͏ 2 νϡʔχϯάΛࢼΈΔ ΞϧΰϦζϜΛม͑Δ ϥΠϒϥϦ΍ؔ਺Λม͑Δ ίϯύΠϥ΍ϋʔυ΢ΣΞͷؾ࣋ͪʹͳͬͯߟ͑Δ ܭࢉػ༷͕ؾ࣋ͪΑ͘࢓ࣄͰ͖ΔΑ͏ͳίʔυΛॻ͘ 3 ςετΛߦͬͯɺΤϯόά͍ͯ͠ͳ͍͜ͱΛ͔֬ΊΔ 4 ࣌ؒΛଌͬͯޮՌΛ֬ೝ͢Δ 5 ଥڠͰ͖Δͱ͜Ζ·Ͱ܁Γฦ͢ 14 / 33

Slide 37

Slide 37 text

Julia ʹ͓͚Δੑೳଌఆπʔϧ ҎԼ Base ௚Լʹ͋Δඪ४πʔϧ ࣌ؒɾϝϞϦ྆༻ @time / @timed ࣌ؒ @elapsed tic / toc / toq time_ns ϝϞϦ @allocated ϓϩϑΝΠϥ Profile Ϟδϡʔϧ --track-allocation=user 15 / 33

Slide 38

Slide 38 text

࣌ؒɾϝϞϦଌఆπʔϧ @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

Slide 39

Slide 39 text

࣌ؒଌఆπʔϧ @elapsed(ex) ࣜ ex Λ࣮ߦ͠ɺ͔͔ͬͨ࣌ؒΛඵ୯ҐͰฦ͢ ex ͷ஋ͦͷ΋ͷ͸ฦ͞ͳ͍ʢ࢓༷ʣ 1 julia > @elapsed sum(ones (1 < <24)) 2 0.09623339 # ฦ Γ ஋ 17 / 33

Slide 40

Slide 40 text

࣌ؒଌఆπʔϧ 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

Slide 41

Slide 41 text

࣌ؒଌఆπʔϧ time_ns ݱࡏ࣌ࠁΛφϊඵ୯ҐͰฦ͢ ฦΓ஋ͷܕ͸ UInt64 ͜͜·Ͱ঺հͨؔ͠਺ɾϚΫϩ͸಺෦Ͱ͜ΕΛݺͿ θϩ఺͕۩ମతʹͲ͔͜͸ఆΊΒΕ͍ͯͳ͍ 5.8 ೥पظͰΦʔόʔϑϩʔ͢ΔͨΊ 1 julia > time_ns () 2 0 x0000a44ebf7ad040 3 4 julia > (time_ns () - ans )/1e9 5 1.728456695 19 / 33

Slide 42

Slide 42 text

ϝϞϦଌఆπʔϧ @allocated(ex) ࣜ ex Λ࣮ߦ͠ɺͦͷؒʹ֬อͨ͠ϝϞϦΛ Byte ୯ҐͰฦ͢ ex ͷ஋ͦͷ΋ͷ͸ฦ͞ͳ͍ʢ࢓༷ʣ @timed(ex) ͷϝϞϦ൛ 1 julia > @allocated [1:1024] 2 8256 3 4 julia > @allocated [] 5 48 ۭ഑ྻΛ࡞Δ͚ͩͰ΋Φʔόʔϔου͕͋ΔͬΆ͍ 20 / 33

Slide 43

Slide 43 text

ϓϩϑΝΠϥ Base.Profile Ϟδϡʔϧ ౷ܭతϓϩϑΝΠϥ पظతʹ (ඪ४Ͱ͸ 1 ϛϦඵ) Ͳͷߦʹ͍Δͷ͔Λௐ΂Δ͜ͱ ͰɺͲ͜ͰͲͷ͘Β͍ͷ࣌ؒΛඅ΍ͨ͠ͷ͔Λௐ΂Δ όοΫτϨʔεΛݟ͍ͯΔͷͰɺͲͷؔ਺ݺͼग़͔͠Βݺ͹Ε ͍ͯΔͷ͔΋۠ผՄೳ 21 / 33

Slide 44

Slide 44 text

ϓϩϑΝΠϥ 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

Slide 45

Slide 45 text

ϓϩϑΝΠϥ 1 julia > prof () # ؔ ਺ ͷ J I T ί ϯ ύ Π ϧ 2 3 julia > Profile.clear () # Ҏ લ ʹ ଌ ఆ ͠ ͯ ͍ ͨ Β ফ ڈ ͠ ͯ ͓ ͘ 4 5 julia > @profile prof (200) # ଌ ఆ 23 / 33

Slide 46

Slide 46 text

ϓϩϑΝΠϥ 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

Slide 47

Slide 47 text

ϓϩϑΝΠϥ 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

Slide 48

Slide 48 text

ϓϩϑΝΠϥ 1 julia > open("prof.dat", "w") do io 2 Profile.print(io , col =500) 3 end println ͳͲͷΑ͏ʹɺୈҰҾ਺ʹ IO ܕΛऔΔ͜ͱͰϑΝΠ ϧॻ͖ग़͕͠Ͱ͖Δ ϑΝΠϧʹॻ͖ग़͔ͯ͠Β sort -n ΍ grep Λ͢Δͷ͕ศར col ΦϓγϣϯҾ਺͸ɺग़ྗϑΝΠϧͷ࠷େจࣈ෯਺Λࢦఆ ͢Δ ग़ྗจࣈ਺͕௒ա͢ΔͱɺϑΝΠϧ໊ͳͲ͕੾Γ٧ΊΒΕΔͷ ͰͰ͖Δ͚ͩେ͖͍஋Λࢦఆ͓ͯ͘͠ͱྑ͍ 26 / 33

Slide 49

Slide 49 text

ϓϩϑΝΠϥ ProfileView.jl Base.Profile ͷՄࢹԽπʔϧ ԣ͕࣠Χ΢ϯτɺॎ͕࣠ؔ਺ݺͼग़͠ͷਂ͞ Ϛ΢εΦʔόʔͰϑΝΠϧ໊ɾؔ਺໊ͳͲ͕දࣔ͞ΕΔ IProfile.jl instrumenting profiler ೔ຊޠͩͱͳΜͯݴ͏ΜͩΖ͏ʁ gprof Έ͍ͨʹεΫϦϓτ΍࣮ߦϑΝΠϧʹϓϩϑΝΠϧ༻ ίʔυΛຒΊࠐΜͰɺΑΓਫ਼ີʹௐ΂ΔϓϩϑΝΠϥ ࠓճͪΐͬͱௐ͕ࠪ࣌ؒͳ্͔ͬͨʹɺࣗ෼ͷιʔεʹ࢖ͬͨ ΒམͪͨͷͰͲΜͳײ͔͡Α͘Θ͔Γ·ͤΜʜʜ 27 / 33

Slide 50

Slide 50 text

ϝϞϦνΣοΫ --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

Slide 51

Slide 51 text

νϡʔχϯάʹ໾ཱ͔ͭ΋͠Εͳ͍πʔϧͱ͔ ެࣜυΩϡϝϯτͷ “Performance Tips” JuliaTokyo#1 Ͱͷؔ͞ΜͷൃදࢿྉͰ͸࣮ࡍʹ଎౓ͷଌఆΛ ͍ͯ͠·͢ Tips ΍঺հπʔϧ͕࣌ʑͬͦ͜ΓͱՃච͞ΕΔ --track-allocation ͱ͔͓ͱͱ͍ॳΊͯ஌ͬͨ @inbounds ഑ྻͷڥքνΣοΫΛ੾ΔϚΫϩ ීஈ͸ڥքνΣοΫʹࣦഊ͢Δͱ BoundsError ྫ֎͕ඈͿ --check-bounds={yes|no} ͱ͍͏ΦϓγϣϯͰɺϚΫϩΛແ ࢹͯ͠νΣοΫΛڧ੍͢Δ͜ͱ΋ɺٯʹ׬શʹνΣοΫΛ֎͢ ͜ͱ΋Մೳ 29 / 33

Slide 52

Slide 52 text

νϡʔχϯάʹ໾ཱ͔ͭ΋͠Εͳ͍πʔϧͱ͔ @simd ϧʔϓͷ SIMD / ϕΫτϧฒྻԽ ࠷಺ϧʔϓͷΈ࢖͑Δ @inbounds ͱ૊Έ߹ΘͤΔඞཁ͕͋Δ ଞʹ΋৭ʑͳ৚݅ʢԾఆʣ͕ඞཁ͕ͩɺ͏·͘ϋϚΕ͹ૣ͘ͳΔ ୯७ͳϧʔϓͷ৔߹͸ͦ΋ͦ΋ LLVM ͕ࣗಈͰ΍ͬͯ͘ΕΔ @parallel for / pmap for ͓Αͼ map ͷϓϩηεฒྻԽ Julia ͷฒྻॲཧͷதͰ͸Ұ൪୯७Ͱ࢖͍΍͍͢ sfchaos ͞ΜͷൃදͰղઆ͕͋Δ͸ͣʜʜ @inline v0.4-dev Ͱొ৔ @inline ͨؔ͠਺Λݺͼग़ؔ͢਺ΛίϯύΠϧͨ࣌͠ʹɺ಺ଆ ͷؔ਺ΛΠϯϥΠϯల։͢Δ Ϟδϡʔϧͷ࠷֎είʔϓ΍ॳճݺͼग़͠ͳͲɺίϯύΠϧͰ ͖͍ͯͳ͍৔ॴ͔ΒݺͿ৔߹ɺٯʹΦʔόʔϔου͕ൃੜ͢Δ 30 / 33

Slide 53

Slide 53 text

νϡʔχϯάʹ໾ཱ͔ͭ΋͠Εͳ͍πʔϧͱ͔ NumericExtensions.jl Base.map ΍ͦͷҰ೿Λ֦ுɾߴ଎Խ͢Δύοέʔδ NumericFuns.jl ؚΊɺ਺஋ܭࢉ͢Δਓʹ͸ਆύοέʔδ νϡʔχϯά࣮ྫͰ΋࢖͍·͢ʢ͕࣌ؒ͋Ε͹΍Δʣ NumericFuns.jl ਺஋ܭࢉͰ࢖͏͚ΕͲඪ४ʹೖ͍ͬͯͳ͍ؔ਺ͳͲ C++ Ͱ͍͏ͱ͜Ζͷؔ਺ΦϒδΣΫτͷΑ͏ͳ΋ͷͷఆٛ ͨͱ͑͹ଟม਺ؔ਺Λແ໊ؔ਺Λ࢖ΘͣʹҰม਺ؔ਺ʢͷΑ͏ͳ ΋ͷʣʹͰ͖Δ ؔ਺Ͱ͸ͳ͍ͷͰɺؔ਺ద༻͸ NumericFuns.evaluate(f,args...) ͱ͍͏ผͷؔ਺ʹͳͬͯ ͍Δ ແ໊ؔ਺ͱҧ͍ɺNumericFuns.evaluate ʹؔͯ͠ JIT ίϯύ Πϧ͕ಇ͘Α͏ʹͳΔͷͰɺಛʹ NumericExtensions.map ͳ Ͳͷߴ֊ؔ਺ͱ૊Έ߹ΘͤΔͱ͔ͳΓߴ଎Խ͞ΕΔ @inline ͱͷ૊Έ߹ΘͤͳͲ΋ྑͦ͞͏ ݩʑ͸ NumericExtensions.jl ͷαϒϞδϡʔϧ͕ͩͬͨಠ ཱͨ͠ 31 / 33

Slide 54

Slide 54 text

νϡʔχϯά࣮ྫ 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

Slide 55

Slide 55 text

·ͱΊ Julia ͷιʔείʔυΛվળ͢ΔͨΊͷπʔϧΛௐ΂ͯΈͨ ࢥͬͨΑΓͨ͘͞Μ͋ͬͨͷͰɺ·ͩ·ͩ఻͖͑Ε͍ͯͳ͍ ͦ΋ͦ΋ௐ΂͖Ε͍ͯͳ͍͆ πʔϧͷ΄ͱΜͲ͕ Julia ͷதͰ׬͍݁ͯ͠Δ Julia ϓϩάϥϜ͕ಡΊΕ͹ݪཧతʹ͸શ෦ಡΊΔ ୭͔ macro ߨ࠲ΛͰ͢Ͷʜʜ ެࣜυΩϡϝϯτɺͱͯ΋େࣄ ಡΜͩͭ΋Γͷ߲໨ʹ௥ه͕ͳ͞ΕΔͷͰ͍ͭ·ͰͰ΋ಡΜͰ ͍ΒΕΔ ͙͢ʹߋ৽͞ΕΔ͔Β຋༁͸͋Μ·Γਪ঑͞Εͳ͍͆ Base.@show ͱ NumericExtensions.jl ͸ਆ 33 / 33