mirror of
https://github.com/OpenMP/Examples.git
synced 2025-04-10 08:22:11 +01:00
118 lines
2.2 KiB
Fortran
118 lines
2.2 KiB
Fortran
! @@name: partial_tile.1
|
|
! @@type: F-free
|
|
! @@operation: compile
|
|
! @@expect: success
|
|
! @@version: omp_5.1
|
|
subroutine func1(A)
|
|
implicit none
|
|
double precision :: A(100,100)
|
|
integer :: i,j
|
|
|
|
!$omp tile sizes(4,16)
|
|
do i = 1, 100
|
|
do j = 1, 100
|
|
A(j,i) = A(j,i) + 1
|
|
end do; end do
|
|
|
|
end subroutine
|
|
|
|
|
|
subroutine func2(A)
|
|
implicit none
|
|
double precision :: A(100,100)
|
|
integer :: i1,i2,j1,j2
|
|
|
|
do i1 = 1, 100, 4
|
|
do j1 = 1, 100, 16
|
|
do i2 = i1, i1 + 3
|
|
do j2 = j1, min(j1+15,100)
|
|
A(j2,i2) = A(j2,i2) + 1
|
|
end do; end do; end do; end do
|
|
|
|
end subroutine
|
|
|
|
|
|
subroutine func3(A)
|
|
implicit none
|
|
double precision :: A(100,100)
|
|
integer :: i1,i2,j1,j2, j
|
|
|
|
!! complete tiles
|
|
do i1 = 1, 100, 4
|
|
do j1 = 1, 96, 16
|
|
do i2 = i1, i1 + 3
|
|
do j2 = j1, j1 +15
|
|
A(j2,i2) = A(j2,i2) + 1
|
|
end do; end do; end do; end do
|
|
|
|
!! partial tiles / remainder
|
|
do i1 = 1, 100, 4
|
|
do i2 = i1, i1 +3
|
|
do j = 97, 100
|
|
A(j,i2) = A(j,i2) + 1
|
|
end do; end do; end do
|
|
|
|
end subroutine
|
|
|
|
|
|
subroutine func4(A)
|
|
implicit none
|
|
double precision :: A(100,100)
|
|
integer :: i1,i2,j1,j2, j
|
|
|
|
do i1 = 1, 100, 4
|
|
|
|
!! complete tiles
|
|
do j1 = 1, 96, 16
|
|
do i2 = i1, i1 + 3
|
|
do j2 = j1, j1 +15
|
|
A(j2,i2) = A(j2,i2) + 1
|
|
end do; end do; end do
|
|
|
|
!! partial tiles
|
|
do i2 = i1, i1 +3
|
|
do j = 97, 100
|
|
A(j,i2) = A(j,i2) + 1
|
|
end do; end do
|
|
|
|
end do
|
|
|
|
end subroutine
|
|
|
|
|
|
subroutine func5(A)
|
|
implicit none
|
|
double precision :: A(100,100)
|
|
integer :: i1,i2,j1,j2
|
|
|
|
do i1 = 1, 100, 4
|
|
do j1 = 1, 100, 16
|
|
do i2 = i1, i1 + 3
|
|
do j2 = j1, j1 +15
|
|
if (j2 < 101) A(j2,i2) = A(j2,i2) + 1
|
|
end do; end do; end do; end do
|
|
|
|
end subroutine
|
|
|
|
|
|
subroutine func6(A)
|
|
implicit none
|
|
double precision :: A(100,100)
|
|
integer :: i1,i2,j1,j2, i,j
|
|
|
|
!! complete tiles
|
|
do i1 = 1, 100, 4
|
|
do j1 = 1, 96, 16
|
|
do i2 = i1, i1 + 3
|
|
do j2 = j1, j1 +15
|
|
A(j2,i2) = A(j2,i2) + 1
|
|
end do; end do; end do; end do
|
|
|
|
!! partial tiles / remainder (not tiled)
|
|
do i = 1, 100
|
|
do j = 97, 100
|
|
A(j,i) = A(j,i) + 1
|
|
end do; end do
|
|
|
|
end subroutine
|