計測用のスクリプト
require "bigdecimal" require "benchmark" Benchmark.bmbm do |x| x.report do prec = 100 conv = 3 a = BigDecimal("1") b = BigDecimal("1") / BigDecimal("2").sqrt(prec) t = BigDecimal("1") / 4 p = BigDecimal("1") for n in 1..conv do an = (a + b) / 2 b = (a * b).sqrt(prec) t -= p * (an - a) * (an - a) p *= 2 a = an end end end
jRubyはJITの影響を受けるっぽいので、bmbmを使っています。 リハーサル実効時にJITコンパイルされたら、本番時にはJITコンパイル後の速度が測れるだろうという目測です。 本当にそうなのかは確証はありません。
概要
Ruby実装 | 計算時間(秒) |
---|---|
CRuby 3.1.2 | 0.004 |
TruffleRuby 22.0+ GraalVM | 0.19 |
TruffleRuby 22.0 | 0.26 |
jRuby 9.3.7 | 1.29 |
CRubyが圧倒的に速いです。 Benchmarking CRuby, MJIT, YJIT, JRuby and TruffleRuby · On the Edge of Ruby などで見かけるベンチマークと違います。 あまりにもマイクロなベンチマークなので上手く計測出来ていないのでしょうか? JITが有効になるには、もっとたくさんの実行回数が必要なのでしょうか?
詳細
CRuby 3.1.2
ledsun@MSI:~/ruby-pi►rbenv local 3.1.2 ledsun@MSI:~/ruby-pi►ruby --version ruby 3.1.2p20 (2022-04-12 revision 4491bb740a) [x86_64-linux] ledsun@MSI:~/ruby-pi►ruby pi.rb Rehearsal ------------------------------------ 0.003965 0.000793 0.004758 ( 0.004761) --------------------------- total: 0.004758sec user system total real 0.004151 0.000000 0.004151 ( 0.004136)
jRuby 9.3.7
ledsun@MSI:~/ruby-pi►rbenv local jruby-9.3.7.0 ledsun@MSI:~/ruby-pi►ruby --version 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] ledsun@MSI:~/ruby-pi►ruby pi.rb Rehearsal ------------------------------------ 3.830000 0.040000 3.870000 ( 1.706857) --------------------------- total: 3.870000sec user system total real 1.910000 0.020000 1.930000 ( 1.291241)
truffleruby 22.2
ledsun@MSI:~/ruby-pi►rbenv local truffleruby-22.2.0 ledsun@MSI:~/ruby-pi►ruby --version truffleruby 22.2.0, like ruby 3.0.3, GraalVM CE Native [x86_64-linux] ledsun@MSI:~/ruby-pi►ruby pi.rb Rehearsal ------------------------------------ 1.303417 0.046385 1.349802 ( 0.421265) --------------------------- total: 1.349802sec user system total real 0.887849 0.029376 0.917225 ( 0.263987)
truffleruby 22.2 + GraalVM
ledsun@MSI:~/ruby-pi►rbenv local truffleruby+graalvm-22.2.0 ledsun@MSI:~/ruby-pi►ruby --version truffleruby 22.2.0, like ruby 3.0.3, GraalVM CE Native [x86_64-linux] ledsun@MSI:~/ruby-pi►ruby pi.rb Rehearsal ------------------------------------ 1.382144 0.022365 1.404509 ( 0.421443) --------------------------- total: 1.404509sec user system total real 0.606478 0.028106 0.634584 ( 0.190170)