乱数生成器

目次

乱数生成器#

インテル® oneMKL は、連続分布と離散分布を持つ、一般的に使用される疑似乱数、準乱数、および非決定論的生成器を実装するベクトル統計乱数生成器 (RNG) ルーチン用のデータ並列 C++ インターフェイスを提供します。

oneMKL RNG には、他のドメイン (乱数生成器ルーチン) と同様の手動オフロード機能と、DPC++ カーネルから直接呼び出せる関数のセットであるデバイス機能が含まれています (詳細な説明については、乱数生成器デバイスルーチンを参照してください)。

定義#

疑似乱数生成器は、構造(SμfUg)によって定義されます。ここで、

  • S は有限の状態集合 (状態空間)、

  • μ は、初期状態 (またはシード) s0 に対する S 上の確率分布、

  • f:S→S は遷移関数、

  • U は出力シンボルの有限集合、

  • g:S→U は出力関数です。

乱数の生成は次のようになります。

  1. μ に従って初期状態 (シードと呼ばれる) s0 を生成し、u0=g(s0) を計算します。

  2. \(i=1, \cdots, s_i = f( \, s_{i-1}) \,\) および \(u_i = g( \,s_i) \,\) を反復します。出力値 \(u_i\) は、PRNG によって生成される乱数です。

計算統計では、ランダム変量生成は通常、次の 2 つのステップで行われます。

  1. 区間 (0, 1) にわたって一様分布する独立かつ同一分布 (i.i.d.) のランダム変数の模倣を生成します。

  2. これらの i.i.d. に変換を適用します。任意の分布からランダム変量とランダムベクトルを生成 (または模倣) するためのU(0、1) ランダム変量。

すべての RNG ルーチンは、いくつかのカテゴリーに分類できます。

  • エンジン (基本的な乱数生成器) クラス。生成器の状態を保持し、i.i.d. ランダム変数のソースとなります。

  • 均一、正規 (ガウス)、二項分布など、さまざまな種類の統計分布の変換クラス。これらのクラスには、分布のすべてのパラメーター (生成方法を含む) が含まれます。

  • 関数を生成します。現在のルーチンは、特定の分布によって定義された適切な統計を使用して、特定のエンジンから乱数を取得するのに使用されます。

  • エンジンの状態を変更するサービスルーチンには、スキップアヘッドとリープフロッグ機能があります。