| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091 | 
							- ! StarPU --- Runtime system for heterogeneous multicore architectures.
 
- !
 
- ! Copyright (C) 2016  Inria
 
- !
 
- ! StarPU is free software; you can redistribute it and/or modify
 
- ! it under the terms of the GNU Lesser General Public License as published by
 
- ! the Free Software Foundation; either version 2.1 of the License, or (at
 
- ! your option) any later version.
 
- !
 
- ! StarPU is distributed in the hope that it will be useful, but
 
- ! WITHOUT ANY WARRANTY; without even the implied warranty of
 
- ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 
- !
 
- ! See the GNU Lesser General Public License in COPYING.LGPL for more details.
 
- module nf_mm_cl
 
- contains
 
- subroutine mat_disp (m)
 
-         ! declared here so it can be used both for the
 
-         ! program and for debugging codelet routines
 
-         use iso_c_binding       ! C interfacing module
 
-         implicit none
 
-         real(kind=c_double) :: m(:,:)
 
-         integer i,j
 
-         do i=lbound(m,1),ubound(m,1)
 
-                 write(*, fmt="(A2) ",advance="no") "| "
 
-         do j=lbound(m,2),ubound(m,2)
 
-                 write(*, fmt="(F6.1,A1) ", advance="no") m(i,j)," "
 
-         end do
 
-                 write(*,*) "|"
 
-         end do
 
-         write(*,*)
 
- end subroutine
 
- recursive subroutine cl_cpu_mult (buffers, cl_args) bind(C)
 
-         use iso_c_binding       ! C interfacing module
 
-         use fstarpu_mod         ! StarPU interfacing module
 
-         implicit none
 
-         type(c_ptr), value, intent(in) :: buffers, cl_args ! cl_args is unused
 
-         real(kind=c_double),pointer :: A(:,:), B(:,:), C(:,:)
 
-         integer :: ld_A,nx_A,ny_A
 
-         integer :: ld_B,nx_B,ny_B
 
-         integer :: ld_C,nx_C,ny_C
 
-         integer :: i,j,k
 
-         ld_A = fstarpu_matrix_get_ld(buffers, 0)
 
-         ld_B = fstarpu_matrix_get_ld(buffers, 1)
 
-         ld_C = fstarpu_matrix_get_ld(buffers, 2)
 
-         nx_A = fstarpu_matrix_get_nx(buffers, 0)
 
-         nx_B = fstarpu_matrix_get_nx(buffers, 1)
 
-         nx_C = fstarpu_matrix_get_nx(buffers, 2)
 
-         ny_A = fstarpu_matrix_get_ny(buffers, 0)
 
-         ny_B = fstarpu_matrix_get_ny(buffers, 1)
 
-         ny_C = fstarpu_matrix_get_ny(buffers, 2)
 
-         if (ny_C /= ny_B) then
 
-                 write(*,*) "C -- B column mismatch"
 
-                 stop 1
 
-         end if
 
-         if (nx_C /= nx_A) then
 
-                 write(*,*) "C -- A row mismatch"
 
-                 stop 1
 
-         end if
 
-         if (ny_A /= nx_B) then
 
-                 write(*,*) "A -- B col/row mismatch"
 
-                 stop 1
 
-         end if
 
-         call c_f_pointer(fstarpu_matrix_get_ptr(buffers, 0), A, shape=[ld_A,ny_A])
 
-         call c_f_pointer(fstarpu_matrix_get_ptr(buffers, 1), B, shape=[ld_B,ny_B])
 
-         call c_f_pointer(fstarpu_matrix_get_ptr(buffers, 2), C, shape=[ld_C,ny_C])
 
-         do k = 1, ny_C
 
-         do j = 1, nx_C
 
-         do i = 1, nx_B
 
-                 C(j,k) = C(j,k) + A(j,i) * B(i,k)
 
-         end do
 
-         end do
 
-         end do
 
- end subroutine cl_cpu_mult
 
- end module nf_mm_cl
 
 
  |