mirror of
https://github.com/OpenMP/Examples.git
synced 2025-04-07 23:22:11 +01:00
31 lines
836 B
Fortran
31 lines
836 B
Fortran
! @@name: task_dep.5f
|
|
! @@type: F-free
|
|
! @@compilable: yes
|
|
! @@linkable: no
|
|
! @@expect: success
|
|
! Assume BS divides N perfectly
|
|
subroutine matmul_depend (N, BS, A, B, C)
|
|
implicit none
|
|
integer :: N, BS, BM
|
|
real, dimension(N, N) :: A, B, C
|
|
integer :: i, j, k, ii, jj, kk
|
|
BM = BS - 1
|
|
do i = 1, N, BS
|
|
do j = 1, N, BS
|
|
do k = 1, N, BS
|
|
!$omp task shared(A,B,C) private(ii,jj,kk) & ! I,J,K are firstprivate by default
|
|
!$omp depend ( in: A(i:i+BM, k:k+BM), B(k:k+BM, j:j+BM) ) &
|
|
!$omp depend ( inout: C(i:i+BM, j:j+BM) )
|
|
do ii = i, i+BM
|
|
do jj = j, j+BM
|
|
do kk = k, k+BM
|
|
C(jj,ii) = C(jj,ii) + A(kk,ii) * B(jj,kk)
|
|
end do
|
|
end do
|
|
end do
|
|
!$omp end task
|
|
end do
|
|
end do
|
|
end do
|
|
end subroutine
|