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

エンジンの初期化とファイナライズ

単純な rand() 関数とは異なり、ショートベクトル乱数ジェネレーター (SVRNG) ライブラリーのベクトル乱数ジェネレーターは、最初に実行する前に初期化する必要があります。これは、ベクトル生成を効率良く実行するため、エンジンの "ベクトルステート" と呼ばれる初期値を事前計算する必要があるためです。計算されたベクトルステートはメモリーに保持され、乱数が生成されると更新されます。乱数が不要になったら、メモリーは解放できます。次のいくつかのトピックでは、すべてのサポートされる SVRNG エンジンでメモリー割り当て、初期化、メモリー解放を行う関数について説明します。

SVRNG ライブラリーは、C++11 標準とインテル® マス・カーネル・ライブラリー (インテル® MKL) のベクトル統計乱数ジェネレーターの中から、次のエンジンをサポートします。

これらの乱数ジェネレーター・エンジンの性能指数については、「ショートベクトル乱数ジェネレーター (SVRNG) ライブラリーの組込み関数」に記載されている『Notes for Intel® MKL Vector Statistics』ドキュメントの「Basic Random Generator Properties and Testing Results」セクションを参照してください。

各エンジンの初期化関数には、簡易バージョンと拡張バージョンがあります。簡易バージョンは、引数が 1 つ ("seed") で、残りのベクトルステートを構築して、エンジンの種類に適したシーケンスを生成します。拡張バージョン ("_ex" サフィックスが付いているもの) は、複数の定数を使用してジェネレーターのステート値を設定します。各エンジンの説明にあるアプリケーション・ノートに定数の使用に関する詳細があります。拡張バージョンを使用する一般的なケースでは、プログラムを実行するシステムで SIMD レジスターを埋めるのに十分な 64 ビット値が必要です。次の表は、各命令セットで使用される SIMD レジスターの幅 (SIMD_WIDTH) を示します。

命令セット

SIMD_WIDTH

インテル® ストリーミング SIMD 拡張命令 2 (インテル® SSE2)

2

インテル® アドバンスト・ベクトル・エクステンション 2 (インテル® AVX2)

4

インテル® アドバンスト・ベクトル・エクステンション 512 (インテル® AVX-512)

インテル® イニシャル・メニー・コア命令 (インテル® IMCI)

8

関連情報