問題タブ [domc]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
r - R でマルチコアと doMC を使用する場合、ログ用にサブプロセスにラベルを付けるにはどうすればよいですか
並列化されたルーチンdoMC
の並列バックエンドとして Rのパッケージを使い始めました。plyr
並列化自体は正常に機能しているように見えますが (スピードアップのベンチマークはまだ行っていません)、私の問題は、ロギングが非同期になり、異なるコアからのメッセージが混ざり合っていることです。コアごとに異なるログファイルを作成することもできますが、コアごとに異なるラベルを追加するだけでより適切な解決策になると思います。現在log4r
、ログのニーズに合わせてパッケージを使用しています。
MPI を使用しているときに、各プロセッサがランクを取得したことを覚えています。これは、各プロセスを互いに区別する方法でした。これを行う方法はありdoMC
ますか? 私は PID を抽出するという考えを持っていましたが、これは面倒に見え、反復ごとに変化します。
私はアイデアを受け入れますので、どんな提案も大歓迎です。
編集 (2011-04-08):log()
1 つの回答の提案に従いますが、正しいファイルに書き込むために呼び出しごとに個別のクロージャーが必要になるため、現在どのサブプロセスにいるのかを正しく識別するという問題がまだ残っています。 、または単一のlog()
関数を持ちますが、追加するログファイルを決定するロジックが内部にあります。どちらの場合でも、現在のサブプロセスにラベルを付ける何らかの方法が必要ですが、これを行う方法がわかりません。
mpi_rank()
MPI ライブラリに関数に相当するものはありますか?
r - doMC vs doSNOW vs doSMP vs doMPI: 'foreach' のさまざまな並列バックエンドが機能的に同等ではないのはなぜですか?
さまざまなマシンで実行したいくつかのテスト コードがありますが、常に同じ結果が得られます。さまざまな do... パッケージの背後にある哲学は、foreach の %dopar% のバックエンドとして互換的に使用できるということだと思いました。そうでないのはなぜですか?
たとえば、次のコード スニペットは機能します。
これらのコード スニペットはそれぞれ失敗しますが、
4 つのケースすべてforeach(i = 1:3,.combine = "c") %dopar% {sqrt(i)}
でまったく同じ結果が得られるため、テストした各マシンでパッケージがインストールされ、適切に動作していることがわかります。
doSMP、doSNOW、および doMPI と doMC の違いは何ですか?
r - doSMP による乱数生成
R での並列プログラミングに doSMP パッケージを使用しようとしています。これは、各 MC レプリケートが同じシードから開始するかどうか、および RNG が同じ数を与えるかどうかをテストするために書いたコードのスニペットです。乱数は同じになります。各 MC レプリケートをランダムにしたい (run.MC.replicate で乱数を生成する)。どうすればこれを修正できますか?
この動作は、doSMP が子 R プロセスを生成する方法が原因で発生すると推測しています。助けてください
function - パッケージ関数内の foreach: 最初の呼び出しでは機能しません
doMC とマルチコアに基づく R (netresponse) パッケージに並列計算オプションを追加しようとしています。スクリプトは問題なく動作しますが、2 回目の試行でのみです。
バグを再現するには、R を起動して以下のスクリプトを実行します。最後の行でスタックします。ctrl-c で中断した後、「select: Interrupted system call」というメッセージがいくつか表示されます。次に、同じスクリプトを再度実行すると、問題なく期待どおりの結果が得られます。
この作業を最初の実行で適切に行うには、さらに初期化が必要ですか? または他のヒントはありますか?
ご支援ありがとうございます - L
r - .combine 関数をスケーラブルにする
foreach を使用しようとしていますが、.combine 関数をスケーラブルにするのに問題があります。たとえば、これは単純な結合関数です
この関数を使用して foreach ステートメントを 2 以外の反復子と組み合わせると、正しく返されません。たとえば、これは機能します:
しかし、これではありません:
結合関数を一般化して n 回の繰り返しに拡張できるようにする方法はありますか?
r - 結果が破棄された plyr インターフェイスが %foreach% と互換性がないのはなぜですか?
別のディレクトリにあるファイルから入力を読み取り、その入力を処理し、出力を別の場所に書き込む plyr ベースのスクリプトを作成しています。多くの入力があるので、doMCをd_plyで使用するのは理にかなっていますが、いくつかの plyr 関数が .parallel 引数を受け入れないことに驚きました!
plyr のドキュメントをざっと見てみると、出力を破棄する関数 ( a_ply 、 l_ply 、 d_ply など) が .parallel 引数を受け入れないことがわかります。
私の質問:なぜこれが事実なのか誰か知っていますか?
以下に具体例を示します。plyr への私の呼び出しは次のようになります
ここで、input_dfは入力ファイル名を含む 3xN データ フレームです。
関数merge_filesがinput_dfの各行に適用されます。3 タプルで指定された各ファイルを読み取り、各ファイルの内容を処理して、それらの内容を 1 つの出力データ フレームにマージし、別のディレクトリに書き込みます。
しかし、私がテストを試みたとき:
このエラーが発生しました:
啓発的な回答をお寄せいただきありがとうございます。
r - doMC(foreach)の結果をデータフレームに直接代入
サンプルコードがあるとしましょう
この関数を と並行して実行するように変換したいと思いdoMC
ます。私の問題は、foreach
結果がリストになることですが、各反復の結果をデータフレームに転送できるベクトルにする必要があります(後でさらに処理するためにCVSとしてエクスポートされます)。
何か案は?
r - foreach-doparはワーカーを開始しません
doMCエンジンで実行したい次のコードがあります。
問題は、最初のワーカーが起動してから数秒後に、エンジンが残りのワーカーを起動しようとすることです。すべてのプロセッサでスパイクが見られますが、最初のプロセッサでさえ、すべてすぐに停止します。次に、新しいプロセスが起動され、残りのコードがこの唯一のワーカーを介して実行されます。
さまざまなコードを試してみましたが、エンジンは完全に機能します。しかし、この特定のルーティンでは、そうではありません。
誰かが何が起こっているのか教えてもらえますか?前もって感謝します。
windows - R の doMC と foreach ループが機能しない
R での並列処理用の foreach パッケージを取得しようとしていますが、いくつかの問題があります。
foreach を機能させるために必要な doMC パッケージは、CRAN for Windows には存在しません。一部のブログでは、代わりに doSNOW が同じ仕事をするべきだと示唆しています。ただし、doSNOW を使用して foreach コマンドを実行すると、%dopar%
より速く動作しないようです%do%
。実際、それははるかに遅いです。私の CPU は、8 GB の RAM を搭載した Intel i7 860 @ 2.80GHz です。以下は私のコードです:
必要なすべてのパッケージを再インストールしましたが、それでも同じ問題が発生します。出力は次のとおりです。
r - Ubuntu R ForEach / DoMC が複数のコアを使用していない
標準パッケージを使用してRをインストールしたR(Ubuntu 12.04 LTS 64ビット、マルチスレッドおよび6GB RAMを備えた4コアi7サーバーで実行)で関数を構築しました:
注意:パッケージをインストールしたように、R 内にforeach
&もインストールdoMC
しました (どちらも役に立ちませんでした) 。deldir
私の関数は正常に動作しますが、並列コアを使用していません (8 つのうちの 1 つを最大化するだけです)。
したがって、結果は良好ですが、並列性はありません...
doMC
正しく登録しました:
使用法を見ると(でtop
):
したがって、1つのコアを最大化するだけです。複数のコアを使用しないforeach
/使用しない原因を知っている人はいますか?doMC