! @@name: taskloop_simd_reduction.1f90 ! @@type: F-free ! @@compilable: yes, omp_5.0 ! @@linkable: no ! @@expect: success program main use omp_lib integer, parameter :: N=100 integer :: i, a(N), asum=0 a = [( i, i=1,N )] !! initialize !! taskloop reductions !$omp parallel master !$omp taskloop reduction(+:asum) !! taskloop 1 do i=1,N; asum = asum + a(i); enddo !$omp end taskloop !$omp end parallel master !$omp parallel reduction(task, +:asum) !! parallel reduction a !$omp master !$omp task in_reduction(+:asum) !! task 2 do i=1,N; asum = asum + a(i); enddo !$omp end task !$omp end master !$omp master taskloop in_reduction(+:asum) !! taskloop 2 do i=1,N; asum = asum + a(i); enddo !$omp end master taskloop !$omp end parallel !! taskloop simd reductions !$omp parallel master !$omp taskloop simd reduction(+:asum) !! taskloop simd 3 do i=1,N; asum = asum + a(i); enddo !$omp end taskloop simd !$omp end parallel master !$omp parallel reduction(task, +:asum) !! parallel reduction b !$omp master !$omp task in_reduction(+:asum) !! task 4 do i=1,N; asum = asum + a(i); enddo !$omp end task !$omp end master !$omp master taskloop simd in_reduction(+:asum) !! taskloop simd 4 do i=1,N; asum = asum + a(i); enddo !$omp end master taskloop simd !$omp end parallel print*,"asum=",asum !! output: asum=30300 end program