2011-07-19 43 views
3

我的同事們通常使用C或Fortran來進行高性能計算(大數據量的數學計算)。我想知道是否有可能對Ruby代碼進行編譯/轉換,並在性能方面接近優化的C代碼?使用Ruby進行高性能計算?

有許多項目可以將Ruby編譯爲字節碼(Rubinius,JRuby,IronRuby,YARV?,Cardinal)和本機代碼(MacRuby,..?)。他們接近C表現的機會是多少?

將Ruby代碼轉換爲C代碼還有將近2年的非活動項目:ruby2c


相關問題:

+0

你爲什麼要這樣做?不要誤解我的意思 - 我喜歡紅寶石,但最好能知道你的驅動程序是什麼。 你有沒有嘗試過一些實驗,或者你認爲紅寶石會變慢?根據數據的性質和計算結果,性能差異可能並不那麼大,或者可能很大。你直到你嘗試纔會知道。 – Rob

+0

我們的代碼非常複雜,所以如果我們可以用Ruby而不是C來編寫它,那將是非常好的。然而,根據[某些基準測試],當前的Ruby實現比C慢100倍(http:// shootout.alioth .debian.org/u64q/benchmark.php?測試=所有&郎= YARV&LANG2 = GCC)。我們還需要運行集羣上的代碼,其中計算可能需要幾天(C)。如果我們可以將Ruby代碼編譯爲比C慢2-3倍的字節碼,那麼它可能會很好。對於我們的計算,因子100太慢。 – Andrei

回答

4

還有一個選項,您不包括:這是比較容易在C擴展Ruby的,所以如果你有一個有限的一組操作需要很快,您可以編寫一個C擴展,然後使用Ruby提供的擴展。

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

+0

非常感謝小費!這對我來說無疑是最合適的解決方案。對於那些有興趣的人來說,最近有12篇關於Chris Lalancette關於這個主題的文章,網址是:http://clalance.blogspot.com/2011/01/writing-ruby-extensions-in-c-part-1.html – Andrei

4

達到C性能水平的數值計算最簡單的方法是使用專門的庫,例如Ruby/GSL這是已經高度優化的編譯的C代碼。最終的性能將取決於您的代碼將花費多長時間在庫中。

3

如前所述,您將要使用高性能庫和ruby包裝器。不要爲了科學計算而使用Java庫來折扣JRuby。