インテル® 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 |