Three Types of IVDEP Directive
The IVDEP directive to the compiler is not part of any language and its interpretation is not standardized.
- Default interpretation:
- A and B and C are independent, that breaks both, lexically forward (i+k) and backward (i-k) dependencies.
- index(1,i) != index(1,j)
- index(2,i) != index(2,j)
- But for some I: index(1,*) == index(2,*)
- The default interpretation can be changed with the -OPT: compiler option. Possible other interpretations:
- break only lexically backward dependencies (Cray IVDEP), I.e. assume only index(*,i)!=index(*,i-k) (cray_ivdep=on)
- there are no dependencies what so ever (Liberal IVDEP, enable with -OPT:liberal_ivdep=on)
A and B and C are independent,
i.e. index(*,i) != index(*,j)