問題タブ [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 - 内側の並列ループ、外側の順次ループ: mcfork を高速化するか、何らかの方法でセッションを維持できますか?
外側のループがシーケンシャルである必要があり、内側のループが非常に単純なオブジェクトを介して前の反復に依存するネストされたループを作成する場合、セッション間で複数回通信することによるオーバーヘッドを削減する方法はありますか?
doMC
と を使用した例を次に示しforeach
ます。
reprex パッケージ(v0.3.0)により 2019-07-22 に作成
内部ループの計算は非常に単純であるため、複数のセッションを作成してデータを転送することから生じるオーバーヘッドにより、並列バージョンは順次バージョンよりも遅くなります。
コードをプロファイリングした後、予想どおり、時間差は主に から来ていmcfork
ますが、計算は非常に単純で、ベクトルのみが原因で呼び出し間で異なるため、呼び出し間でセッションを持続させて送信のみa
にする方法があるかどうか疑問に思っていました各呼び出し間foreach
のa
ベクトル (これは、セッション全体をフォークするよりもはるかに高速になるはずです)。
のセッション分岐構造でそれを達成する方法はありdoMC
ますか? この種のソリューション (タスク間の小さな変更でセッションを維持する) が可能な別の並列バックエンドはありますか?
r - Rでの並列化は親プロセスのすべてのデータをコピーしますか?
私はいくつかの大規模なバイオインフォマティクス プロジェクトを持っており、約 100 万個のマーカーに対して小さな関数を実行したいと考えています。これは小さなティブル (22 行、2 列) と整数を入力として受け取ります。返されるオブジェクトはそれぞれ約 80KB で、関数内で大量のデータは作成されず、書式設定と統計テストだけが行われます。私は182個のコアを搭載したマシンで、parallel、doParallel、およびdoMCパッケージを使用してさまざまなアプローチを試みました.
しかし、私が何をしても、メモリ要件はすぐに数テラバイトになり、マシンがクラッシュします。ただし、親プロセスはメモリ内に何ギガバイトものデータを保持しているため、疑わしいと思います。親プロセスのすべてのメモリ コンテンツは、必要がない場合でも、並列化されたプロセスにコピーされますか? もしそうなら、どうすればこれを防ぐことができますか?
注: 特定の問題の解決策に必ずしも関心があるわけではないため、コード例などはありません。R の並列化でメモリがどのように機能するかの詳細を理解するのに苦労しています。