Description:
This test case tries to show that
the following statement found in the OpenMP API Version 2.5 May 2005 on p.29
lines 21-24 is true:
"When a thread executing inside an active parallel region encounters a parallel
construct, the new team which is created will consist of only the encountering
thread, when any of the following conditions hold:
* nested parallelism is disabled."
> gfortran -v
Using built-in specs.
Target: x86_64-suse-linux
Configured with: ../xt-gcc-4.2.0/configure --prefix=/opt/gcc/4.2.0/snos
--disable-nls --libdir=/opt/gcc/4.2.0/snos/lib --enable-languages=c,c++,fortran
--with-gxx-include-dir=/opt/gcc/4.2.0/snos/include/g++
--with-slibdir=/opt/gcc/4.2.0/snos/lib --with-system-zlib --enable-shared
--enable-__cxa_atexit x86_64-suse-linux
Thread model: posix
gcc version 4.2.0 20070514 (rpm:4)
> cat bug2837.f90
! Derived from OpenMP test omp1/F2_2_9g.f90
use omp_lib
implicit none
integer, parameter :: NT = 4
integer :: nThreads(NT)
integer :: tmp = 0
!$ call omp_set_dynamic(.false.)
!$ call omp_set_num_threads(NT)
print *, 'omp_get_nested()=',omp_get_nested()
!$omp parallel default(private) shared(nThreads)
tmp = 1
!$omp parallel default(shared)
!$omp atomic
tmp = tmp + omp_get_thread_num() + 1
!$omp end parallel
nThreads(omp_get_thread_num()+1) = tmp
!$omp end parallel
print *, nThreads
END
> ftn -O3 -fopenmp -o x bug2837.f90
> aprun -n 1 ./x
omp_get_nested()= F
1 1 1 1
Application 4711 resources: utime 0, stime 0
Expected output (from PGI compilation):
> ftn -o x -O3 -mp -Mconcur=nonuma bug2837.f90
bug2837.f90:
> aprun -n 1 ./x
Warning: omp_set_num_threads (4) greater than available cpus (1)
omp_get_nested()= F
2 2 2 2
Application 4712 resources: utime 0, stime 0
------
Note: ftn is an alias for:
/opt/gcc/4.2.0/bin/../snos/bin/gfortran -static -v
-I/opt/xt-mpt/2.1/mpich2-64/GP/include -I/opt/xt-mpt/2.1/mpich2-64/GP/include
-L/opt/xt-mpt/2.1/mpich2-64/GP/lib -I/opt/acml/3.6.1/gnu64/include
-I/opt/xt-libsci/10.1.0/gnu/snos64/include
-I/opt/xt-libsci/10.1.0/gnu/snos64/include/superlu
-I/opt/xt-mpt/2.1/sma/P/include -L/opt/acml/3.6.1/gnu64/lib
-L/opt/xt-libsci/10.1.0/gnu/snos64/lib -L/opt/xt-mpt/2.1/sma/P/lib -lmpichf90
-lsci -lacml -lsma -lmpichf90 -lmpich -lrt -D__CRAYXT_COMPUTE_LINUX_TARGET
-D__TARGET_LINUX__ -fno-second-underscore
-I/notbackedup/users/rsrel/rs64.DEV.070604.Mon/install/include
-I/opt/xt-catamount/2.1/catamount/linux/include -I/opt/xt-service/2.1/include
-L/notbackedup/users/rsrel/rs64.DEV.070604.Mon/install/lib/snos64
-L/opt/xt-pe/2.1/cnos/linux/64/lib -L/opt/xt-mpt/2.1/lib/snos64
-L/opt/xt-service/2.1/lib/snos64 -Wl,--start -lpct -lalpslli -lalpsutil
-lportals -lpthread -Wl,--end -lgfortranbegin -lgfortran -lm
--
Summary: INCORRECT OUTPUT OBTAINED FROM NESTED PARALLELISM THAT
IS SERIALIZED
Product: gcc
Version: 4.2.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: fortran
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: longb at cray dot com
GCC build triplet: x86_64-suse-linux
GCC host triplet: x86_64-suse-linux
GCC target triplet: x86_64-suse-linux
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=32551