... * OMP_MAX_ACTIVE_LEVELS * OMP_THREAD_LIMIT
The above environment variables are described in Sections 4.7 and 4.8 of the OpenMP specification.
New runtime routines: * omp_get_thread_limit * omp_set_max_active_levels * omp_get_max_active_levels * omp_get_level * omp_get_ancestor_thread_num * omp_get_team_size * omp_get_active_level
The above environment variables are described in Section 3.2 of the OpenMP specification
*Example (Fortran):* {noformat} 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 {noformat} *Example (C/C++):* {noformat} #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 {noformat} {column} {column:width=30%} {panel:title=OpenMP 3.0 Features in Express 7.08} {children:page=Sun Studio OpenMP} {panel} {column} {section} |