9
1
mirror of https://github.com/QuantumPackage/qp2.git synced 2024-06-26 14:32:05 +02:00

cleaner test version

This commit is contained in:
Yann Damour 2021-11-19 12:01:37 +01:00
parent d997b807e4
commit 62cb153126

View File

@ -4,15 +4,19 @@ program check_omp
implicit none implicit none
integer :: i,j,k,l,m,n,x,z,setting integer :: i,j,k,l,m,n,x,z,setting,nb_setting
double precision :: w1,w2,c1,c2 double precision :: w1,w2,c1,c2
double precision, allocatable :: accu(:,:,:,:) double precision, allocatable :: accu(:,:,:,:)
logical :: must_exit, verbose, is_working logical :: must_exit, verbose, is_working
logical, allocatable :: is_working_n(:)
x = 4 x = 4
allocate(accu(x,x,x,x)) nb_setting = 4
verbose = .False. allocate(accu(x,x,x,x))
allocate(is_working_n(nb_setting))
verbose = .True.
accu = 0d0 accu = 0d0
must_exit = .False. must_exit = .False.
@ -39,11 +43,9 @@ program check_omp
! set the number of threads ! set the number of threads
call omp_set_num_threads(2) call omp_set_num_threads(2)
do z = 1, 4 is_working_n = .True.
if (must_exit) then do z = 1, nb_setting
exit
endif
call omp_set_max_active_levels(1) call omp_set_max_active_levels(1)
call omp_set_nested(.False.) call omp_set_nested(.False.)
@ -67,13 +69,13 @@ program check_omp
!$OMP SHARED(accu) !$OMP SHARED(accu)
if (verbose) then if (verbose) then
print*,'Nb threads level 1:', omp_get_num_threads() print*,'Setting:',setting,'Nb threads level 1:', omp_get_num_threads()
endif endif
!$OMP MASTER !$OMP MASTER
if (omp_get_num_threads()==1) then if (omp_get_num_threads()==1) then
print*,'Setting',setting,"error at level 1" print*,'Setting',setting,"error at level 1"
setting = -1 is_working_n(z) = .False.
endif endif
!$OMP END MASTER !$OMP END MASTER
@ -94,13 +96,13 @@ program check_omp
!$OMP SHARED(accu) !$OMP SHARED(accu)
if (verbose) then if (verbose) then
print*,'Nb threads level 2:', omp_get_num_threads() print*,'Setting:',setting,'Nb threads level 2:', omp_get_num_threads()
endif endif
!$OMP MASTER !$OMP MASTER
if (omp_get_num_threads()==1 .and. setting >= 0) then if (omp_get_num_threads()==1 .and. is_working_n(z)) then
print*,'Setting',setting,"error at level 2" print*,'Setting',setting,"error at level 2"
setting = -1 is_working_n(z) = .False.
endif endif
!$OMP END MASTER !$OMP END MASTER
@ -121,13 +123,13 @@ program check_omp
!$OMP SHARED(accu) !$OMP SHARED(accu)
if (verbose) then if (verbose) then
print*,'Nb threads level 3:', omp_get_num_threads() print*,'Setting:',setting,'Nb threads level 3:', omp_get_num_threads()
endif endif
!$OMP MASTER !$OMP MASTER
if (omp_get_num_threads()==1 .and. setting >= 0) then if (omp_get_num_threads()==1 .and. is_working_n(z)) then
print*,'Setting',setting,"error at level 3" print*,'Setting',setting,"error at level 3"
setting = -1 is_working_n(z) = .False.
endif endif
!$OMP END MASTER !$OMP END MASTER
@ -148,22 +150,13 @@ program check_omp
!$OMP SHARED(accu) !$OMP SHARED(accu)
if (verbose) then if (verbose) then
print*,'Nb threads level 4:', omp_get_num_threads() print*,'Setting:',setting,'Nb threads level 4:', omp_get_num_threads()
endif endif
!$OMP MASTER !$OMP MASTER
if (omp_get_num_threads()==1 .and. setting >= 0) then if (omp_get_num_threads()==1 .and. is_working_n(z)) then
print*,'Setting',setting,"error at level 4" print*,'Setting',setting,"error at level 4"
elseif(omp_get_num_threads()==1 .or. setting == 0) then is_working_n(z) = .False.
else
must_exit = .True.
endif
if ( z == 1 .and. setting == 0) then
is_working = .True.
elseif (z == 1 .and. setting == -1) then
is_working = .False.
else
endif endif
!$OMP END MASTER !$OMP END MASTER
@ -191,17 +184,17 @@ program check_omp
print*,'' print*,''
if (setting == 1) then if (is_working_n(2)) then
print*,'The parallelization works on 4 levels with:' print*,'The parallelization works on 4 levels with:'
print*,'call omp_set_max_active_levels(5)' print*,'call omp_set_max_active_levels(5)'
print*,'' print*,''
print*,'Please use the irpf90 flags -DSET_MAX_ACT in qp2/config/${compiler_name}.cfg' print*,'Please use the irpf90 flags -DSET_MAX_ACT in qp2/config/${compiler_name}.cfg'
elseif (setting == 2) then elseif (is_working_n(3)) then
print*,'The parallelization works on 4 levels with:' print*,'The parallelization works on 4 levels with:'
print*,'call omp_set_nested(.True.)' print*,'call omp_set_nested(.True.)'
print*,'' print*,''
print*,'Please use the irpf90 flag -DSET_NESTED in qp2/config/${compiler_name}.cfg' print*,'Please use the irpf90 flag -DSET_NESTED in qp2/config/${compiler_name}.cfg'
elseif (setting == 3) then elseif (is_working_n(4)) then
print*,'The parallelization works on 4 levels with:' print*,'The parallelization works on 4 levels with:'
print*,'call omp_set_nested(.True.)' print*,'call omp_set_nested(.True.)'
print*,'+' print*,'+'
@ -221,7 +214,7 @@ program check_omp
print*,'Try an other compiler and good luck...' print*,'Try an other compiler and good luck...'
endif endif
if (is_working) then if (is_working_n(1)) then
print*,'' print*,''
print*,'==========================================================' print*,'=========================================================='
print*,'Your actual set up works for parallelization with 4 levels' print*,'Your actual set up works for parallelization with 4 levels'