インテル® C++ コンパイラー 19.0 デベロッパー・ガイドおよびリファレンス
エンジンによって生成される乱数シーケンスの基本要件の 1 つは、互いに独立し、相関関係がないことです。乱数サンプルに相関性が必要な場合であっても、その相関性は制御可能であるべきです。ショートベクトル乱数ジェネレーター (SVRNG) ライブラリーは、"Skip-Ahead" と "Leap-Frog" の 2 つの手法を提供します。
Skip-Ahead 法は、オリジナルのシーケンスをオーバーラップしない k 個のブロックに分割します。ここで、k は独立したシーケンスの数です。各シーケンスは、対応する連続した乱数ブロックからのみ乱数を生成します。
Leap-Frog 法は、オリジナルのシーケンスをオーバーラップしない k 個のサブシーケンスに分割します。最初のストリームは乱数 x1、xk+1、x2k+1、x3k+1、... を生成し、2 番目のストリームは乱数 x2、xk+2、x2k+2、x3k+2、... を生成し、k 番目のストリームは乱数 xk、x2k、x3k、... を生成します。各サブシーケンスの多次元一様性は、k が大きくなるにつれて深刻に悪化するため、この手法は k が 25 未満ぐらいの場合のみ役立ちます。
次のフローは、並列計算環境で独立した乱数シーケンスを作成する場合の一般的な使用モデルを示します。
並列計算環境での SVRNG 組込み関数の使用に関する詳細は、「ショートベクトル乱数ジェネレーター (SVRNG) ライブラリーの組込み関数」に記載されている『Notes for Intel® MKL Vector Statistic』ドキュメントの「Random Streams and RNGs in Parallel Computation」セクションを参照してください。
注: 現在、"Skip-Ahead" 法と "Leap-Frog" 法は、rand0、rand、mcg31m1、および mcg59 エンジンでサポートされています。"Skip-Ahead" 法と "Leap-Frog" 法によるストリーム分割は、mt19937 エンジンではまだ実装されていませんが、mt19937 は初期化時に並列サポートを提供します。詳細は、「ショートベクトル乱数ジェネレーター (SVRNG) ライブラリーの組込み関数」に記載されている『Notes for Intel® MKL Vector Statistic』ドキュメントの「MT19937」セクションを参照してください。 |