Main Content

gpurng

GPU 計算の乱数発生を制御

説明

gpurng(seed) は、GPU 計算で使用される乱数発生器の開始点 (シード) を設定します。これにより、randrandiおよびrandnは予想可能な数列を生成します。

gpurng('shuffle') は現在時刻に基づいて乱数発生器のシードを設定するため、randrandiおよびrandngpurng を呼び出すたびに異なる数列が生成されます。

gpurng(seed,generator) または gpurng('shuffle',generator) は、randrandiおよびrandnで使用される乱数発生器のタイプを選択します。

gpurng('default') は、既定値に対する乱数発生器の設定を返します。生成される乱数は MATLAB® を再起動した場合と同じです。既定の設定は、シードが 0Threefry 発生器です。

S = gpurng は乱数発生器の現在の状態を、'Type'、'Seed'、'State' のフィールドをもつ構造体として返します。後で、gpurng(S) でこの構造体を使用して、キャプチャした設定に乱数発生器を復元します。

gpurng(S) は、S = gpurng で以前にキャプチャした設定を使用して、乱数発生器の状態を復元します。

S = gpurng(___) は、乱数発生器の現在の状態を構造体として返してから、シードまたは発生器タイプの設定を変更します。

すべて折りたたむ

GPU の発生器の設定をキャプチャし、CPU の乱数発生器の状態を GPU の発生器の設定と一致するように設定します。GPU および CPU 上に予測可能な乱数配列を作成します。

CPU および GPU の両方で、発生器タイプとシードを既定値に復元します。

gpurng('default') 
rng('default')

GPU の乱数発生器の既定のシードおよび発生器タイプを保存します。

GPUdef = gpurng
GPUdef = struct with fields:
     Type: 'threefry'
     Seed: 0
    State: [17×1 uint32]

GPU の既定の設定と一致するように CPU の乱数発生器を設定します。

rng(GPUdef) 

GPU で一様分布乱数の配列を作成します。

rGPU = rand(1,10, 'gpuArray')
rGPU =

    0.3640    0.5421    0.6543    0.7436    0.0342    0.8311    0.7040    0.2817    0.1163    0.5671

CPU で乱数配列を作成します。

rCPU = rand(1,10)
rCPU = 1×10

    0.3640    0.5421    0.6543    0.7436    0.0342    0.8311    0.7040    0.2817    0.1163    0.5671

GPU と CPU の両方でシードと発生器タイプが同じであるため、配列は同じになります。

isequal(rGPU,rCPU)
ans = logical
   1

gpurng の状態は、一連の正規分布乱数の生成時に適用された変換設定を保存しません。GPU と CPU でシードと発生器タイプは同じですが、正規分布する一連の乱数は異なります。

nGPU = randn(1,1000, 'gpuArray');
nCPU = randn(1,1000);

figure
hold on
histogram(nGPU)
histogram(nCPU)
legend('GPU','CPU')
title('Normally Distributed Random Numbers')
xlabel('Value')
ylabel('Count')
hold off

正規分布する乱数の統計は GPU と CPU で同じです。

'Threefry' 発生器について、既定で CPU は 'Ziggurat' 変換を使用しますが、GPU は 'BoxMuller' アルゴリズムを使用します。CPU と GPU の両方でサポートされている唯一の変換メソッドは 'Inversion' 変換です。

GPU 上の変換メソッドは、parallel.gpu.RandStreamを使用して変更できます。

入力引数

すべて折りたたむ

乱数シード。非負の整数として指定します。シードは、アルゴリズムが乱数を生成する開始点を指定します。再現可能な結果が必要な場合に、シードを指定します。既定のシードは 0 です。

例: gpurng(7)

乱数発生器。複数のストリームとサブストリームをサポートする有効な乱数発生器の文字ベクトルまたは string として指定します。GPU では 3 つの乱数発生器アルゴリズムがサポートされています。

キーワード発生器複数のストリームとサブストリームのサポート完全精度での近似周期
'Threefry' または 'Threefry4x64_20'Threefry 4x64 発生器、20 ラウンドあり2514 (長さが 2258 の 2256 個のストリーム)
'Philox' または 'Philox4x32_10'Philox 4x32 発生器、10 ラウンドあり2193 (長さが 2129 の 264 個のストリーム)
'CombRecursive' または 'mrg32k3a'結合多重再帰発生器あり2191 (長さが 2127 の 263 個のストリーム)

既定の発生器は Threefry です。

GPU および CPU での乱数発生の違いの詳細については、ワーカー上の乱数ストリームの制御を参照してください。

例: gpurng(0,'Philox')

乱数発生器の以前の状態。S = gpurng を使用して以前に作成した構造体として指定します。

例: S = gpurng は乱数発生器の現在の状態をキャプチャし、gpurng(S) は発生器をその設定に復元します。

データ型: struct

出力引数

すべて折りたたむ

乱数発生器の状態。'Type''Seed' および 'State' のフィールドをもつ構造体として返されます。

例: S = gpurng は乱数発生器の現在の状態をキャプチャし、gpurng(S) は発生器をその設定に復元します。

データ型: struct

バージョン履歴

R2011b で導入

すべて展開する