| module matrix |
| implicit none |
| integer :: n = 10 |
| integer :: m = 10 |
| |
| contains |
| |
| function copy (a, b) result (c) |
| integer, allocatable, dimension (:,:) :: a,b,c |
| integer :: i, j, k, inner |
| |
| allocate(c(n, m)) |
| do i = 1,10 |
| do j = 1,n |
| c(j,i) = 0 |
| end do |
| end do |
| |
| !$omp unroll partial(2) |
| !$omp tile sizes (1,5) |
| do i = 1,10 |
| do j = 1,n |
| c(j,i) = c(j,i) + a(j, i) |
| end do |
| end do |
| end function copy |
| |
| subroutine print_matrix (m) |
| integer, allocatable :: m(:,:) |
| integer :: i, j, n |
| |
| n = size (m, 1) |
| do i = 1,n |
| do j = 1,n |
| write (*, fmt="(i4)", advance='no') m(j, i) |
| end do |
| write (*, *) "" |
| end do |
| write (*, *) "" |
| end subroutine |
| end module matrix |
| |
| program main |
| use matrix |
| implicit none |
| |
| integer, allocatable :: a(:,:),b(:,:),c(:,:) |
| integer :: i,j |
| |
| allocate(a(n, m)) |
| allocate(b(n, m)) |
| |
| do i = 1,n |
| do j = 1,m |
| a(j,i) = 1 |
| end do |
| end do |
| |
| c = copy (a, b) |
| |
| call print_matrix (a) |
| call print_matrix (b) |
| call print_matrix (c) |
| |
| do i = 1,n |
| do j = 1,m |
| if (c(i,j) .ne. a(i,j)) stop 1 |
| end do |
| end do |
| |
| end program main |