I would like to report a problem I have identified with using "call
omp_set_num_threads (n)", which has appeared when on Windows 10 using
Gfortran version 11.3.0, (12.3.0 and 14.1.0). 

Prior versions ( 9.2.0, 10.2.0 and 11.1.0 run to completion.

The reproducer program below does not exit, but hangs after the last print
statement. ( I wonder if there are excess threads outside the END DO?)

 

I have experienced this problem for a while now, mainly with small
demonstration programs on https://fortran-lang.discourse.group, but now have
identified the cause of the program hanging.

 

I have listed a simple reproducer below which exhibits the problem if "call
omp_set_num_threads (4)" is included. I am not aware that this form of usage
of omp_set_num_threads has been made obsolete ?

 

I can confirm that the bug is not evident in equation.com's Gfortran 11.1.0
and earlier, but is present from Gfortran 11.3.0.

 

I am unsure where the bug is located. It could be in either Gfortran or
Equation.com's windows thread interface modifications.

 

Could others run the test example below to confirm where the problem is
identified.

 

Either the program runs to completion (ok) or hangs after "print..."
reporting the calculation result.

 

To confirm this problem, I have a windows test batch file to first select
the Gfortran version then compile and run the test.

I have 2 batch files : 

set_gcc.bat         which updates the path for the required gfortran
version. I store different versions in C:\Program Files
(x86)\gcc_eq\gcc_xx.y.0 ( not provided)

do_test.bat         which selects compiler, compiles the code example and
runs the test. (listed below, the first compiler options are from earlier
tests, but second also show error)

 

{{ do_test.bat }}

call set_gcc %1

 

set program=test4

set vec=-fimplicit-none -O3 -march=native -ffast-math -fopenmp
-fstack-arrays

set vec=-O2 -march=native -fopenmp

 

del %program%.exe

gfortran %program%.f90 %vec% -o %program%.exe

%program%

 

My latest test program is below, but probably could be further simplified.

{{ test4.f90 }}

program test

 

!  small working version of OpenMP program hanging on Win 10 with Gfortran
11.3.0 +

  use iso_fortran_env

   implicit none

 

    integer, parameter :: num = 1000

    real    :: A(num)

 

    real    :: RA

    integer :: i

 

    write (*,*) 'Vern : ',compiler_version ()

    write (*,*) 'Opts : ',compiler_options ()

 

    call omp_set_num_threads (4)   ! omit to run to completion with recent
Gfortran versions

  

     write ( *,*) 'Test n=',num

     A = 1

     ra = 0

 

  !$OMP PARALLEL DO private (i) shared (A), REDUCTION (+: RA)

     do i = 1, size(A)

       RA = RA + A(i)**2

     end do

  !$OMP END PARALLEL DO

 

     RA = sqrt (RA)

     print*,RA,' OpenMP', sqrt(real(num))

 

!   Program hangs here but does not exit on recent Gfortran versions

!    Gfortran versions since 11.1.0 hang, however if "call
omp_set_num_threads (4)" is omitted runs to completion.

!    Gfortran versions 11.1.0 and earlier run to completion.

 

end program test

!++++

 

Could others please confirm if you can reproduce this problem.

 

Regards,

 

John Campbell

 

Reply via email to