あるAnonymous Coward 曰く、本家Rubyより5倍ほど早いというRuby実装「Topaz 0.1」が登場した(@IT)。AuthorsにはJRuby実装で知られるチャールズ・ナッター氏などが名を連ねている。このTopazはPython(正確にはPythonのサブセットであるRPython)で書かれており、おなじくRPythonを使って実装されたPython実装の一つであるPyPyと同様の仕組みで動いている模様。5倍も高速化したというのは興味深いところである。
素数ベンチが5倍速い (スコア:4, 参考になる)
havenwoodさんのGistにある、差が6となる素数ペアをリストアップする(割とRubyっぽい?)コードの例だと、以下のような結果のようです。
Topaz-dev: 9.65秒
Ruby-1.9.3: 44.81秒
Ruby-2.0.0: 44.09秒
JRuby-1.7.2: 42.14秒
Rubinius-2.0.0: 82秒
MacRuby-0.1.3: 36.29秒
へえ
用途別最強 (スコア:3, 参考になる)
例えば本来の処理を1個のスレッドで回しつつ、周囲に配置された最適化スレッドが、メインスレッドの邪魔をしない範囲で余っているCPU資源を使い尽くして、メインのプログラムを最適化し続けることで、とにかく最短時間で処理が終了する、という方向を極めてみたとする。
マルチCPUのマシンで、1処理だけを回すと他のどのインタプリタよりも早く処理が終わる。じゃあと言うので、4プロセッサな環境で4個同時に走らせる用途だと、全部が終わるまでにかかる時間は、そこまで極まってないインタプリタでやった方が早くなるかも知れない。
サーバ用途だと、むしろ、最小電力とか、最小CPU資源とか他の最適化の方が嬉しいのかも知れない。速度の最適化にしても、世界最速を極めるのも重要だけど、別の意味でリーズナブルな落としどころとういうのも有るのかな。
なんで中間コードを保存しないの? (スコア:0)
サーバー用途だと、実際に使われる状況に応じて最適化して最適化した結果を保存しておけば良くない?長く使っていたら統計的にどのコードをファーストパスと思えばよいかというのはわかっているはずで、それに特化して作ればそれなりに速くなるでしょうよ。
マルチコアのマシンで1処理だけ回して統計をとって、その結果を使って最適化したコードで4コアのときに動かしてうほほーいというのが普通やることでは?
まぁ、自分が1処理だけ回すと他のどのインタプリタよりも早く処理を終わらせるようなインタプリターを作るとしたら、最適化のために他のコアを全て使うというようなロックで喧嘩して遅くなりそうなことはせずに、投機的実行をしまくるでしょうね。
Re: (スコア:0)
それなんてHotSpot
Re: (スコア:0)
CPythonのスレッドはプロセッサがいくつあろうとスケールしませんが、RPythonだと違うんでしょうか?
Re:用途別最強 (スコア:1)
「多数走らせたときにトータルのコストが最小になる」みたいな方向性も、 使うメモリの量はどうかとか他にも切り口はいろいろ考えられるので、チャレンジしがいのありそうな課題だな、と思った次第です。
これは元のRubyが遅いだけという話なのか? (スコア:0)
JRubyと比べたらどうなのかとか……invokedynamicが入ったバージョンの
赤くて三倍 (スコア:0)
じゃダメなんですか!?
#2位じゃダメなんでしょうか?
なんでトパーズなん (スコア:0)
そこは、サファイアでしょ。
Re:なんでトパーズなん (スコア:2, 興味深い)
http://ja.wikipedia.org/wiki/%E8%AA%95%E7%94%9F%E7%9F%B3 [wikipedia.org]
誕生石の起源のお話としてルビーが最初に出てきて、次がトパーズだそうです。
Re: (スコア:0)
なるほどピカチュウ版か
Re:なんでトパーズなん (スコア:2)
http://www.rubyist.net/~matz/20080308.html#p01 [rubyist.net] 一応既出なんですよ
高速化のポイントが知りたい (スコア:0)
本家より何倍も速くなるってどういう仕組みなんだろ。
Re:高速化のポイントが知りたい (スコア:2, 参考になる)
@ITの記事見るとRPythonを使って実装したことで、JITコンパイラを使える形に出来たってことですね。
ネイティブコードに出来るんならそりゃインタプリタよりは速い。
Re: (スコア:0)
5倍とかいう異常な数字に驚きましたが、JIT ということならなるほどそうかもしれない、と思いました。ポインタありがとうです。(@IT 元記事、もっとはっきり書いてよ)
でも、私にとって、Ruby の使いやすさは、`` とか(!) eval を eval するあたりなので、あんまり恩恵なさそうで、残念です。
プロフェッショナルな方だとまた違うんですかね
Re: (スコア:0)
PyPyはインタプリタ言語の処理系自体をインタプリタ言語(RPython)で実装してJITコンパイル付きのインタプリタで実行する仕組みだそうです。
JITコンパイルされるのはコードを実行している際のインタプリタの挙動らしいので、evalの文脈だろうと直接記述された文脈だろうと恐らく殆ど同じ扱いで実行されるんではないでしょうか。
JITコンパイルする対象がインタプリタだけなのにもかかわらず、インタプリタをガッツリ最適化してコンパイルした場合より速くなるってのは面白い結果だと思います。
余談ですが (スコア:0)
家庭用ゲーム機を再現するためのエミュレーターにも同じような手法で高速化がされてますね。
Re: (スコア:0)
まず
#include
これだけで3倍速くなります。あとはコードの最適化ですね!
Re: (スコア:0)
冗談を言うときこそ、ちゃんとプレビューしようね
本家より「5倍速い」RubyベースのPython実装はよ (スコア:0)
そしてその上で本家より5倍速いTopazを走らせるんだ
しゃあも (スコア:0)
シャアもびくり
脊髄反射で 赤とか 3倍とか (スコア:0)
まったく、予想通りで。
#今日も/.は平和で。
Re:脊髄反射で 赤とか 3倍とか (スコア:1)
本家実装より、ずっとはやい
が出てこないのは部門名にでも書いてあるのかと思った
Re: (スコア:0)
ほんと、赤とか3倍とか意味わかんねぇよな。
5倍って言ったら連邦の白いヤツに決まってる。
#何の5倍かは知らない。
Re: (スコア:0)
坊やだからな。
Re: (スコア:0)
Python 用のPostgreSQL ドライバが ぱいぐれす (pygres)
Re:オフトピック (スコア:5, おもしろおかしい)
つ 声に出して読みたい7つのPython用語 [hatena.ne.jp]
qgisとかSL4Aとか (スコア:1)
Pythonを使えれば便利そうだよね。
今年はへび年だし、みんなPython使いになろうよ。
/*
周囲の視線を気にしていては、マスターできなそうだな。(- -;)
*/
Re: (スコア:0)
これはよいものだ...
Re: (スコア:0)
5倍早くトパーッズっと出ちゃったでござる
Re: (スコア:0)
さすがオナッター氏
ちなみに、「PythonでRubyのJITコンパイラを書いた」のではなく、「Pythonで書いたRubyインタプリタがPythonごとJITコンパイルされる」模様
Re:オフトピック (スコア:1)
PyPy (RPython で書かれた Python) の JIT コンパイラについては
http://www.longsleeper.com/ [longsleeper.com] の Outputs - PyPyとJITコンパイラ - Introduction to PyPy and JIT compiler が詳しいですね。
Topaz も実装しているものが Python ではなく Ruby なだけなので同じ仕組みです。