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

qopt-streaming-stores、Qopt-streaming-stores

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

構文

Linux* および macOS*:

-qopt-streaming-stores=keyword

Windows*:

/Qopt-streaming-stores:keyword

引数

keyword

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

always

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

このオプションを指定する場合、単一または複数のスレッド内で正しいメモリーの順序設定が徹底されるように、必要なメモリーバリア (フェンス) を挿入する必要があります。この 1 つの方法は、後述の例を参照してください。

never

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

auto

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

デフォルト

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

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

説明

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

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

IDE オプション

なし

代替オプション

なし

次の例は、-qopt-streaming-stores=always または /Qopt-streaming-stores:always を指定する場合に、メモリーバリア (フェンス) を挿入する 1 つの方法を示します。C/C++ 関数 _mm_sfence へマップする、モジュール IFCORE のプロシージャー・インターフェイス for_sfence を使用します。

subroutine sub1(a, b, c, len, n1, n2)
use IFCORE, only : for_sfence
integer len, n1, n2, i, j
real(8) a(len), b(len), c(len), d(len)

  !$omp parallel do
  do j = 1, n1
     a(j) = 1.0
     b(j) = 2.0
     c(j) = 3.0 
  enddo
  !$omp end parallel do

call ftn_sfence()
      
  !$omp parallel do
  do i = 1, n2
     a(i) = a(i) + b(i) * c(i)   
  enddo
  !$omp end parallel do

end

関連情報