Comments on: しつこく JRuby http://www.jmuk.org/diary/index.php/2007/06/12/0/ Thu, 22 Sep 2011 05:09:13 +0000 hourly 1 http://wordpress.org/?v=3.2.1 By: 向井 http://www.jmuk.org/diary/index.php/2007/06/12/0/comment-page-1/#comment-65 向井 Tue, 12 Jun 2007 09:32:44 +0000 #comment-65 試してみました。パフォーマンスはかなり改善されますね(ちゃんと見てみたらkeisukenさんもやっていますね。-J-server でもいいらしい)。それでも私の環境では ruby 1.8.6 よりけっこう遅いですが、今後は ruby より速くなるのかも、と言われれば納得できるくらいです。 ところで、上で「50倍」といったのは公正ではないので訂正します。スタックサイズの違いから試行回数が変わりますので。同じ数値でエラーをわざと raise するという胡散臭い方法では、通常で 4.8秒、 -J-server で 1.7秒となったので、高々5〜10倍といったところでした。すいません。 試してみました。パフォーマンスはかなり改善されますね(ちゃんと見てみたらkeisukenさんもやっていますね。-J-server でもいいらしい)。それでも私の環境では ruby 1.8.6 よりけっこう遅いですが、今後は ruby より速くなるのかも、と言われれば納得できるくらいです。
ところで、上で「50倍」といったのは公正ではないので訂正します。スタックサイズの違いから試行回数が変わりますので。同じ数値でエラーをわざと raise するという胡散臭い方法では、通常で 4.8秒、 -J-server で 1.7秒となったので、高々5〜10倍といったところでした。すいません。

]]>
By: odz http://www.jmuk.org/diary/index.php/2007/06/12/0/comment-page-1/#comment-64 odz Tue, 12 Jun 2007 09:09:29 +0000 #comment-64 Mac の Java はデフォルトで Client VM なようなので、それが原因じゃないでしょうか。 export JAVA_OPTS='-server' として Server VM を使うようにすればかなり違うかもしれません。 Mac の Java はデフォルトで Client VM なようなので、それが原因じゃないでしょうか。
export JAVA_OPTS=’-server’
として Server VM を使うようにすればかなり違うかもしれません。

]]>
By: 向井 http://www.jmuk.org/diary/index.php/2007/06/12/0/comment-page-1/#comment-63 向井 Tue, 12 Jun 2007 08:16:27 +0000 #comment-63 ちょっとコードを見てみたんですが、現在は COMPILE_OPTION_DEFAULT が使われているようなので、コマンドラインオプションとかで挙動を変更したりはできないようですね。コンパイルしなおしてみましたが、末尾再帰最適化版 ruby-1.9 はちゃんと止まらなくなりました :-) ちなみに、わたしが試したコードは下記のURLで閲覧できます。 http://svn.jruby.codehaus.org/browse/~raw,r=2262/jruby/trunk/jruby/test/fib.rb ちょっとコードを見てみたんですが、現在は COMPILE_OPTION_DEFAULT が使われているようなので、コマンドラインオプションとかで挙動を変更したりはできないようですね。コンパイルしなおしてみましたが、末尾再帰最適化版 ruby-1.9 はちゃんと止まらなくなりました :-)
ちなみに、わたしが試したコードは下記のURLで閲覧できます。
http://svn.jruby.codehaus.org/browse/~raw,r=2262/jruby/trunk/jruby/test/fib.rb

]]>
By: 向井 http://www.jmuk.org/diary/index.php/2007/06/12/0/comment-page-1/#comment-62 向井 Tue, 12 Jun 2007 08:13:24 +0000 #comment-62 そうなんでしたか。失礼しました。 わかりにくくてすいませんが、その発言だけ速度は関係ないです。このプログラムは(逐次的なアルゴリズムの)フィボナッチ数を再帰的に計算していて、スタック溢れを検出しているんですよ。末尾再帰最適化がされているなら、たぶんまったく失敗が発生しなくて、いつまでも終了しないプログラムになる(まさに互換性の問題が起こる)はずなので「あれっ?」と思ったわけです。 そうなんでしたか。失礼しました。
わかりにくくてすいませんが、その発言だけ速度は関係ないです。このプログラムは(逐次的なアルゴリズムの)フィボナッチ数を再帰的に計算していて、スタック溢れを検出しているんですよ。末尾再帰最適化がされているなら、たぶんまったく失敗が発生しなくて、いつまでも終了しないプログラムになる(まさに互換性の問題が起こる)はずなので「あれっ?」と思ったわけです。

]]>
By: あろは http://www.jmuk.org/diary/index.php/2007/06/12/0/comment-page-1/#comment-61 あろは Tue, 12 Jun 2007 07:35:16 +0000 #comment-61 >> あれっ、 ruby1.9 って末尾再帰の最適化をしていないのかな? 互換性 (昔の ruby だとスタックが溢れるコードが正常に動くようになるから) とか,デバグが難しくなる (スタックトレースができない) とかの理由で,オプションになっていたような.あと,単にスタックを溢れないようにしただけで,高速化には貢献してなかったような ? (ソース失念すいません) >> あれっ、 ruby1.9 って末尾再帰の最適化をしていないのかな?

互換性 (昔の ruby だとスタックが溢れるコードが正常に動くようになるから) とか,デバグが難しくなる (スタックトレースができない) とかの理由で,オプションになっていたような.あと,単にスタックを溢れないようにしただけで,高速化には貢献してなかったような ? (ソース失念すいません)

]]>
By: 向井 http://www.jmuk.org/diary/index.php/2007/06/12/0/comment-page-1/#comment-60 向井 Tue, 12 Jun 2007 07:05:53 +0000 #comment-60 それから、上に「先方」というところでリンクした keisuken さんの日記では、ちゃんと JRuby の方が速い場合があることが示せていますが、あさんはそれを読んでいますか? それから、上に「先方」というところでリンクした keisuken さんの日記では、ちゃんと JRuby の方が速い場合があることが示せていますが、あさんはそれを読んでいますか?

]]>
By: 向井 http://www.jmuk.org/diary/index.php/2007/06/12/0/comment-page-1/#comment-59 向井 Tue, 12 Jun 2007 07:03:07 +0000 #comment-59 (sigh) 知ってますよ。ま、上で言及した test/fib.rb は Not compileable なので比較はできませんが(rescueがあるのもダメらしい)。 それから念のために書いておきますが、上の結果では ruby 1.8.6 は jruby の50倍くらい速いわけです。バイトコンパイルでそれだけ速くなるか、怪しいもんだと思いますがね。わたしが試した感じでは、そこまで高速化していないようですが、あさんはどんなコードで試しましたか? (sigh)
知ってますよ。ま、上で言及した test/fib.rb は Not compileable なので比較はできませんが(rescueがあるのもダメらしい)。
それから念のために書いておきますが、上の結果では ruby 1.8.6 は jruby の50倍くらい速いわけです。バイトコンパイルでそれだけ速くなるか、怪しいもんだと思いますがね。わたしが試した感じでは、そこまで高速化していないようですが、あさんはどんなコードで試しましたか?

]]>
By: あ http://www.jmuk.org/diary/index.php/2007/06/12/0/comment-page-1/#comment-58 Tue, 12 Jun 2007 05:03:23 +0000 #comment-58 jrubyが速いのはバイトコードにコンパイル後らしいですよ。 http://ko.meadowy.net/~koichiro/diary/20070518.html#p01 jrubyが速いのはバイトコードにコンパイル後らしいですよ。
http://ko.meadowy.net/~koichiro/diary/20070518.html#p01

]]>