# qopt-streaming-stores, Qopt-streaming-stores

Enables generation of streaming stores for optimization.

## Syntax

Linux and macOS: | -qopt-streaming-stores=keyword -qno-opt-streaming-stores

Windows: | /Qopt-streaming-stores:keyword /Qopt-streaming-stores-

## Arguments

keyword | Specifies whether streaming stores are generated. Possible values are:
always | Enables generation of streaming stores for optimization. The compiler optimizes under the assumption that the application is memory bound. When this option setting is specified, it is your responsibility to also insert any fences as required to ensure correct memory ordering within a thread or across threads. One typical way to do this is to insert a _mm_sfence() intrinsic call just after the loops (such as the initialization loop) where the compiler may insert streaming store instructions.
never | Disables generation of streaming stores for optimization. Normal stores are performed. This is the same as specifying -qno-opt-streaming-stores (Linux*) or /Qopt-streaming-stores- (Windows*).
auto | Lets the compiler decide which instructions to use.

## Default

-qopt-streaming-stores=auto or /Qopt-streaming-stores:auto | The compiler decides whether to use streaming stores or normal stores.

## Description

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.

## IDE Equivalent

None

## Alternate Options

None

## Example

The following example shows a way to insert fences when specifying -qopt-streaming-stores=always or /Qopt-streaming-stores:always:

    void simple1(double * restrict a, double * restrict b, double * restrict c, double *d, int n)
    {
        int i, j;

    #pragma omp parallel for
          for (j=0; j<n; j++) {
            a[j] = 1.0;
            b[j] = 2.0;
            c[j] = 0.0;
            }

          _mm_sfence(); // OR _mm_mfence();

    #pragma omp parallel for
        for (i=0; i<n; i++)
            a[i] = a[i] + c[i]*b[i];
    }

Parent topic: Advanced Optimization Options

## See Also

ax, Qax compiler option
x, Qx compiler option