-
Notifications
You must be signed in to change notification settings - Fork 16.5k
Open
Labels
Description
Version of flang : 23.0.0(ae282974b8a40e20a4c55dfffba84d24db843d74)/AArch64
In the attached program (sample.f90), TASKLOOP construct containing LASTPRIVATE clause does not terminate.
As shown in the results below, the program continued running for over 10 minutes, so I forcibly terminated the execution.
The execution using Gfortran or ifx completes within one second.
In the following cases, the execution completes within one second:
- Do not specify the compilation option (
-fopenmp) - Set the environment variable (
OMP_NUM_THREADS) to 1 - Delete
TASKLOOP construct
The above issample1.f90. - Delete
LASTPRIVATE clausespecified inTASKLOOP construct
The above issample5.f90.
The following are the test program, Flang, Gfortran and ifx compilation/execution results.
sample.f90:
subroutine sub()
integer,allocatable::a(:)
integer::i, nt
!$ integer omp_get_thread_num
allocate(a(100))
a=-1
nt=0
print *,'start taskloop'
!$omp taskloop lastprivate(a)
do i=1,1
print *,'in taskoop'
!$ nt = omp_get_thread_num() + 1
end do
!$omp end taskloop
print *,'out taskoop'
end subroutine sub
program main
!$omp parallel
!$omp master
call sub()
!$omp end master
!$omp end parallel
print *,'pass'
end program main$ export OMP_NUM_THREADS=2; flang -fopenmp sample.f90; time ./a.out
start taskloop
C-c C-c
real 10m3.753s
user 0m0.306s
sys 0m0.113s
$
$ flang sample.f90; time ./a.out
start taskloop
in taskoop
out taskoop
pass
real 0m0.014s
user 0m0.005s
sys 0m0.000s
$
$ export OMP_NUM_THREADS=1; flang -fopenmp sample.f90; time ./a.out
start taskloop
in taskoop
out taskoop
pass
real 0m0.028s
user 0m0.002s
sys 0m0.017s
$
$ export OMP_NUM_THREADS=2; gfortran -fopenmp sample.f90; time ./a.out
start taskloop
in taskoop
out taskoop
pass
real 0m0.051s
user 0m0.002s
sys 0m0.019s
$
$ export OMP_NUM_THREADS=2; ifx -qopenmp sample.f90; time ./a.out
start taskloop
in taskoop
out taskoop
pass
real 0m0.049s
user 0m0.606s
sys 0m0.054s
$
sample1.f90:
subroutine sub()
integer,allocatable::a(:)
integer::i, nt
!$ integer omp_get_thread_num
allocate(a(100))
a=-1
nt=0
print *,'start taskloop'
! !$omp taskloop lastprivate(a)
do i=1,1
print *,'in taskoop'
!$ nt = omp_get_thread_num() + 1
end do
! !$omp end taskloop
print *,'out taskoop'
end subroutine sub
program main
!$omp parallel
!$omp master
call sub()
!$omp end master
!$omp end parallel
print *,'pass'
end program main$ export OMP_NUM_THREADS=2; flang -fopenmp sample1.f90; time ./a.out
start taskloop
in taskoop
out taskoop
pass
real 0m0.029s
user 0m0.002s
sys 0m0.017s
$
sample5.f90:
subroutine sub()
integer,allocatable::a(:)
integer::i, nt
!$ integer omp_get_thread_num
allocate(a(100))
a=-1
nt=0
print *,'start taskloop'
!$omp taskloop
do i=1,1
print *,'in taskoop'
!$ nt = omp_get_thread_num() + 1
end do
!$omp end taskloop
print *,'out taskoop'
end subroutine sub
program main
!$omp parallel
!$omp master
call sub()
!$omp end master
!$omp end parallel
print *,'pass'
end program main$ export OMP_NUM_THREADS=2; flang -fopenmp sample5.f90; time ./a.out
start taskloop
in taskoop
out taskoop
pass
real 0m0.032s
user 0m0.006s
sys 0m0.015s
$
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
Type
Projects
Status
No status