主要内容

ワ,カ,上の乱数ストリ,ムの制御

並列計算において,乱数発生関数兰德兰迪およびrandnの動作はmatlab®クラ@ @アントと異なります。並列ワーカー上またはクライアント上の乱数発生器の動作を変更して,再現可能な乱数ストリームを生成することができます。

MATLABワーカーがMATLABクライアントと同じマシンにあるローカルクラスターの一部であっても,既定でクライアントとワーカーは異なる乱数発生器を使用します。次の表は,クラアントおよびワカの既定の設定をまとめています。

発生器 シド 正規変換
クラ@ @アント “旋风”または“mt19937ar” 0 “神”
ワ,カ,(ロ,カルまたはリモ,ト) “Threefry”または“Threefry4x64_20” 0 “反转”

使用可能な発生器および正規変換の詳細にいては,乱数発生器の選択を参照してください。クラスタ,内の各ワ,カ,は,表内のプロパティを使用して,独立したストリ,ムから乱数を取得します。既定で,parforループ内で各ワーカー上に生成される乱数は相互に異なり,クライアント上で生成される乱数とも異なります。

メモ

ワ,カ,上にgpuがある場合,gpuの乱数ストリ,ムには異なる設定が適用されます。詳細にいては,Gpu上の乱数ストリ,ムを参照してください。

クラアントとワカ

クライアントとワーカーで同じ数値のストリームを生成する必要がある場合は,一方のストリームを他方に一致させることができます。rngを使用して,発生器アルゴリズムおよびシ,ドを設定できます。

たとえば,ワーカーでスクリプトをバッチジョブとして実行し,クライアントと同じ発生器または数列が必要であるとします。次の行を含むrandScript1.mというスクリプトファ@ @ルから開始します。

R = rand(1,4);

このスクリプトをクラアントで実行し,次に,ワカでバッチジョブとして実行できます。結果として生成される既定の乱数列が異なることに注意してください。

randScript1;客户端百分比R
R = 0.8147 0.9058 0.1270 0.9134
parallel.defaultClusterProfile (“过程”) c = parcluster();J = batch(c,“randScript1”);%工人等待(j);负载(j);R
R = 0.1349 0.6744 0.9301 0.5332

同一の結果を得るために,同じ発生器とシドを使用するようクラアントとワカを設定できます。ここで,ファrandScript2.mには次のコ,ドが含まれているとします。

rng (1,“Threefry”);R = rand(1,4);

続いて,この新しいスクリプトをクラアントとワカで実行します。

randScript2;客户端百分比R
R = 0.1404 0.8197 0.1073 0.4131
J = batch(c,“randScript2”);%工人等待(j);负载(j);R
R = 0.1404 0.8197 0.1073 0.4131

複数のワカ

既定では,同じジョブを処理するクラスタ,内の各ワ,カ,に,独立した乱数ストリ,ムがあります。兰德兰迪またはrandnが並列で呼び出される場合,各ワ,カ,は独自の乱数列を生成します。

メモ

rng(“洗牌”)は現在の時刻に基づいて乱数発生器のシードを設定するため,確実に各ストリームを独立にする場合は,このコマンドを使用して複数のワーカーに乱数ストリームを設定しないでください。特に,コマンドが複数のワ,カ,に同時に送信される場合(parforspmd,通信ジョブの内部など)に注意が必要です。ワ,カ,上のストリ,ムを独立にするには,既定の動作を使用します。それでもニ,ズが満たされない場合は,RandStreamを使用して,各ワ,カ,で独自のサブストリ,ムを使用することを検討してください。

次の例では,並列プールの2つのワーカーを使用して,それぞれが独自の乱数列を生成することを説明します。

P = parpool(2);spmdR = rand(1,4);%每个工人都不一样结束R {1}, {2}
Ans = 0.1349 0.6744 0.9301 0.5332 Ans = 0.6383 0.5195 0.1398 0.6509
删除(p)

すべてのワーカーで同じ数列を生成させる必要がある場合,同じ発生器の設定を使用するように各ワーカーを設定できます。

P = parpool(2);spmdrng (0,“Philox”);默认种子0。R = rand(1,4);所有员工都一样结束R {1}, {2}
Ans = 0.3655 0.6975 0.1789 0.4549 Ans = 0.3655 0.6975 0.1789 0.4549
删除(p)

parforル,プの反復ごとに乱数を制御する必要がある場合は,Parforル,プでの乱数の繰り返しを参照してください。

正規分布乱数

関数randnを使用して正規分布乱数を扱う場合,RandStreamを使用して,各ワーカーおよびクライアントの発生器タイプ,シードおよび正規変換アルゴリズムを設定することで,前述した同じ方法を使用できます。

たとえば,ファrandScript3.mに次のコ,ドが含まれているとします。

流= RandStream(“Threefry”“种子”0,“NormalTransform”“反转”);RandStream.setGlobalStream(流);R = randn(1,7)
このコ、ドをクラ、アント上およびワ、カ、上の並列ジョブで実行し(批处理またはspmdを使用),同じ乱数列を生成できます。
R = -0.3479 0.1057 0.3969 0.6544 -1.8228 0.9587 0.5360

参考

|

関連するトピック