nf_codelets.f90 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. ! StarPU --- Runtime system for heterogeneous multicore architectures.
  2. !
  3. ! Copyright (C) 2017 CNRS
  4. ! Copyright (C) 2016 Inria
  5. !
  6. ! StarPU is free software; you can redistribute it and/or modify
  7. ! it under the terms of the GNU Lesser General Public License as published by
  8. ! the Free Software Foundation; either version 2.1 of the License, or (at
  9. ! your option) any later version.
  10. !
  11. ! StarPU is distributed in the hope that it will be useful, but
  12. ! WITHOUT ANY WARRANTY; without even the implied warranty of
  13. ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  14. !
  15. ! See the GNU Lesser General Public License in COPYING.LGPL for more details.
  16. !
  17. module nf_codelets
  18. contains
  19. ! 'cl_vec' codelet routine
  20. !
  21. ! Note: codelet routines must:
  22. ! . be declared recursive (~ 'reentrant routine')
  23. ! . be declared with the 'bind(C)' attribute for proper C interfacing
  24. recursive subroutine cl_cpu_func_vec (buffers, cl_args) bind(C)
  25. use iso_c_binding ! C interfacing module
  26. use fstarpu_mod ! StarPU interfacing module
  27. implicit none
  28. type(c_ptr), value, intent(in) :: buffers, cl_args ! cl_args is unused
  29. real(8), dimension(:), pointer :: va
  30. integer, dimension(:), pointer :: vb
  31. integer :: nx_va,nx_vb,i
  32. write(*,*) "task -->"
  33. ! get 'va' number of elements
  34. nx_va = fstarpu_vector_get_nx(buffers, 0)
  35. write(*,*) "nx_va"
  36. write(*,*) nx_va
  37. ! get 'vb' number of elements
  38. nx_vb = fstarpu_vector_get_nx(buffers, 1)
  39. write(*,*) "nx_vb"
  40. write(*,*) nx_vb
  41. ! get 'va' converted Fortran pointer
  42. call c_f_pointer(fstarpu_vector_get_ptr(buffers, 0), va, shape=[nx_va])
  43. write(*,*) "va"
  44. do i=1,nx_va
  45. write(*,*) i,va(i)
  46. end do
  47. ! get 'vb' converted Fortran pointer
  48. call c_f_pointer(fstarpu_vector_get_ptr(buffers, 1), vb, shape=[nx_vb])
  49. write(*,*) "vb"
  50. do i=1,nx_vb
  51. write(*,*) i,vb(i)
  52. end do
  53. write(*,*) "task <--"
  54. end subroutine cl_cpu_func_vec
  55. ! 'cl_mat' codelet routine
  56. recursive subroutine cl_cpu_func_mat (buffers, cl_args) bind(C)
  57. use iso_c_binding ! C interfacing module
  58. use fstarpu_mod ! StarPU interfacing module
  59. implicit none
  60. type(c_ptr), value, intent(in) :: buffers, cl_args ! cl_args is unused
  61. real(8), dimension(:,:), pointer :: ma
  62. integer, dimension(:,:), pointer :: mb
  63. integer :: ld_ma,nx_ma,ny_ma
  64. integer :: ld_mb,nx_mb,ny_mb
  65. integer :: i,j
  66. write(*,*) "task -->"
  67. ld_ma = fstarpu_matrix_get_ld(buffers, 0)
  68. nx_ma = fstarpu_matrix_get_nx(buffers, 0)
  69. ny_ma = fstarpu_matrix_get_ny(buffers, 0)
  70. write(*,*) "ld_ma"
  71. write(*,*) ld_ma
  72. write(*,*) "nx_ma"
  73. write(*,*) nx_ma
  74. write(*,*) "ny_ma"
  75. write(*,*) ny_ma
  76. ld_mb = fstarpu_matrix_get_ld(buffers, 1)
  77. nx_mb = fstarpu_matrix_get_nx(buffers, 1)
  78. ny_mb = fstarpu_matrix_get_ny(buffers, 1)
  79. write(*,*) "ld_mb"
  80. write(*,*) ld_mb
  81. write(*,*) "nx_mb"
  82. write(*,*) nx_mb
  83. write(*,*) "ny_mb"
  84. write(*,*) ny_mb
  85. call c_f_pointer(fstarpu_matrix_get_ptr(buffers, 0), ma, shape=[ld_ma,ny_ma])
  86. write(*,*) "ma"
  87. do i=1,nx_ma
  88. do j=1,ny_ma
  89. write(*,*) i,j,ma(i,j)
  90. end do
  91. write(*,*) '-'
  92. end do
  93. call c_f_pointer(fstarpu_matrix_get_ptr(buffers, 1), mb, shape=[ld_mb,ny_mb])
  94. write(*,*) "mb"
  95. do i=1,nx_mb
  96. do j=1,ny_mb
  97. write(*,*) i,j,mb(i,j)
  98. end do
  99. write(*,*) '-'
  100. end do
  101. write(*,*) "task <--"
  102. end subroutine cl_cpu_func_mat
  103. end module nf_codelets