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

qopt-streaming-stores、Qopt-streaming-stores

最適化のためのストリーミング・ストアの生成を有効にします。

構文

Linux* および macOS*:

-qopt-streaming-stores=keyword

Windows*:

/Qopt-streaming-stores:keyword

引数

keyword

ストリーミング・ストアを生成するかどうかを指定します。設定可能な値は以下のとおりです。

always

最適化のためのストリーミング・ストアの生成を有効にします。コンパイラーは、アプリケーションがメモリーにバインドされていると仮定して最適化します。

このオプションを指定する場合、単一または複数のスレッド内で正しいメモリーの順序設定が徹底されるように、必要なフェンスを挿入する必要があります。この 1 つの典型的な方法として、コンパイラーがストリーミング・ストア命令を挿入する可能性がある、ループ (例えば、初期化ループ) の直後に _mm_sfence() 組込み関数呼び出しを挿入します。

never

最適化のためのストリーミング・ストアの生成を無効にします。通常のストアが実行されます。

auto

コンパイラーの判断によって使用する命令を決定します。

デフォルト

-qopt-streaming-stores=auto
または /Qopt-streaming-stores:auto

コンパイラーの判断によって、ストリーミング・ストアまたは通常のストアが使用されます。

説明

このオプションは、最適化のためのストリーミング・ストアの生成を有効にします。一時的ではないバッファーを使用する命令でデータをストアし、メモリー階層の汚染を最小限に抑えます。

このオプションは、ストリーミング・ストアを使用することで拡張が可能なアプリケーションで役立ちます。

IDE オプション

なし

代替オプション

なし

次の例は、-qopt-streaming-stores=always または /Qopt-streaming-stores:always を指定する場合に、フェンスを挿入する 1 つの方法を示します。

void simple1(double * restrict a, double * restrict b, double * restrict c, double *d, int n)
{
    int i, j;

#pragma omp parallel for
      for (j=0; j<n; j++) {
        a[j] = 1.0;
        b[j] = 2.0;
        c[j] = 0.0;
        }

      _mm_sfence(); // または _mm_mfence();

#pragma omp parallel for
    for (i=0; i<n; i++)
        a[i] = a[i] + c[i]*b[i];
}

関連情報