2022-11-04 09:35:42 -07:00

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