Enables generation of streaming stores for optimization.
Linux: | -qopt-streaming-stores=keyword -qno-opt-streaming-stores (ifort only) |
macOS: | -qopt-streaming-stores=keyword -qno-opt-streaming-stores (ifort only) |
Windows: | /Qopt-streaming-stores:keyword /Qopt-streaming-stores- (ifort only) |
keyword |
Specifies whether streaming stores are generated. Possible values are:
|
-qopt-streaming-stores=auto |
The compiler decides whether to use streaming stores or normal stores. |
This option enables generation of streaming stores for optimization. This method stores data with instructions that use a non-temporal buffer, which minimizes memory hierarchy pollution.
This option may be useful for applications that can benefit from streaming stores.
When offloading is enabled, this option only applies to host compilation. Offloading can only be enabled when using ifx.
None
The following example shows one way to insert memory barriers (fences) when specifying -qopt-streaming-stores=always or /Qopt-streaming-stores:always. It uses the procedure interface for_sfence from the module IFCORE, which maps to the C/C++ function _mm_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