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]