@ledsun blog

Hのキーがhellで、Sのキーがslaveだ、と彼は思った。そしてYのキーがyouだ。

Ruby複数の実装でたらい回しベンチマーク

sumim.hatenablog.com

の追試です。 複数のRuby実装で速さの違いを比べてみます。

スクリプト

require 'benchmark'

def tak(x, y, z)
  if x > y then
    tak(tak(x-1, y, z), tak(y-1, z, x), tak(z-1, x, y))
  else
    y
  end
end

Benchmark.bm do |x|
  x.report do
    tak(14, 7, 0)
  end
end

Ruby 3.1.2preview2

ledsun@MSI:~/tarai►ruby -v tarai.rb
ruby 3.1.2p20 (2022-04-12 revision 4491bb740a) [x86_64-linux]
       user     system      total        real
  15.766919   0.000000  15.766919 ( 15.767049)

Ruby 3.1.2preview2 with YJIT

ledsun@MSI:~/tarai►ruby -v --jit tarai.rb
ruby 3.1.2p20 (2022-04-12 revision 4491bb740a) +YJIT [x86_64-linux]
       user     system      total        real
   3.669399   0.000000   3.669399 (  3.669449)

Ruby 3.1.2preview2 with MJIT

ledsun@MSI:~/tarai►ruby -v --mjit tarai.rb
ruby 3.1.2p20 (2022-04-12 revision 4491bb740a) +MJIT [x86_64-linux]
       user     system      total        real
   5.770545   0.011228   6.710264 (  5.778556)

Ruy 3.1.2

ledsun@MSI:~/tarai►ruby -v tarai.rb
ruby 3.1.2p20 (2022-04-12 revision 4491bb740a) [x86_64-linux]
       user     system      total        real
  14.975424   0.000000  14.975424 ( 14.975669)

Ruby 3.1.2 with YJIT

ledsun@MSI:~/tarai►ruby -v --jit tarai.rb
ruby 3.1.2p20 (2022-04-12 revision 4491bb740a) +YJIT [x86_64-linux]
       user     system      total        real
   4.376260   0.000542   4.376802 (  4.376845)

Ruby 3.1.2 with MJIT

ledsun@MSI:~/tarai►ruby -v --mjit tarai.rb
ruby 3.1.2p20 (2022-04-12 revision 4491bb740a) +MJIT [x86_64-linux]
       user     system      total        real
   6.358203   0.000000   7.104936 (  6.356328)

jRuby

ledsun@MSI:~/tarai►ruby -v tarai.rb
jruby 9.3.7.0 (2.6.8) 2022-08-16 c79ef237e0 OpenJDK 64-Bit Server VM 11.0.16+8-post-Ubuntu-0ubuntu120.04 on 11.0.16+8-post-Ubuntu-0ubuntu120.04 +jit [x86_64-linux]
       user     system      total        real
   6.980000   0.000000   6.980000 (  6.335983)

TruffleRuby

ledsun@MSI:~/tarai►ruby -v tarai.rb
truffleruby 22.2.0, like ruby 3.0.3, GraalVM CE Native [x86_64-linux]
       user     system      total        real
   5.272819   0.284125   5.556944 (  4.726222)

感想

いずれのJITも優秀です。 再起呼び出しはJITが効きやすいのでしょうか?