@ledsun blog

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

TruffleRubyのスイートスポットはどこ?

JITが効くまでに時間が掛かるのではないか? - @ledsun blog でπを1万回計算したらTruffleRubyがCRubyより速く動きました。 一旦TruffleRubyが速くなったら、計算回数をもっと増やしたらTruffleRubyがもっと速く動くことが期待できます。 50000回計算を試してみました。

ledsun@MSI:~/ruby-pi►./run.sh 50000
ruby 3.1.2p20 (2022-04-12 revision 4491bb740a) [x86_64-linux]
       user     system      total        real
 209.465692   0.015921 209.481613 (209.481700)
truffleruby 22.2.0, like ruby 3.0.3, GraalVM CE Native [x86_64-linux]
       user     system      total        real
 250.117089  24.163283 274.280372 (213.885274)

CRubyの方が速いです。 念のためもう一度やってみましょう。

ledsun@MSI:~/ruby-pi►./run.sh 50000
ruby 3.1.2p20 (2022-04-12 revision 4491bb740a) [x86_64-linux]
       user     system      total        real
 201.679176   0.020111 201.699287 (201.700328)
truffleruby 22.2.0, like ruby 3.0.3, GraalVM CE Native [x86_64-linux]
       user     system      total        real
 241.973770  20.865872 262.839642 (210.707100)

やはりCRubyの方が速いです。 TruffleRubyの性能を発揮させるのは、思っていたより難しいです。

なんとなくTruffleRubyには「CRubyのすべての機能はつかえないけど、すくなくともCRubyの同じくらいの速さで動いて、JITが効くと3倍速くなる」みたいなイメージを抱いていました。 そういうものではなさそうです。

TruffleRuby(あるいはjRuby)がCRubyと同じくらいの速さで速さで動いてくれたら、 「GILのない環境で並列化したらCRubyのn倍速くなったぜ!」みたいな例に使えるのかなあ?と期待していました。 いまのところ「CRubyの100倍遅い~同じぐらいの速さ」で動かせています。 時に100倍遅いものをコア数倍速くしてもなあ・・・という感想です。

TruffleRubyが速く動く条件をもうちょっと絞り込みたいです。