Intel® Fortran Compiler
Build applications that can scale for the future with optimized code designed for Intel® Xeon® and compatible processors.
This community is designed for sharing of public information. Please do not share Intel or third-party confidential information here.
27232 Discussions

DIrective "vector nontemporal" in Fortran


Hello guys,

I'm using "vector aligned" and "vector nontemporal" directives on my fortran code. When I was using just "vector aligned" the code was running fine, but once used also "vector nontemporal" it started to crash. I'm using -xAVX, and the directive inside the code are like that:

!DIR$ vector always aligned
!DIR$ vector nontemporal (sxx)

Where sxx is an 3D array. Is there some requirement about "nontemporal" stuff? The arrays are 64 bytes aligned, and the code was working without "nontemporal" stuff. I'm using a Intel(R) Xeon(R) CPU E3-1230 @ 3.20GHz, but I've tested on an E5-2690 also and got the same error.

0 Kudos
1 Reply
Black Belt

previously asked and answered: remove aligned to allow  peeling in case there may be occasional misalignment.  If you want to avoid peeling but handle misalignment, try VECTOR UNALIGNED, but that may not work with NONTEMPORAL.

In effect, VECTOR ALIGNED doesn't require a fault in the case of unaligned access, but VECTOR ALIGNED NONTEMPORAL does.

Current compilers have a default -opt-streaming-stores auto  which allows the compiler to guess when nontemporal may be appropriate.

-opt-streaming-stores always would use them wherever possible, without evaluating whether it will hurt performance.