The
definition
of
active
parallel
region
has
been
changed:
in
Version
3.0
a
parallel
region
is
active
if
it
is
executed
by
a
team
consisting
of
more
than
one
thread
(see
Section 1.2.2
on
page 6).
The
concept
of
tasks
has
been
added
to
the
OpenMP
execution
model
(see
Section 1.2.5
on
page 28
and
Section 1.3
on
page 52).
The
OpenMP
memory
model
now
covers
atomicity
of
memory
accesses
(see
Section 1.4.1
on
page 56).
The
description
of
the
behavior
of
volatile
in
terms
of
flush
was
removed.
In
Version
2.5,
there
was
a
single
copy
of
the
nest-var,
dyn-var,
nthreads-var
and
run-sched-var
internal
control
variables
(ICVs)
for
the
whole
program.
In
Version
3.0,
there
is
one
copy
of
these
ICVs
per
task
(see
Section 2.5
on
page 171).
As
a
result,
the
omp_set_num_threads,
omp_set_nested
and
omp_set_dynamic
runtime
library
routines
now
have
specified
effects
when
called
from
inside
a
parallel
region
(see
Section 3.2.1
on
page 1025,
Section 3.2.7
on
page 1044
and
Section 3.2.10
on
page 1052).
The
thread-limit-var
ICV
has
been
added,
which
controls
the
maximum
number
of
threads
participating
in
the
OpenMP
program.
The
value
of
this
ICV
can
be
set
with
the
OMP_THREAD_LIMIT
environment
variable
and
retrieved
with
the
omp_get_thread_limit
runtime
library
routine
(see
Section 2.5.1
on
page 172,
Section 3.2.14
on
page 1064
and
Section 6.10
on
page 1667).
The
max-active-levels-var
ICV
has
been
added,
which
controls
the
number
of
nested
active
parallel
regions.
The
value
of
this
ICV
can
be
set
with
the
OMP_MAX_ACTIVE_LEVELS
environment
variable
and
the
omp_set_max_active_levels
runtime
library
routine,
and
it
can
be
retrieved
with
the
omp_get_max_active_levels
runtime
library
routine
(see
Section 2.5.1
on
page 172,
Section 3.2.16
on
page 1070,
Section 3.2.17
on
page 1073
and
Section 6.8
on
page 1664).
The
stacksize-var
ICV
has
been
added,
which
controls
the
stack
size
for
threads
that
the
OpenMP
implementation
creates.
The
value
of
this
ICV
can
be
set
with
the
OMP_STACKSIZE
environment
variable
(see
Section 2.5.1
on
page 172
and
Section 6.6
on
page 1659).
The
wait-policy-var
ICV
has
been
added,
which
controls
the
desired
behavior
of
waiting
threads.
The
value
of
this
ICV
can
be
set
with
the
OMP_WAIT_POLICY
environment
variable
(see
Section 2.5.1
on
page 172
and
Section 6.7
on
page 1662).
The
rules
for
determining
the
number
of
threads
used
in
a
parallel
region
have
been
modified
(see
Section 2.6.1
on
page 224).
In
Version
3.0,
the
assignment
of
iterations
to
threads
in
a
loop
construct
with
a
static
schedule
kind
is
deterministic
(see
Section 2.9.2
on
page 288).
In
Version
3.0,
a
loop
construct
may
be
associated
with
more
than
one
perfectly
nested
loop.
The
number
of
associated
loops
is
controlled
by
the
collapse
clause
(see
Section 2.9.2
on
page 288).
Random
access
iterators,
and
variables
of
unsigned
integer
type,
may
now
be
used
as
loop
iterators
in
loops
associated
with
a
loop
construct
(see
Section 2.9.2
on
page 288).
The
schedule
kind
auto
has
been
added,
which
gives
the
implementation
the
freedom
to
choose
any
possible
mapping
of
iterations
in
a
loop
construct
to
threads
in
the
team
(see
Section 2.9.2
on
page 288).
The
task
construct
(see
Section 2.10
on
page 384)
has
been
added,
which
provides
a
mechanism
for
creating
tasks
explicitly.
The
taskwait
construct
(see
Section 2.17.5
on
page 642)
has
been
added,
which
causes
a
task
to
wait
for
all
its
child
tasks
to
complete.
Fortran
assumed-size
arrays
now
have
predetermined
data-sharing
attributes
(see
Section 2.19.1.1
on
page 777).
In
Version
3.0,
static
class
members
variables
may
appear
in
a
threadprivate
directive
(see
Section 2.19.2
on
page 809).
Version
3.0
makes
clear
where,
and
with
which
arguments,
constructors
and
destructors
of
private
and
threadprivate
class
type
variables
are
called
(see
Section 2.19.2
on
page 809,
Section 2.19.4.3
on
page 850,
Section 2.19.4.4
on
page 852,
Section 2.19.6.1
on
page 919
and
Section 2.19.6.2
on
page 928).
In
Version
3.0,
Fortran
allocatable
arrays
may
appear
in
private,
firstprivate,
lastprivate,
reduction,
copyin
and
copyprivate
clauses
(see
Section 2.19.2
on
page 809,
Section 2.19.4.3
on
page 850,
Section 2.19.4.4
on
page 852,
Section 2.19.4.5
on
page 862,
Section 2.19.5.4
on
page 885,
Section 2.19.6.1
on
page 919
and
Section 2.19.6.2
on
page 928).
In
Fortran,
firstprivate
is
now
permitted
as
an
argument
to
the
default
clause
(see
Section 2.19.4.1
on
page 843).
For
list
items
in
the
private
clause,
implementations
are
no
longer
permitted
to
use
the
storage
of
the
original
list
item
to
hold
the
new
list
item
on
the
master
thread.
If
no
attempt
is
made
to
reference
the
original
list
item
inside
the
parallel
region,
its
value
is
well
defined
on
exit
from
the
parallel
region
(see
Section 2.19.4.3
on
page 850).
The
runtime
library
routines
omp_set_schedule
and
omp_get_schedule
have
been
added;
these
routines
respectively
set
and
retrieve
the
value
of
the
run-sched-var
ICV
(see
Section 3.2.12
on
page 1058
and
Section 3.2.13
on
page 1062).
The
omp_get_level
runtime
library
routine
has
been
added,
which
returns
the
number
of
nested
parallel
regions
enclosing
the
task
that
contains
the
call
(see
Section 3.2.18
on
page 1075).
The
omp_get_ancestor_thread_num
runtime
library
routine
has
been
added,
which
returns,
for
a
given
nested
level
of
the
current
thread,
the
thread
number
of
the
ancestor
(see
Section 3.2.19
on
page 1078).
The
omp_get_team_size
runtime
library
routine
has
been
added,
which
returns,
for
a
given
nested
level
of
the
current
thread,
the
size
of
the
thread
team
to
which
the
ancestor
belongs
(see
Section 3.2.20
on
page 1081).
The
omp_get_active_level
runtime
library
routine
has
been
added,
which
returns
the
number
of
nested
active
parallel
regions
enclosing
the
task
that
contains
the
call
(see
Section 3.2.21
on
page 1084).
In
Version
3.0,
locks
are
owned
by
tasks,
not
by
threads
(see
Section 3.3
on
page 1154).