パスワードを忘れた? アカウント作成
7447332 story
Python

本家より「5倍速い」PythonベースのRuby実装が登場 35

ストーリー by hylom
PyPyも本家Pythonより早いからなぁ 部門より
あるAnonymous Coward 曰く、

本家Rubyより5倍ほど早いというRuby実装「Topaz 0.1」が登場した(@IT)。

AuthorsにはJRuby実装で知られるチャールズ・ナッター氏などが名を連ねている。このTopazはPython(正確にはPythonのサブセットであるRPython)で書かれており、おなじくRPythonを使って実装されたPython実装の一つであるPyPyと同様の仕組みで動いている模様。5倍も高速化したというのは興味深いところである。

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
  • by Anonymous Coward on 2013年02月08日 20時55分 (#2321945)

    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, 参考になる)

    by s02222 (20350) on 2013年02月08日 22時09分 (#2321983)
    よしきた、CGIサーバのrubyを入れ替えたらウハウハだ、と、はやりかけたけど、冷静に考えるとそういう用途には向いていない可能性もあるのかな。

    例えば本来の処理を1個のスレッドで回しつつ、周囲に配置された最適化スレッドが、メインスレッドの邪魔をしない範囲で余っているCPU資源を使い尽くして、メインのプログラムを最適化し続けることで、とにかく最短時間で処理が終了する、という方向を極めてみたとする。

    マルチCPUのマシンで、1処理だけを回すと他のどのインタプリタよりも早く処理が終わる。じゃあと言うので、4プロセッサな環境で4個同時に走らせる用途だと、全部が終わるまでにかかる時間は、そこまで極まってないインタプリタでやった方が早くなるかも知れない。

    サーバ用途だと、むしろ、最小電力とか、最小CPU資源とか他の最適化の方が嬉しいのかも知れない。速度の最適化にしても、世界最速を極めるのも重要だけど、別の意味でリーズナブルな落としどころとういうのも有るのかな。
    • サーバー用途だと、実際に使われる状況に応じて最適化して最適化した結果を保存しておけば良くない?長く使っていたら統計的にどのコードをファーストパスと思えばよいかというのはわかっているはずで、それに特化して作ればそれなりに速くなるでしょうよ。

      マルチコアのマシンで1処理だけ回して統計をとって、その結果を使って最適化したコードで4コアのときに動かしてうほほーいというのが普通やることでは?

      まぁ、自分が1処理だけ回すと他のどのインタプリタよりも早く処理を終わらせるようなインタプリターを作るとしたら、最適化のために他のコアを全て使うというようなロックで喧嘩して遅くなりそうなことはせずに、投機的実行をしまくるでしょうね。

    • by Anonymous Coward

      CPythonのスレッドはプロセッサがいくつあろうとスケールしませんが、RPythonだと違うんでしょうか?

      • by s02222 (20350) on 2013年02月09日 11時11分 (#2322152)
        いえ、単に、「必ずしも『最短時間=最小CPU資源』とは限らないのかな?」と思ったのを、極端な例で考えてみただけで、Topazが実際にどうなのかは知りません。よほど特殊なことをしない限りはイコールが成り立ちそうだったので。

        「多数走らせたときにトータルのコストが最小になる」みたいな方向性も、 使うメモリの量はどうかとか他にも切り口はいろいろ考えられるので、チャレンジしがいのありそうな課題だな、と思った次第です。
        親コメント
  • by Anonymous Coward on 2013年02月08日 19時11分 (#2321893)

    JRubyと比べたらどうなのかとか……invokedynamicが入ったバージョンの

  • by Anonymous Coward on 2013年02月08日 20時30分 (#2321937)

    じゃダメなんですか!?

    #2位じゃダメなんでしょうか?

  • by Anonymous Coward on 2013年02月08日 20時57分 (#2321946)

    そこは、サファイアでしょ。

  • by Anonymous Coward on 2013年02月08日 22時02分 (#2321976)

    本家より何倍も速くなるってどういう仕組みなんだろ。

    • by Anonymous Coward on 2013年02月08日 22時06分 (#2321978)

      @ITの記事見るとRPythonを使って実装したことで、JITコンパイラを使える形に出来たってことですね。
      ネイティブコードに出来るんならそりゃインタプリタよりは速い。

      親コメント
      • by Anonymous Coward

        5倍とかいう異常な数字に驚きましたが、JIT ということならなるほどそうかもしれない、と思いました。ポインタありがとうです。(@IT 元記事、もっとはっきり書いてよ)

        でも、私にとって、Ruby の使いやすさは、`` とか(!) eval を eval するあたりなので、あんまり恩恵なさそうで、残念です。

        プロフェッショナルな方だとまた違うんですかね

        • by Anonymous Coward

          PyPyはインタプリタ言語の処理系自体をインタプリタ言語(RPython)で実装してJITコンパイル付きのインタプリタで実行する仕組みだそうです。
          JITコンパイルされるのはコードを実行している際のインタプリタの挙動らしいので、evalの文脈だろうと直接記述された文脈だろうと恐らく殆ど同じ扱いで実行されるんではないでしょうか。

          JITコンパイルする対象がインタプリタだけなのにもかかわらず、インタプリタをガッツリ最適化してコンパイルした場合より速くなるってのは面白い結果だと思います。

      • by Anonymous Coward

        家庭用ゲーム機を再現するためのエミュレーターにも同じような手法で高速化がされてますね。

    • by Anonymous Coward

      まず

      #include

      これだけで3倍速くなります。あとはコードの最適化ですね!

      • by Anonymous Coward

        冗談を言うときこそ、ちゃんとプレビューしようね

  • by Anonymous Coward on 2013年02月09日 1時25分 (#2322067)

    そしてその上で本家より5倍速いTopazを走らせるんだ

  • by Anonymous Coward on 2013年02月09日 1時50分 (#2322076)

    シャアもびくり

  • by Anonymous Coward on 2013年02月09日 10時25分 (#2322139)

    まったく、予想通りで。
    #今日も/.は平和で。

typodupeerror

ナニゲにアレゲなのは、ナニゲなアレゲ -- アレゲ研究家

読み込み中...