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)
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が効きやすいのでしょうか?