Slide 1

Slide 1 text

͋ͳͨ͸Ͳͬͪ೿ʁ

Slide 2

Slide 2 text

ςετษڧͰ… ˒ աڈ໰Λೖखͯ͠ରࡦ͢Δ ˒ ࢼݧൣғͷڭՊॻΛಡΉ

Slide 3

Slide 3 text

ςετษڧͰ… ˒ աڈ໰Λೖखͯ͠ରࡦ͢Δ ˒ YJIT ˒ ࢼݧൣғͷڭՊॻΛಡΉ ˒ ZJIT

Slide 4

Slide 4 text

YJITͱZJITʹ͸ ΠΧͳΔҧ͍͕͋Δͷ͔ʁ yamano

Slide 5

Slide 5 text

˒ yamano (@yamanaoRuby) ˒ େֶ 4 ೥ੜ ˒ RubyKaigi ͸ 2 ճ໨ About me

Slide 6

Slide 6 text

˒ ࣗ෼͕ཧղ͍ͯ͠ΔൣғͰ࿩͠·͢ ˒ ݶΒΕͨ࣋ͪ࣌ؒͷதͰɺΠϝʔδ͕఻ΘΔΑ͏ʹ ˒ RubyKaigi·ͰͷཧղͷҰॿʹ͍͚ͯͨͩ͠Ε͹ ˒ ؾʹͳͬͨ఺͕͋Ε͹ੋඇ͝ࢦఠ͍ͩ͘͞ ˒ Ճචमਖ਼ͯ͠هࣄʹ͢Δͭ΋ΓͰ͢ ͜ͷLTʹ͍ͭͯ

Slide 7

Slide 7 text

˒ Just-In-Time ͷུ ˒ ίʔυ಺ͰΑ࣮͘ߦ͞ΕΔܦ࿏ΛɺඞཁͳλΠϛϯάͰ ίϯύΠϧ͢Δ ˒ ͦ΋ͦ΋Ruby͸ΠϯλϓϦλܕͷݴޠ ˒ ίϯύΠϧܕͷ଎͞Λ෦෼తʹऔΓೖΕΔ What’s JIT?

Slide 8

Slide 8 text

࣮ߦ࣌ͷ৘ใΛ΋ͱʹɺ Α͘ݱΕΔέʔεʹ߹Θͤͯہॴతʹ࠷దԽ͢Δ $ ruby --yjit hoge.rb ͷΑ͏ͳܗͰݕূͰ͖Δ YJIT

Slide 9

Slide 9 text

YJIT

Slide 10

Slide 10 text

YJIT Yʮcount͕IntegerͰདྷΔࣄ͕ଟ͍ͳ…ʯ YʮInteger͕དྷΔલఏͰίϯύΠϧͯ͠ɺ ɹ ߴ଎ʹॲཧͰ͖ΔΑ͏ʹ͓ͯ͜͠͏ʂʯ

Slide 11

Slide 11 text

ϝιου୯ҐͰɺ಺෦Ͱѻ͍΍͍͢ܗʹ͔ͯ͠Β ˒ ஋ͷྲྀΕ ˒ ੍ޚϑϩʔ ͳͲͷ৘ใΛ΋ͱʹ࠷దԽ͢Δ $ ruby --zjit hoge.rb ͷΑ͏ͳܗͰݕূͰ͖Δ ZJIT

Slide 12

Slide 12 text

ZJIT

Slide 13

Slide 13 text

ZJIT ZʮશମΛݟͯΈΑ͏ʯ Zʮ΋͔ͯ͠͠ɺ ɹ ݁ہ͜Ε͸ count * 200 + 500 Ͱ͸ʁʯ ※ΠϝʔδͰ͢

Slide 14

Slide 14 text

ςετษڧͷͨͱ͑ ˒ YJIT ˒ աڈ໰ͰରࡦΛ͢ΔͱϐϯϙΠϯτʹֶश͢ΔͷͰૣ͍ ˒ ZJIT ˒ ڭՊॻΛಡΜͰରࡦΛ͢ΔͱΑΓ੔ཧ͞Εͨ஌ࣝʹͳΔ ͲͪΒ͕ྑ͍ͱ͍͏࿩Ͱ͸ͳ͘ɺಘҙͳํ޲ੑ͕ҧ͏

Slide 15

Slide 15 text

˒ ZJITͷதؒදݱΛΈͯΈΔ ˒ ΠϯλϓϦλͷΈɾYJITɾZJITͷ଎౓ൺֱ ͳͲΛߦͬͨ ͞ΘͬͯΈͨ

Slide 16

Slide 16 text

$ ruby --zjit --zjit-dump-hir-init total_price.rb $ ruby --zjit --zjit-dump-hir total_price.rb ˒ ઌఔͷ total_price ؔ਺Λෳ਺ճ࣮ߦ͢ΔίʔυͰݕূ ZJITͷதؒදݱ

Slide 17

Slide 17 text

˒ ࠷దԽલ v34:BasicObject = Send v16, :*, v23 v41:BasicObject = Send v34, :+, v27 Rubyͷϝιουݺͼग़͠Λ͍ͯ͠Δ ˒ ࠷దԽޙ v50:Fixnum = FixnumMult v49, v23 v53:Fixnum = FixnumAdd v50, v27 ΑΓ۩ମతͳ੔਺ԋࢉͷܗʹͳ͍ͬͯΔ ZJITͷதؒදݱ

Slide 18

Slide 18 text

͓·͚

Slide 19

Slide 19 text

˒ εʔπέʔε͸൒෼Ҏ্ۭͷঢ়ଶͰ ˒ ϊϕϧςΟ౳Ͱຒ·Δ ˒ ࡢ೥͸εʔπέʔε͕ຒ·্ͬͨͰ ख࣋ͪͨ͠ ͓·͚