mirror of
https://github.com/OpenMP/Examples.git
synced 2025-04-07 23:22:11 +01:00
64 lines
1.6 KiB
Fortran
64 lines
1.6 KiB
Fortran
! @@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
|