問題タブ [parfor]
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.
matlab - スクリプトを並列化する代わりに、複数の MATLAB セッションでスクリプトを実行できますか?
for ループ内の多くのパラメーターの微分方程式系を解くスクリプトがあります。(反復は完全に独立していますが、各反復の終わりに、大きな行列 ( mat ) が計算結果に従って変更されます )。コードは次のとおりです: (B はパラメーターを含む行列です)
最初にparforを使おうとしたのですが、加速関数(ode45入力)がインライン関数として定義されていたため(パフォーマンス向上のため)、それができませんでした。
4 つの MATLAB セッション (私の CPU には 4 つのコアがあります) を開いて、各セッションで個別にコードを実行できますか? 1 つのセッションで実行する場合の 4 倍のパフォーマンスが得られますか? (または、並列化されたコードと同じパフォーマンスが得られますか? - 並列コードではインライン関数を定義できません -) (Windows の場合)
matlab - Matlab の Parfor
このループを parfor ループとして実行しようとしています。
Matlab で次のエラーが表示されます。
18 行目は次のとおりです。
なぜこれが可能であるべきなのか理解できません。相関の最終的な値は、ループが実行される順序には依存しませんが、dts と検出器のみに依存します。ドキュメントで同様の例を見つけましたが、これは正常に機能します。
Matlab がこのコードを実行できないのはなぜですか?どうすれば修正できますか?
matlab - parallel_function の使用エラー (matlabpool & parfor)
大量のファイルを読み取り、それぞれを処理し、それぞれの結果をファイルに保存したいと考えてい.mat
ます。各ファイルの処理は他とは独立しているので、使ってみてはいかがでしょうかparfor
。次の Matlab スクリプト ファイルを作成しました。
コンピューターで実行しようとすると、Matlab プールが初期化されますが ( connected to 5 workers
)、次のエラー メッセージが表示されます。
どこに問題があるか知っていますか?
matlab - parfor の外部からアクセスする場合と parfor 内からアクセスする場合でベクトル値が異なる
このテスト Matlab スクリプト ファイルを作成しました。
実行すると、一貫して次の出力が得られます。
fprintf
ブロック内には一見ランダムな数字のparfor
セットが表示されますが、常に同じ (112、111、107、117、115) です。なぜこれが起こっているのかについて何か考えはありますか?
アップデート
興味深いことに、これはコマンド ラインからスクリプトを実行した場合にのみ発生します。
最初に Matlab セッションを開いてparfortest
そこで実行すると、数値が正しく出力されます。
matlab - MATLAB:シリアルの場合と同じ結果を生成するために parfor でランダム シードを設定する方法は?
次の最小限の例を設定しました。
これにより、10 個の乱数が生成され、 に格納されt
ます。rng
forループでシードを設定するため、常に同じ乱数が確実に生成されます。
に変更for
するとparfor
、異なる結果が得られます。それらは常に再現可能ですが。
parfor を使用してコードを高速化し、for とまったく同じ乱数を取得したい...
matlab - 異なる PBS ジョブ間のランダム シード
複数の PBS ジョブ間で異なる乱数を Matlab で作成しようとしています (ジョブ配列を使用しています)。各 Matlab ジョブは、次のような乱数が生成される並列 parfor ループを使用します。
ただし、結果をプロットすると、さまざまなジョブの結果が完全にランダムではないことがわかります。たとえば、結果は乱数の関数であるため、数値がまったく同じであると言って数値化することはできませんが、間違いはありません。それをプロットするとき。プロセスIDおよび/またはクロックを使用して、各ジョブでランダムシードを初期化しようとしました:
しかし、これで問題は解決しませんでした。また、shuffleSeed (時計ベース) を使用する前に、ジョブごとに異なる秒数で一時停止しようとしました。
以上のことから、parfor が何らかの形でランダム シードをいじっていると思いました。parfor のさまざまな反復で異なる乱数を確実に取得する必要がある場合、それは理にかなっています。
私の質問は、それは本当にそうですか、どうすればそれを解決し、さまざまな PBS ジョブ間でランダム性を得ることができますか?
それぞれが 2 つのワーカーで parfor を使用して 4 つのジョブを実行するEDITでは、各ジョブには独自のシード (parfor の外部に設定) がありますが、生成された数値はジョブ間で同一であることを確認しました (parfor の反復間ではなく、Matlab によって処理されます)。 .
EDIT 2 @Sam Roberts が提案したことを試して、次のコードを使用します。
しかし、上記のスクリプトへのさまざまな呼び出しで同じ番号を取得します。