Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Julia 開発の道具箱(チューニング編)

Avatar for Yuichi Motoyama Yuichi Motoyama
September 27, 2014

Julia 開発の道具箱(チューニング編)

Avatar for Yuichi Motoyama

Yuichi Motoyama

September 27, 2014
Tweet

Other Decks in Programming

Transcript

  1. Julia ։ൃͷಓ۩ശʢνϡʔχϯάฤʣ Yuichi Motoyama (yomichi) Institute for Solid State Physics,

    Univ. of Tokyo JuliaTokyo #2 2014/09/27 εϥΠυͱαϯϓϧίʔυ https://github.com/yomichi/JuliaTokyo2 1 / 33
  2. ࣗݾ঺հ HN : ໷ಓ, yomichi twitter : @yomichi_137 Ά͢Ͳ͍ͪ͘ͶΜ͍ͤ ౷ܭ෺ཧֶɾܭࢉ෺ཧֶ

    ओʹϞϯςΧϧϩ๏ͱ͔ہࡏεϐϯܥͱ͔ Πϕϯτʢษڧձʣ࣮گ੎ ࠷ۙͩͱશή࿈ʢಉਓήʔϜ։ൃʣͱ͔ɺ PyConJP ͱ͔ɺJuliaTokyo ͱ͔ ࣗ෼Ͱࣗ෼ͷൃද͸࣮گͰ͖ͳ͍ͷ͕ͭΒ͍ Julia nightly build ੎ Julia ͷ։ൃ؀ڥ͸ REPL ͱ Vim ڈ೥ͷՆίϛɾౙίϛͰ Julia ຊग़ͯ͠·ͨ͠ blog ͱ͔కΊ੾Γ͕ͳ͍ͷͰॻ͚·ͤΜʼʻ நબड͔͍ͬͯͨΒ࣍ͷౙʹ΋ग़͠·͢ (thanks @am_11) 2 / 33
  3. σόοά༻πʔϧ 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
  4. σόοά༻πʔϧ Debug.jl ର࿩ܕσόοΨ εςοϓ࣮ߦ΍ม਺ࢀরͳͲͦΕͳΓʹग़དྷΔ σόοά͍ͨ͠ϒϩοΫʹ༧Ί@debug Λ͚͓ͭͯ͘ ϒϨʔΫϙΠϯτΛ༧Ί෇͚͍ͨ৔߹@bp Λ͚͓ͭͯ͘ gdb ؚΊ͋Μ·Γ࢖͍ͬͯͳ͍ͷͰͳΜͱ΋ʜʜ

    Logging.jl ϩάه࿥༻πʔϧ ϩά৘ใʹϨϕϧΛ෇༩͢Δ͜ͱ͕Ͱ͖Δ ࣮ߦϨϕϧΛม͑Δ͜ͱͰ࢒͢৘ใΛऔࣺબ୒Ͱ͖Δ SIUnits.jl ܕͷྗͰόάΛ๷͙͜ͱΛ໨ࢦ͢ύοέʔδͷͻͱͭ ͍ΘΏΔ࣍ݩղੳ ྫ͑͹࣭ྔͱ௕͞͸ɺී௨ͷϓϩάϥϛϯάͰ͸ͱ΋ʹී௨ͷ࣮ ਺ͱͯ͠දݱ͞ΕΔ͕ɺຊ࣭తʹ͸ผ෺ Ճݮ͸ڐ͞Εͳ͍͕৐আ͸ڐ͞Εɺ͞Βʹ৽ͨͳ୯ҐΛ࡞Δ ଎౓ɾϝϞϦ্ͷΦʔόʔϔου΋ແ͍ ࣮ࡍʹ࢖͏ʹ͸ɺSI ୯ҐܥΛڧ੍͞ΕΔͷͰਖ਼௚ځ۶ʜʜ 7 / 33
  5. ϦϑΝΫλϦϯά༻πʔϧ 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
  6. νϡʔχϯάʁͳʹͦΕ͓͍͍͠ͷʁ ϓϩάϥϜࣗମͷੑೳ࠷దԽ ͳʹΛ࠷దԽ͍ͨ͠ͷ͔ߟ͑ͯ͋Γ·͔͢ʁ େ఍͸ܭࢉ࣌ؒͷ࠷খԽ͔ɺཁٻϝϞϦͷ࠷খԽ ϦϑΝΫλϦϯά΋อकੑͷ࠷దԽͱݴ͑ͳ͘΋ͳ͍ ͦ΋ͦ΋໰୊ʢཁٻʣʹରͯ͠ਖ਼͍͠౴͑Λฦ͢ϓϩάϥϜ͸ ॻ͚·͔ͨ͠ʁ ؒҧͬͨίʔυΛνϡʔχϯάͯ͠΋ਖ਼͘͠ͳΔ͜ͱ͸·ͣແ͍ ࠷దԽʹ΋ίετɾϦιʔε͕ඞཁ ͋ͳͨͷ΍Γ͍ͨ͜ͱɺຊ౰ʹׂʹ߹͍·͔͢ʁ

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

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

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

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

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

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

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

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

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

    Θ͟Θ͟େ੾ͳ࣌ؒΛඅ΍͠ɺอकੑΛԼ͛ͯ·Ͱ΍Δඞཁ͸ ͋Γ·͔͢ʁ ଞʹ΍Δ͜ͱ͸ͳ͍ͷͰ͔͢ʁ ͦͷ։ൃ࣌ؒΛ࢖ͬͯ৽ػೳΛ௥Ճ͢Δ ͦͷ։ൃ࣌ؒΛܭࢉ࣌ؒͦͷ΋ͷʹॆͯΔ ͦͷ։ൃ࣌ؒͷ෼ɺૣ͘ؼͬͯ৸Δ ͜Ε͔ΒԿ౓΋࢖͏ɺͱ͓͖ͬͯͷίʔυ͸ؤுͬͯຏ͘Ձ஋ ͕͋Δ 12 / 33
  16. ֨ݴू Donald Knuth ࣌ظঘૣͳ࠷దԽ͸ॾѱͷࠜݯͰ͋Δ Michael A. Jackson ࠷దԽͷୈҰ๏ଇ ࠷దԽ͢Δͳɻ ࠷దԽͷୈೋ๏ଇ

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

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

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

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

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

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

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

    ·ͩ͢Δͳɻ ʢ্ڃऀݶఆʣ ͔ͩΒͱ͍ͬͯɺ໌Β͔ʹμϝͳίʔυΛ์ஔ͍ͯͯ͠΋ྑ͍ Θ͚͡Όͳ͍ ࣌ؒΛ͔͚ͯͻͶͬͨίʔυΛ࢈Έग़ͯ͠·Ͱʮ࠷దԽʯ͢Δ ͷ͸ޙʹ͠Ζͱ͍͏͜ͱ Knuth ઌੜ΋͜ͷޙ͙͢ʹʮͦΕͰ΋ɺΫϦςΟΧϧͳ 3%͸ݟಀ͢ͳʯͱݴ͍ͬͯΔ͠ ͔ͤͬ͘ Julia ͪΌΜΛ࢖͏Μ͔ͩΒɺͦͷ଎౓ΛҾ͖ग़ͯ͠ ͋͛Α͏ʂ 13 / 33
  24. Ұൠతͳ࠷దԽͷ΍Γ͔ͨ େલఏͱͯ͠ɺਖ਼͘͠ಈ͘ϓϩάϥϜʢςετ΍ཁٻ࢓༷ͳͲʹద ߹͢ΔʣΛॻ্͖͛Δ 1 ϓϩϑΝΠϥͰϗοτεϙοτΛ୳͢ େ఍༧૝֎ͷͱ͜Ζʹ͋ΔͷͰπʔϧΛ࢖͏͜ͱ શମతʹಉ͙͡Β͍஗͍ͱ͖͸ఘΊΑ͏ 2 νϡʔχϯάΛࢼΈΔ ΞϧΰϦζϜΛม͑Δ

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

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

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

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

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

    ϥΠϒϥϦ΍ؔ਺Λม͑Δ ίϯύΠϥ΍ϋʔυ΢ΣΞͷؾ࣋ͪʹͳͬͯߟ͑Δ ܭࢉػ༷͕ؾ࣋ͪΑ͘࢓ࣄͰ͖ΔΑ͏ͳίʔυΛॻ͘ 3 ςετΛߦͬͯɺΤϯόά͍ͯ͠ͳ͍͜ͱΛ͔֬ΊΔ 4 ࣌ؒΛଌͬͯޮՌΛ֬ೝ͢Δ 5 ଥڠͰ͖Δͱ͜Ζ·Ͱ܁Γฦ͢ 14 / 33
  30. Julia ʹ͓͚Δੑೳଌఆπʔϧ ҎԼ Base ௚Լʹ͋Δඪ४πʔϧ ࣌ؒɾϝϞϦ྆༻ @time / @timed ࣌ؒ

    @elapsed tic / toc / toq time_ns ϝϞϦ @allocated ϓϩϑΝΠϥ Profile Ϟδϡʔϧ --track-allocation=user 15 / 33
  31. ࣌ؒɾϝϞϦଌఆπʔϧ @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
  32. ࣌ؒଌఆπʔϧ 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
  33. ϝϞϦଌఆπʔϧ @allocated(ex) ࣜ ex Λ࣮ߦ͠ɺͦͷؒʹ֬อͨ͠ϝϞϦΛ Byte ୯ҐͰฦ͢ ex ͷ஋ͦͷ΋ͷ͸ฦ͞ͳ͍ʢ࢓༷ʣ @timed(ex)

    ͷϝϞϦ൛ 1 julia > @allocated [1:1024] 2 8256 3 4 julia > @allocated [] 5 48 ۭ഑ྻΛ࡞Δ͚ͩͰ΋Φʔόʔϔου͕͋ΔͬΆ͍ 20 / 33
  34. ϓϩϑΝΠϥ 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
  35. ϓϩϑΝΠϥ 1 julia > prof () # ؔ ਺ ͷ

    J I T ί ϯ ύ Π ϧ 2 3 julia > Profile.clear () # Ҏ લ ʹ ଌ ఆ ͠ ͯ ͍ ͨ Β ফ ڈ ͠ ͯ ͓ ͘ 4 5 julia > @profile prof (200) # ଌ ఆ 23 / 33
  36. ϓϩϑΝΠϥ 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
  37. ϓϩϑΝΠϥ 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
  38. ϓϩϑΝΠϥ 1 julia > open("prof.dat", "w") do io 2 Profile.print(io

    , col =500) 3 end println ͳͲͷΑ͏ʹɺୈҰҾ਺ʹ IO ܕΛऔΔ͜ͱͰϑΝΠ ϧॻ͖ग़͕͠Ͱ͖Δ ϑΝΠϧʹॻ͖ग़͔ͯ͠Β sort -n ΍ grep Λ͢Δͷ͕ศར col ΦϓγϣϯҾ਺͸ɺग़ྗϑΝΠϧͷ࠷େจࣈ෯਺Λࢦఆ ͢Δ ग़ྗจࣈ਺͕௒ա͢ΔͱɺϑΝΠϧ໊ͳͲ͕੾Γ٧ΊΒΕΔͷ ͰͰ͖Δ͚ͩେ͖͍஋Λࢦఆ͓ͯ͘͠ͱྑ͍ 26 / 33
  39. ϓϩϑΝΠϥ ProfileView.jl Base.Profile ͷՄࢹԽπʔϧ ԣ͕࣠Χ΢ϯτɺॎ͕࣠ؔ਺ݺͼग़͠ͷਂ͞ Ϛ΢εΦʔόʔͰϑΝΠϧ໊ɾؔ਺໊ͳͲ͕දࣔ͞ΕΔ IProfile.jl instrumenting profiler ೔ຊޠͩͱͳΜͯݴ͏ΜͩΖ͏ʁ

    gprof Έ͍ͨʹεΫϦϓτ΍࣮ߦϑΝΠϧʹϓϩϑΝΠϧ༻ ίʔυΛຒΊࠐΜͰɺΑΓਫ਼ີʹௐ΂ΔϓϩϑΝΠϥ ࠓճͪΐͬͱௐ͕ࠪ࣌ؒͳ্͔ͬͨʹɺࣗ෼ͷιʔεʹ࢖ͬͨ ΒམͪͨͷͰͲΜͳײ͔͡Α͘Θ͔Γ·ͤΜʜʜ 27 / 33
  40. ϝϞϦνΣοΫ --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
  41. νϡʔχϯάʹ໾ཱ͔ͭ΋͠Εͳ͍πʔϧͱ͔ ެࣜυΩϡϝϯτͷ “Performance Tips” JuliaTokyo#1 Ͱͷؔ͞ΜͷൃදࢿྉͰ͸࣮ࡍʹ଎౓ͷଌఆΛ ͍ͯ͠·͢ Tips ΍঺հπʔϧ͕࣌ʑͬͦ͜ΓͱՃච͞ΕΔ --track-allocation

    ͱ͔͓ͱͱ͍ॳΊͯ஌ͬͨ @inbounds ഑ྻͷڥքνΣοΫΛ੾ΔϚΫϩ ීஈ͸ڥքνΣοΫʹࣦഊ͢Δͱ BoundsError ྫ֎͕ඈͿ --check-bounds={yes|no} ͱ͍͏ΦϓγϣϯͰɺϚΫϩΛແ ࢹͯ͠νΣοΫΛڧ੍͢Δ͜ͱ΋ɺٯʹ׬શʹνΣοΫΛ֎͢ ͜ͱ΋Մೳ 29 / 33
  42. νϡʔχϯάʹ໾ཱ͔ͭ΋͠Εͳ͍πʔϧͱ͔ @simd ϧʔϓͷ SIMD / ϕΫτϧฒྻԽ ࠷಺ϧʔϓͷΈ࢖͑Δ @inbounds ͱ૊Έ߹ΘͤΔඞཁ͕͋Δ ଞʹ΋৭ʑͳ৚݅ʢԾఆʣ͕ඞཁ͕ͩɺ͏·͘ϋϚΕ͹ૣ͘ͳΔ

    ୯७ͳϧʔϓͷ৔߹͸ͦ΋ͦ΋ LLVM ͕ࣗಈͰ΍ͬͯ͘ΕΔ @parallel for / pmap for ͓Αͼ map ͷϓϩηεฒྻԽ Julia ͷฒྻॲཧͷதͰ͸Ұ൪୯७Ͱ࢖͍΍͍͢ sfchaos ͞ΜͷൃදͰղઆ͕͋Δ͸ͣʜʜ @inline v0.4-dev Ͱొ৔ @inline ͨؔ͠਺Λݺͼग़ؔ͢਺ΛίϯύΠϧͨ࣌͠ʹɺ಺ଆ ͷؔ਺ΛΠϯϥΠϯల։͢Δ Ϟδϡʔϧͷ࠷֎είʔϓ΍ॳճݺͼग़͠ͳͲɺίϯύΠϧͰ ͖͍ͯͳ͍৔ॴ͔ΒݺͿ৔߹ɺٯʹΦʔόʔϔου͕ൃੜ͢Δ 30 / 33
  43. νϡʔχϯάʹ໾ཱ͔ͭ΋͠Εͳ͍πʔϧͱ͔ NumericExtensions.jl Base.map ΍ͦͷҰ೿Λ֦ுɾߴ଎Խ͢Δύοέʔδ NumericFuns.jl ؚΊɺ਺஋ܭࢉ͢Δਓʹ͸ਆύοέʔδ νϡʔχϯά࣮ྫͰ΋࢖͍·͢ʢ͕࣌ؒ͋Ε͹΍Δʣ NumericFuns.jl ਺஋ܭࢉͰ࢖͏͚ΕͲඪ४ʹೖ͍ͬͯͳ͍ؔ਺ͳͲ C++

    Ͱ͍͏ͱ͜Ζͷؔ਺ΦϒδΣΫτͷΑ͏ͳ΋ͷͷఆٛ ͨͱ͑͹ଟม਺ؔ਺Λແ໊ؔ਺Λ࢖ΘͣʹҰม਺ؔ਺ʢͷΑ͏ͳ ΋ͷʣʹͰ͖Δ ؔ਺Ͱ͸ͳ͍ͷͰɺؔ਺ద༻͸ NumericFuns.evaluate(f,args...) ͱ͍͏ผͷؔ਺ʹͳͬͯ ͍Δ ແ໊ؔ਺ͱҧ͍ɺNumericFuns.evaluate ʹؔͯ͠ JIT ίϯύ Πϧ͕ಇ͘Α͏ʹͳΔͷͰɺಛʹ NumericExtensions.map ͳ Ͳͷߴ֊ؔ਺ͱ૊Έ߹ΘͤΔͱ͔ͳΓߴ଎Խ͞ΕΔ @inline ͱͷ૊Έ߹ΘͤͳͲ΋ྑͦ͞͏ ݩʑ͸ NumericExtensions.jl ͷαϒϞδϡʔϧ͕ͩͬͨಠ ཱͨ͠ 31 / 33
  44. νϡʔχϯά࣮ྫ 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
  45. ·ͱΊ Julia ͷιʔείʔυΛվળ͢ΔͨΊͷπʔϧΛௐ΂ͯΈͨ ࢥͬͨΑΓͨ͘͞Μ͋ͬͨͷͰɺ·ͩ·ͩ఻͖͑Ε͍ͯͳ͍ ͦ΋ͦ΋ௐ΂͖Ε͍ͯͳ͍͆ πʔϧͷ΄ͱΜͲ͕ Julia ͷதͰ׬͍݁ͯ͠Δ Julia ϓϩάϥϜ͕ಡΊΕ͹ݪཧతʹ͸શ෦ಡΊΔ

    ୭͔ macro ߨ࠲ΛͰ͢Ͷʜʜ ެࣜυΩϡϝϯτɺͱͯ΋େࣄ ಡΜͩͭ΋Γͷ߲໨ʹ௥ه͕ͳ͞ΕΔͷͰ͍ͭ·ͰͰ΋ಡΜͰ ͍ΒΕΔ ͙͢ʹߋ৽͞ΕΔ͔Β຋༁͸͋Μ·Γਪ঑͞Εͳ͍͆ Base.@show ͱ NumericExtensions.jl ͸ਆ 33 / 33