天泣記

2018-02-04 (Sun)

#1 mjit を試した

ruby に mjit がマージされたというので、あからさまに効くだろう例を作って試してみた。

% ./ruby -v --jit -e '
def m(a)
  i = 0
  b = 0
  while i < 10000000
    b += a
    i += 1
  end
  b
end
40.times {
  t1 = Process.clock_gettime(Process::CLOCK_THREAD_CPUTIME_ID)
  m 1
  t2 = Process.clock_gettime(Process::CLOCK_THREAD_CPUTIME_ID)
  t = t2 - t1
  p ["*"*(t*100), t]
}
'
ruby 2.6.0dev (2018-02-04 trunk 62205) [x86_64-linux]
["************************", 0.240898976]
["*********************", 0.217471835]
["*********************", 0.21591224500000006]
["*********************", 0.21689099499999998]
["*********************", 0.21545454900000005]
["*********************", 0.2165155729999999]
["**********************", 0.22314411900000009]
["**********************", 0.22222180000000002]
["**********************", 0.22140864100000024]
["**********************", 0.22204918100000004]
["**********************", 0.22756300800000018]
["**********************", 0.22621370000000018]
["**********************", 0.22455513000000016]
["*********************", 0.21907512499999982]
["**********************", 0.22392001500000003]
["**********************", 0.22442923799999992]
["**********************", 0.22244357599999987]
["**********************", 0.22384103199999972]
["**********************", 0.220822289]
["**********************", 0.22050174499999997]
["**********************", 0.22094057699999947]
["**********************", 0.22087908700000014]
["**********************", 0.2252509439999999]
["************************", 0.24046692499999978]
["************************", 0.2441191690000002]
["************************", 0.24029502700000016]
["*********", 0.09336170299999935]
["********", 0.08989909800000007]
["*********", 0.09510676600000068]
["********", 0.08622591299999982]
["********", 0.08650536399999975]
["*********", 0.09120596999999986]
["********", 0.08059538800000077]
["*******", 0.0799009040000005]
["*******", 0.07997619300000025]
["********", 0.08294788099999995]
["********", 0.082763366]
["********", 0.08611019199999959]
["********", 0.0862023350000003]
["********", 0.08604439600000013]

JIT なので最初は遅いが、適当なタイミングでコンパイルされたものに置き換わって速くなる。 このケースだとだいたい 2倍速くらいか。

なお、C に変換するので、/tmp を監視していると、それっぽいテンポラリファイルが生成されるのが見える。


[latest]


田中哲