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

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

Yuichi Motoyama
September 27, 2014

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

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