2011-07-19 15 views
3

私の同僚は、通常、高性能計算(大規模データの数学)にCまたはFortranを使用しています。 Rubyコードがコンパイル/変換され、パフォーマンス面で最適化されたCコードに近づく可能性はありますか?Rubyでの高性能計算?

Rubyをバイトコード(Rubinius、JRuby、IronRuby、YARV?、Cardinal)とネイティブコード(MacRuby、..?)にコンパイルするプロジェクトはたくさんあります。 Cのパフォーマンスに近づくチャンスは何ですか?

Rubyコードをruby2cに変換するための非アクティブなプロジェクトとして、ほぼ2年間もあります。


関連した質問:それはCでのRubyを拡張するために、むしろ簡単です、あなたが持っているので、もし:

+0

なぜこれをやりたいですか?私は間違ってはいけません - 私はルビーが大好きですが、あなたのドライバーが何であるか知ることは良いことです。 実験を試したことがありますか、ルビーが遅くなると想定していますか?データの性質や計算結果によっては、パフォーマンスの差がそれほど大きくないか、または膨大なものになる可能性があります。あなたが試みるまであなたは決して知らない。 – Rob

+0

私たちのコードは非常に複雑なので、CではなくRubyに書くことができれば素晴らしいでしょう。しかし、現在のRubyの実装は、[いくつかのベンチマーク](http://shootout.alioth .debian.org/u64q/benchmark.php?test = all&lang = yarv&lang2 = gcc)。また、クラスター上でコードを実行する必要があります。ここで計算に数日かかることがあります(C)。 RubyコードをCよりわずか2〜3倍遅いバイトコードにコンパイルできれば、それはおそらく大丈夫でしょう。 Factor of 100は計算には遅すぎます。 – Andrei

答えて

4

をあなたが含まれていませんでした1つのオプションがありますCの拡張を書いてからRubyのものを使うことができます。

http://people.apache.org/~rooneg/talks/ruby-extensions/ruby-extensions.html

+0

チップをありがとう!これは確かに私にとって最も適した解決策です。興味のある人には、Chris Lalancetteの件名に関する最近の12件の記事があります:http://clalance.blogspot.com/2011/01/writing-ruby-extensions-in-c-part-1.html – Andrei

4

数値計算のためのCの性能レベルに到達する最も簡単な方法は、既に高度に最適化されたコンパイルされたCコードであるRuby/GSL等専門ライブラリを使用することです。最終的なパフォーマンスは、コードがライブラリでどれくらいの時間を費やすかによって決まります。

3

すでに言及したように、Rubyラッパーを備えた高性能ライブラリを使用することになります。 JRubyを科学計算用のJavaライブラリを使って値引きしないでください。