インテル® C++ コンパイラー 17.0 デベロッパー・ガイドおよびリファレンス

ショートベクトル乱数ジェネレーター・ライブラリーの組込み関数

 

ショートベクトル乱数ジェネレーター (SVRNG) ライブラリーは、IA-32 およびインテル® 64 アーキテクチャーのサポートされているオペレーティング・システム向けに組込み関数を提供します。 SVRNG ライブラリーは、標準 C++ (http://www.cplusplus.com/reference/random/) とインテル® マス・カーネル・ライブラリー (インテル® MKL) の乱数生成機能の一部をカバーしています。 SVRNG ライブラリーでは、エンジンと分布の組み合わせを使用して、乱数を生成できます。 "エンジン" とは、一様分布の 32 ビットまたは 64 ビット符号なし整数型の乱数を生成する基本ジェネレーターです。 "分布" は、エンジンにより生成された数列を、一様分布、正規分布、2 項分布のような特定の確率変数の分布の数列に変換します。 分布は、単精度および倍精度浮動小数点と 32 ビット符号付き整数の出力をサポートしています。

SVRNG 生成関数には、スカラー実装とベクトル実装があります。 スカラーバージョンは、ネイティブ C データ型 (float、double、32 ビットおよび 64 ビット整数) を返します。 ベクトルバージョンは、「データ型と呼び出し規約」で説明するデータ型に対応するパックド結果を SIMD ベクトルレジスターに格納します。 ループで呼び出されるスカラーバージョンは、コンパイラーによりベクトル化される可能性があります。

rand() のような単純な乱数ジェネレーターとは異なり、SVRNG エンジンと分布には、高速にベクトルを生成するため、メモリー割り当てと定数の事前計算を行う初期化ルーチンが必要です。 メモリーを解放するファイナライズ・ルーチンも提供されます。 一部のエンジンは、並列計算環境で、"Skip-Ahead" 法や "Leap-Frog" 法の使用をサポートしています 。これらの手法を使用して、シーケンシャルに生成した場合と同じ乱数シーケンスを並列に生成する方法については、「並列計算サポート」セクションで説明します。 SVRNG のエラー処理は、ステータスの set/get 関数を利用して行われます。 また、可能な場合、エラー発生時には NULL ポインターが返されます。

SVRNG の SIMD 対応関数と対応するベクトル化されたスカラー呼び出しは、次の命令セット向けに高度に最適化されています。

参考文献

このセクションでは、詳細を提供するため、次の参考文献を参照しています。