63

R プロジェクトの Web サイトを読むと、 Rを使用したマルチスレッド化に関する (不明確な) 参照がいくつかありますが、ベース製品とCRANライブラリがどのようにコンパイルされているかは不明確です。

Revolution Analyticsは、Windows および Redhat 用のマルチスレッド ベース (?) ダウンロードを提供します。

他の Linux ディストリビューションの一部には、マルチスレッド R (およびパッケージ) も含まれていますか?

4

4 に答える 4

76

あなたが混乱しています。

R(およびその前のS)の内部はシングルスレッドであり、ほぼ確実にシングルスレッドのままになります。私が理解しているように、ダンカン・テンプル・ラングの博士号の仕事はこれを克服することであり、彼がそれを行うことができない場合は...

とはいえ、マルチスレッド性のポケットがあります。

  • まず、外部呼び出しを行うときはいつでも、適切なロックを使用すると、マルチスレッド化できます。これが、BLASライブラリMKL、Goto / Open BLAS、Atlas(マルチスレッドで構築されている場合)、...すべてが提供するものです。インテルはたまたま主要なRevo投資家であるため、Revo Rは(Intelの)MKLに「単に」同梱されています

  • 何をするかに注意すれば、OpenMP(マルチスレッド用のコンパイラ拡張)を使用できます。これは、ルーク・ティアニーのpnmathとpnmath0(以前は実験的/外部パッケージでした)に関する作業から始まり、それ以来、ゆっくりと、しかし確実にR自体に取り入れられてきました。

  • 次に、マルチコアの世界では、適切なオペレーティングシステムで、いつでもできますfork()。これが、マルチコアが開拓したパッケージであり、パラレルが現在実行しているパッケージです。

  • 最後になりましたが、Rmpi、snow、parallelなどのパッケージで使用され、HPCの紹介でカバーされているMPIを使用したネットワーク/RPCルートがあります。

于 2012-05-31T14:05:32.997 に答える
3

Renjinインタープリターの JVM ベースの実装です。彼らは次のように主張しています。

GNU R とは異なり、Renjin はマルチスレッドであり、Google Appengine、AWS Elastic Beanstalk、Heroku、Microsoft Azure などの Platform-as-a-Service 環境で問題なく動作します。

#resource http://www.bedatadriven.com/products/renjin.html

それでも、R から呼び出す実際の R パッケージは、スレッド セーフではない可能性があります。

からJepの呼び出しの観点からこの問題を説明しているドキュメントを参照してください。CPythonJava/Scala

https://github.com/ninia/jep/wiki/How-Jep-Works#threading-complications

JNI の複雑さと制限により、Jep インスタンスを作成するスレッドは、その Jep インスタンスへのすべてのメソッド呼び出しで再利用する必要があります。Jep はこれを強制し、無効なスレッド アクセスを示す例外をスローします。(将来的には、スレッド管理用のユーティリティを簡素化または提供したいと考えています)。

同じスレッドで同時に複数の Jep インスタンスを実行しないでください。これは技術的には許可されていますが、スレッドの状態が混乱し、Python インタープリターでデッドロックが発生する可能性があります。これは、将来発生した場合に例外をスローするように変更される可能性があります。

したがって、希望はあるようですが、Renjin使用される実際のバイナリ (C/C++ など) パッケージは、スレッド セーフであるかどうかを検証する必要があります。

他のR実装があります

https://dynamicecology.wordpress.com/2014/01/14/r-isnt-just-r-anymore/

于 2017-12-02T17:56:55.123 に答える
2

これはどうですか?そのページの変更日は 2014 年 5 月であるため、言及されたパッケージは比較的新しいものであるか、最初の回答が書かれた時点では安定していなかったと思います。

于 2014-11-13T01:50:30.173 に答える