インテル® Fortran コンパイラー 18.0 デベロッパー・ガイドおよびリファレンス
最適化のためのストリーミング・ストアの生成を有効にします。
Linux* および macOS*: | -qopt-streaming-stores=keyword |
Windows*: | /Qopt-streaming-stores:keyword |
keyword |
ストリーミング・ストアを生成するかどうかを指定します。設定可能な値は以下のとおりです。
|
-qopt-streaming-stores=auto |
コンパイラーの判断によって、ストリーミング・ストアまたは通常のストアが使用されます。 |
このオプションは、最適化のためのストリーミング・ストアの生成を有効にします。一時的ではないバッファーを使用する命令でデータをストアし、メモリー階層の汚染を最小限に抑えます。
このオプションは、ストリーミング・ストアを使用することで拡張が可能なアプリケーションで役立ちます。
なし
次の例は、-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++ 関数を呼び出します。