Routines for Nesting Support

Routines for Nesting Support in OpenMP 3.0

New environment variables:

  • 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):

      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
Enter labels to add to this page:
Please wait 
Looking for a label? Just start typing.

Sign up or Log in to add a comment or watch this page.


The individuals who post here are part of the extended Sun Microsystems community and they might not be employed or in any way formally affiliated with Sun Microsystems. The opinions expressed here are their own, are not necessarily reviewed in advance by anyone but the individual authors, and neither Sun nor any other party necessarily agrees with them.

Copyright 1994-2009 Sun Microsystems, Inc.
Powered by Atlassian Confluence
Sun Guidelines on Public Discourse Privacy Policy Terms of Use Trademarks Site Map Employment Investor Relations Contact