! { dg-do run } ! { dg-skip-if "" { ! run_expensive_tests } { "*" } { "-O2" } } ! { dg-set-target-env-var OMP_PROC_BIND "spread,close" } ! { dg-set-target-env-var OMP_PLACES "{6,7}:4:-2,!{2,3}" } ! { dg-set-target-env-var OMP_NUM_THREADS "2" } use omp_lib integer :: num, i, nump num = omp_get_num_places () print *, 'omp_get_num_places () == ', num do i = 0, num - 1 nump = omp_get_place_num_procs (place_num = i) if (nump .eq. 0) then print *, 'place ', i, ' {}' else call print_place (i, nump) end if end do call print_place_var call omp_set_nested (nested = .true.) !$omp parallel if (omp_get_thread_num () == omp_get_num_threads () - 1) then !$omp parallel if (omp_get_thread_num () == omp_get_num_threads () - 1) & call print_place_var !$omp end parallel end if !$omp end parallel contains subroutine print_place (i, nump) integer, intent (in) :: i, nump integer :: ids(nump) call omp_get_place_proc_ids (place_num = i, ids = ids) print *, 'place ', i, ' {', ids, '}' end subroutine subroutine print_place_var integer :: place, num_places place = omp_get_place_num () num_places = omp_get_partition_num_places () print *, 'place ', place if (num_places .gt. 0) call print_partition (num_places) end subroutine subroutine print_partition (num_places) integer, intent (in) :: num_places integer :: place_nums(num_places) call omp_get_partition_place_nums (place_nums = place_nums) print *, 'partition ', place_nums(1), '-', place_nums(num_places) end subroutine end