2009-11-17 6 views
5

がリリースされて以来、私は内部Rパッケージが起動時にREvolutionパッケージを宣伝していることに気付きました。 高性能マトリックス計算のためのライブラリコレクションのようです。そして、それは実際には、明らかに動作しているようです。革命の行列の転置の例:最新のUbuntuリリース(karmic koala)からR

> system.time(t(matrix(rnorm(10000000),ncol=1000))) 
    user system elapsed 
    1.280 0.150 1.556 

と革命なし:

> system.time(t(matrix(rnorm(10000000),ncol=1000))) 
    user system elapsed 
    1.320 0.170 1.725 

は、それを使用して誰ですか?それは本当に効果的ですか?どのような特定のタイプの計算が改善され、どのようになっていますか?任意の欠点?

+0

"なし"の場合は2回あるようです。 –

答えて

10

はい、マルチコアマシンでは、BLASを実装しているパッケージrevolution-mklによって提供され、パッケージr-revolution-revobaseでオンになっているインテルMKLライブラリは、線形代数の問題に対して並行して動作します。 libblas *パッケージだけを使用する場合の基本的なケースです。

はしかし、あなたの例では、上記の私は、多くの場合、複製数の上にトリム平均を計算するために

mean(replicate(N, system.time(someStuffHere())["elapsed"]), trim=0.05) 

ような何かを、その重要ではありません。

もっと重要なのは、あなたの例には、 i)高価なタイミングでRNG描画が含まれていて、ii)使用されているメソッドに不変であるため、system.time()の外部に生成する必要があることに注意してください。

MKLに加えて、revolution-rは、並列実行に使用できるCRANのREvolutionによって作成されたパッケージの一部を提供します。

(免責事項:私はREvoがUbuntu 9のためにこれをまとめるのを助けました。10)

+0

ありがとう、またタイミングについてのヒントについて: –

+0

私はUbuntu 13.04にインストールされた革命rを持っており、ベンチマーク2.5スクリプトに基づいて、インストール後に性能はまったく変わりません。私は何かが間違っているのだろうかと思います。また、この質問を参照してください:http://askubuntu.com/questions/297968/how-to-make-revobase-package-work-in-r-3-0-1 – qed

+0

私は両方のベンチマークスクリプトを使用しているR3 .0.1とR2.15は、回転-rの有無にかかわらず、結果は事実上同じです。誰かがこれを確認してもらえますか? – qed

4

:-)

おかげでより多くの情報のために革命からこのblog postを参照してください。 REvolution R 3.0は、CRANからR-2.9.2と100%互換でなければなりません。 基本的には、マルチスレッドの高性能線形代数ライブラリと最適化コンパイラを使用します。 革命の拡張機能は次のとおりです。

  • プロセッサキャッシュを活用するために最適化された高パフォーマンスの数学ライブラリ、ベクトル命令とマルチスレッディング(Intel Math Kernel Library - MKL)と
  • 最適化コンパイラとランタイムライブラリを。

REvolutionのWebページには、REvolution R PerformanceSimple Benchmarksというベンチマークがあります。

彼らはOSSライセンス(foreachiteratorsdoSNOW、およびdoMC)の下でRコミュニティにいくつかの興味深い機能拡張に貢献してきたが、MKLの拡張子は独自のものです。

個人的には、私は最新のR機能を持つために(CRAN)R 2.10.0に切り替えました。

4

あなたのケースでは、Dirkが言及したことを繰り返し述べてください。あなたのケースでは、マトリックスを構築することはほとんどすべての時間を取っています。言い換えれば

> system.time(t(matrix(rnorm(10000000),ncol=1000))) 
    user system elapsed 
    2.256 0.317 2.576 

> mt <- matrix(rnorm(10000000),ncol=1000) 
> system.time(t(mt)) 
    user system elapsed 
    0.137 0.070 0.204 

10の下で、行列を構築する費やされている時間の90%以上を、:私はタイミング機能の外にそれをヤンクするとき(私は革命を持っていない私のシステム上で)何が起こるか見てそれを転置する。

関連する問題