@ledsun blog

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

もののついでにjRubyでもπを繰り返し計算してみる

JITが効くまでに時間が掛かるのではないか? - @ledsun blog でTruffleRubyを計測したスクリプトがあります。 そのまま流用してjRubyも計測してみます。

スクリプト

require "bigdecimal"
require "benchmark"

def pi
  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

Benchmark.bm do |x|
  x.report do
    ARGV[0].to_i.times do 
      pi
    end
  end
end
rbenv local 3.1.2
ruby --version
ruby pi.rb $1
rbenv local jruby-9.3.7.0
ruby --version
ruby pi.rb $1

結果

ledsun@MSI:~/ruby-pi►./run_jruby.sh 1
ruby 3.1.2p20 (2022-04-12 revision 4491bb740a) [x86_64-linux]
       user     system      total        real
   0.004461   0.000000   0.004461 (  0.004499)
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
   4.010000   0.060000   4.070000 (  1.737954)
ledsun@MSI:~/ruby-pi►./run_jruby.sh 10
ruby 3.1.2p20 (2022-04-12 revision 4491bb740a) [x86_64-linux]
       user     system      total        real
   0.040831   0.000000   0.040831 (  0.040857)
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
  15.600000   0.190000  15.790000 ( 12.541831)
ledsun@MSI:~/ruby-pi►./run_jruby.sh 100
ruby 3.1.2p20 (2022-04-12 revision 4491bb740a) [x86_64-linux]
       user     system      total        real
   0.397269   0.000000   0.397269 (  0.397289)
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
 133.670000   0.830000 134.500000 (122.400172)
ledsun@MSI:~/ruby-pi►./run_jruby.sh 1000
ruby 3.1.2p20 (2022-04-12 revision 4491bb740a) [x86_64-linux]
       user     system      total        real
   4.024466   0.000000   4.024466 (  4.024575)
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
 1288.650000   6.590000 1295.240000 (1193.121318)

実行時間は線形に増えます。 ごく普通です。