インテル® Fortran コンパイラー 18.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 を利用できます。

subroutine sub1(a, b, c, d, len, n1, n2)
real(8) a(len), b(len), c(len), d(len)

interface 
  subroutine ftn_sfence() bind (C, name = "_mm_sfence") 
     !DEC$ attributes known_intrinsic, default :: ftn_sfence
  end subroutine ftn_sfence
end interface

integer i, j, len

!OMP$ parallel for
  do j = 1,n1
     a(j) = 1.0
     b(j) = 2.0
     c(j) = 0.0
  enddo

call ftn_sfence()
      
!OMP$ parallel for
  do i = 1,n2
     a(i) = b(i)*c(i) 
  enddo

end

別の方法として、ループの後に Fortran コードから C/C++ 関数を呼び出します。

関連情報