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 2023.x
Information about the OpenMP features available in the Intel Fortran Compiler 2023.x (ifx).
Intel® Fortran Compiler 2022.x
Information about the OpenMP features available in the Intel Fortran Compiler 2022.x (ifx).
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 2023.x
Information about the OpenMP features available in the Intel oneAPI DPC++/C++ Compiler 2023.x (dpcpp and icx).
Intel® oneAPI DPC++/C++ Compiler 2022.x
Information about the OpenMP features available in the Intel oneAPI DPC++/C++ Compiler 2022.x (dpcpp and icx).
Intel® oneAPI DPC++/C++ Compiler 2021.x
Information about the OpenMP features available in the Intel oneAPI DPC++/C++ Compiler 2021.x (dpcpp and icx).
Intel® C++ Compiler Classic 2021.x
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)