A Survey of OpenMP* Features Implemented in Intel® Fortran and C++ Compilers

Published: 02/08/2019  

Last Updated: 04/20/2021

Intel® compiler developers are active members of the OpenMP* ARB (Architecture Review Board) and implement new OpenMP features as they evolve with each Fortran and C++ compiler release.  This article summarizes new OpenMP features available by compiler release.

Intel® Fortran Compiler (Beta) 2021.x

Information about the OpenMP features available in the Intel Fortran Compiler (Beta) 2021.x (ifx).

Intel® Fortran Compiler Classic 2021.x

No new OpenMP features.

Intel® Fortran Compiler 19.1

New features from OpenMP 5.0

  • IF cause on SIMD directive
  • NONTEMPORAL clause on SIMD directive
  • Inclusive/exclusive scan operations in SIMD and TARGET SIMD constructs.

Intel® Fortran Compiler 19.0

Supports most features of OpenMP Application Programming Interface 5.0

This compiler option is on by default: -qopenmp-simd

Features added in this compiler release:

  • User-Defined Reductions from the OpenMP* 4.5 specifications are now supported:
!$omp declare reduction(reduction-identifier: type-list : combiner) [initializer-clause]
  • The F2008 standard added the BLOCK / ENDBLOCK construct. It is now allowed to use this construct inside an OMP region.
  • ASSERT clause for !$OMP SIMD directive
    • Directs the compiler to assert when the vectorization fails. Similar to deprecated !DIR$ SIMD ASSERT.

Intel Fortran Compiler 18.0

Supports most features of OpenMP Application Programming Interface 5.0. 

Language features for task reductions from the OpenMP Application Programming Interface 5.0 are now supported.

  • TASKGROUP now has the TASK_REDUCTION clause.
  • TASK includes now has the IN_REDUCTION clause.
  • TASKLOOP now has the REDUCTION and IN_REDUCTION clauses.

New monotonic, overlap and lastprivate keywords for OpenMP* SIMD directive:

!$omp ordered simd overlap(overlap_index)
!$omp ordered simd monotonic([var:step]s)
!$omp simd lastprivate(conditional:[vars])

Intel Fortran Compiler 17.0

As of version 17.0.1, the OpenMP* monitor thread (i.e. helper thread) is not created.

These features from OpenMP Application Programming Interface 4.0 and 4.5 are supported:

  • TARGET ENTER DATA
  • TARGET EXIT DATA
  • TASKLOOP

and these clauses

  • DEPEND on OMP TARGET and OMP TARGET UPDATE directives
  • NOWAIT on OMP TARGET and OMP TARGET UPDATE directives
  • SIMDLEN on OMP SIMD directive
  • SIMD on OMP ORDERED directive
  • PROCESSOR(cpuid) on OMP DECLARE SIMD (proc-name) directive
  • DEFAULTMAP (TOFROM:SCALAR) on OMP TARGET
  • An extension to OMP DECLARE SIMD allows programmers to use YMM/ZMM registers with OpenMP SIMD. The clause PROCESSOR(cpuid) tells the compiler to create a vector version of a routine for the specified processor. 
  • SIMD and NONMONOTONIC modifiers extensions to OMP DO SCHEDULE clause to enhance user control of how iterations of the DO loop are divided among threads of the team. 
  • Support for new loop construct for parallelizing for/do loops as described in the OpenMP* 4.5.
    • “taskloop” enables the dynamic divide-and-conquer loop partitioning.
    • “doacross” enables the parallelization of loops with loop-carried dependency.

The linear clause on omp declare simd declarative directive is extended with new modifiers

          linear (linear-list [ : linear-step] )
           where linear-list is one of the following:
                     list
                     where modifier (list)
                     modifier is one of the following:
                               ref
                               val
                               uval

Intel® oneAPI DPC++/C++ Compiler 2021.1

Information about the OpenMP features available in the Intel oneAPI DPC++/C++ Compiler 2021.1 (dpcpp and icx).

Intel® C++ Compiler Classic 2021.1

No new OpenMP features.

Intel® C++ Compiler 19.1

Features from OpenMP 5.0*

  • If clause on SIMD directive
  • NONTEMPORAL clause on SIMD directive

Intel® C++ Compiler 19.0

Language features from the OpenMP Application Programming Interface 5.0 are now supported.

The compiler option "-qopenmp-simd" is on by default.

Explicit syntax for inclusive scan 

#pragma omp simd reduction[parallel](inscan, operator:list)
#pragma omp scan inclusive(item-list)

Explicit syntax for exclusive scan 

#pragma omp simd reduction[parallel](inscan, operator:list)
#pragma omp scan exclusive(item-list) 
  • Prefix sum is computed correctly during vector execution
  • Sample implementation

User Defined Interface (UDI) for OpenMP* Parallel pragmas

#pragma omp declare induction ( induction-id : induction-type :step-type : inductor ) [collector( collector )]

Intel C++ Compiler 18.0

Monotonic and overlap keywords for ordered block in simd context were added:

#pragma omp ordered simd monotonic() 
#pragma omp ordered simd overlap(expr) 
#pragma omp simd reduction(=: list)

Features from OpenMP Application Programming Interface 5.0

TASKGROUP now has the TASK_REDUCTION clause.
TASK includes now has the IN_REDUCTION clause
TASKLOOP now has the REDUCTION and IN_REDUCTION clauses

Support for more new features from OpenMP* 4.0 or later

taskloop construct feature

#pragma omp taskloop[clause[[,]clause]..]

Intel C++ Compiler 17.0

Support for more new features from OpenMP* 4.0 or later

Support for

#pragma omp for linear (list [ : linear-step ])

where list is either list or modifier(list)

Support for ref, val, and uval modifiers for the linear clause
 Examples:  linear(ref(p)), linear(val(i):1), linear(uval(j):1)
 
Support for

#pragma omp simd simdlen(n)
#pragma omp ordered [simd]

Reductions over whole arrays:  

int x[n]; #pragma omp simd reduction(+:x)

Intel® processor clause extension added to #pragma omp declare simd (proposed; not officially part of OpenMP* 4.5)

Support for clauses SIMD and NONMONOTONIC modifiers for #pragma omp for schedule :
SIMD and NONMONOTONIC modifiers extension to schedule clause to enhance user control of how iterations of the for loop are divided among threads of team. 

Support for array sections as list items in the reduction clause

reduction(reduction-identifier:list)

If a list item is an array section, it is treated as if reduction clause is applied to each seperate element of the section. The elements of the private array sections will be allocated contiguously

References

OpenMP Specifications
OpenMP Application Programming Interface, Version 5.0 November 2018
OpenMP Application Programming Interface, Version 4.5 November 2015
OpenMP Application Programming Interface, Version 4.0 July 2013

Additional usage information is available in the appropriate Intel Developer Guide and Reference
Intel Fortran Compiler Developer Guide and Reference (current release)
Intel C++ Compiler Developer Guide and Reference (current release)
 

Product and Performance Information

1

Performance varies by use, configuration and other factors. Learn more at www.Intel.com/PerformanceIndex.