Intel® Fortran Compiler 17.0 Developer Guide and Reference

ASSUME

General Compiler Directive: Provides heuristic information to the compiler optimizer.

!DIR$ ASSUME (scalar-Boolean-expression)

scalar-Boolean-expression

Is any expression that evaluates to .TRUE. or .FALSE. at run-time.

The scalar-Boolean-expression is presumed to be true and may be used by the optimizer to generate better code.

If the check assume option is specified and scalar-Boolean-expression does not evaluate to .TRUE. at run-time, an error message is displayed and execution is aborted.

Example

In the example below, the compiler is told that A is aligned on a 32-byte boundary using the ASSUME_ALIGNED directive. The ASSUME directive says that the length of the first dimension of A is a multiple of 8. Therefore the optimizer knows that A(I,J+1) and A(I,J-1) are 0 mod 64 bytes away from A(I,J) and are therefore also aligned on 32-byte boundaries. This information helps the optimizer in generating efficiently vectorized code for these loops.

SUBROUTINE F (A, NX,NY,I1,I2,J1,J2)
REAL (8) :: A (NX,NY)
!DIR$ ASSUME_ALIGNED A:32
!DIR$ ASSUME (MOD(NX,8) .EQ. 0)
! ensure that the first array access in the loop is aligned
!DIR$ ASSUME (MOD(I1,8) .EQ. 1)
DO J=J1,J2
  DO I=I1,I2
     A(I,J) = A(I,J) + A(I,J+1) + A(I,J-1)
  ENDDO
ENDDO
END SUBROUTINE F

See Also