インテル® 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++ 関数を呼び出します。