OpenMP Implementation-Defined Behaviors
for
OMPi v2.5.0


This document enlists behaviors of the OMPi compiler, which are described as implementation-defined in the OpenMP specifications.

1 Internal Control Variables (ICVs)

Specific ICVs and their initial values are given in the table below. Please notice that OMPi can utilize multiple and different threading libraries, each of which may have its own initial / default values for some of these ICVs; library-specific ICVs are marked by an asterisk (*). Values in the table below refer to the default threading library (pthreads).



ICV name

Initial value





nthreads-var

# available cores (*)



dyn-var

true (*)



run-sched-var

static



def-sched-var

static



bind-var

false (*)



stacksize-var

OS default value (*)



wait-policy-var

active (*)



thread-limit-var

no limit (*)



max-active-levels-var

no limit (*)



place-partition-var

cores if HWLOC is available,

threads (’processors’) if not.



default-device-var

1 if at least 1 device attached,

0 (host) if none attached




(*) threading-library specific.

2 Dynamic Adjustment of Threads

When the dynamic adjustment of threads is disabled and the threading library cannot provide the requested number of threads, the application is aborted with an advice to enable dynamic adjustment either programmatically or using the corresponding environmental variable.

3 Loop Directive

4 Sections Construct

Scheduling of the structured section blocks among threads is competitive; threads are assigned section blocks on a first-come first-serve basis.

5 Single Construct

The selection of a thread to execute a structured single block is competitive; the first thread to ask for it, gets to execute it.

6 Processor

A ‘processor’ is whatever the OS system calls report.

7 Device-specific behaviors

Devices are the host and any additional attached compute units. The host is always the device with id 0. In this version, OMPi can support the Adapteva Epiphany accelerator as a device.

7.1 The is_device_ptr clause

OMPi only supports pointers returned by the omp_target_alloc() call and pointers specified through the use_device_ptr clause.

8 Runtime Routines

9 Environmental Variables