Routines for Nesting Support in OpenMP 3.0New environment variables:
The above environment variables are described in Sections 4.7 and 4.8 of the OpenMP specification. New runtime routines:
The above environment variables are described in Section 3.2 of the OpenMP specification Example (Fortran): program test
use omp_lib
call omp_set_dynamic (.false.)
call omp_set_nested (.true.)
call omp_set_num_threads (4)
call omp_set_max_active_levels (3)
!$omp parallel private (levels)
!$omp single
levels = omp_get_max_active_levels()
print *, "Par #1: Max active levels =", levels,
& "In parallel =", omp_in_parallel()
!$omp end single
!$omp parallel private (levels)
!$omp master
levels = omp_get_max_active_levels()
print *, "Par #2: Max active levels =", levels,
& "In parallel =", omp_in_parallel()
call omp_set_max_active_levels (1)
print *, "Par #2: Max active levels =", levels,
& "In parallel =", omp_in_parallel()
!$omp end master
!$omp parallel private (levels)
!$omp single
levels = omp_get_max_active_levels()
print *, "Par #3: Max active levels =", levels,
& "In parallel =", omp_in_parallel()
!$omp end single
!$omp end parallel
!$omp end parallel
!$omp end parallel
end
% f90 -xopenmp -xO3 test.f
% a.out
Par #1: Max active levels = 3 In parallel = T
Par #2: Max active levels = 3 In parallel = T
Par #2: Max active levels = 3 In parallel = T
Par #3: Max active levels = 3 In parallel = T
Par #2: Max active levels = 3 In parallel = T
Par #2: Max active levels = 3 In parallel = T
Par #3: Max active levels = 3 In parallel = T
Par #3: Max active levels = 3 In parallel = T
Par #3: Max active levels = 3 In parallel = T
Par #3: Max active levels = 3 In parallel = T
Par #3: Max active levels = 3 In parallel = T
Par #3: Max active levels = 3 In parallel = T
Par #2: Max active levels = 3 In parallel = T
Par #2: Max active levels = 3 In parallel = T
Par #2: Max active levels = 3 In parallel = T
Par #2: Max active levels = 3 In parallel = T
Par #3: Max active levels = 3 In parallel = T
Par #3: Max active levels = 3 In parallel = T
Par #3: Max active levels = 3 In parallel = T
Par #3: Max active levels = 3 In parallel = T
Par #3: Max active levels = 3 In parallel = T
Par #3: Max active levels = 3 In parallel = T
Par #3: Max active levels = 3 In parallel = T
Par #3: Max active levels = 3 In parallel = T
Par #3: Max active levels = 3 In parallel = T
Example (C/C++): #include "omp.h"
#include <stdio.h>
int main()
{
omp_set_dynamic(0);
omp_set_nested(1);
#pragma omp parallel num_threads(2)
{
if (omp_get_thread_num() == 0) {
#pragma omp parallel num_threads(2)
{
if (omp_get_thread_num() == 1) {
printf ("Y: omp_get_level() = %d\n",
omp_get_level());
printf ("Y: omp_get_active_level() = %d\n",
omp_get_active_level());
printf ("Y: omp_get_ancestor_thread_num(1) = %d\n",
omp_get_ancestor_thread_num(1));
printf ("Y: omp_get_ancestor_thread_num(2) = %d\n",
omp_get_ancestor_thread_num(2));
}
}
}
}
}
% cc -xopenmp -xO3 test.c
% a.out
Y: omp_get_level() = 2
Y: omp_get_active_level() = 2
Y: omp_get_ancestor_thread_num(1) = 0
Y: omp_get_ancestor_thread_num(2) = 1
|
OpenMP 3.0 Features in Express 7.08
|