mkl_spblas_omp_offload.h 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259
  1. /*******************************************************************************
  2. * Copyright 2020-2022 Intel Corporation.
  3. *
  4. * This software and the related documents are Intel copyrighted materials, and
  5. * your use of them is governed by the express license under which they were
  6. * provided to you (License). Unless the License provides otherwise, you may not
  7. * use, modify, copy, publish, distribute, disclose or transmit this software or
  8. * the related documents without Intel's prior written permission.
  9. *
  10. * This software and the related documents are provided as is, with no express
  11. * or implied warranties, other than those that are expressly stated in the
  12. * License.
  13. *******************************************************************************/
  14. /*
  15. ! Content:
  16. ! Intel(R) oneAPI Math Kernel Library (oneMKL) C OpenMP offload
  17. ! interface for Sparse BLAS
  18. !******************************************************************************/
  19. #ifndef _MKL_SPBLAS_OMP_OFFLOAD_H_
  20. #define _MKL_SPBLAS_OMP_OFFLOAD_H_
  21. #include "mkl_types.h"
  22. #include "mkl_spblas.h"
  23. #include "mkl_spblas_omp_variant.h"
  24. #if (_OPENMP >= 202011)
  25. #include <omp.h>
  26. #endif
  27. #ifdef __cplusplus
  28. extern "C" {
  29. #endif /* __cplusplus */
  30. #if (_OPENMP >= 202011)
  31. #pragma omp declare variant (MKL_SPBLAS_VARIANT_NAME(s_create_csr)) match(construct={dispatch}, device={arch(gen)}) \
  32. append_args(interop(prefer_type("sycl","level_zero"),targetsync)) \
  33. adjust_args(need_device_ptr:rows_start, rows_end, col_indx, values)
  34. #endif
  35. #pragma omp declare variant (MKL_SPBLAS_VARIANT_NAME(s_create_csr)) match(construct={target variant dispatch}, device={arch(gen)})
  36. sparse_status_t mkl_sparse_s_create_csr( sparse_matrix_t *A,
  37. const sparse_index_base_t indexing,
  38. const MKL_INT rows,
  39. const MKL_INT cols,
  40. MKL_INT *rows_start,
  41. MKL_INT *rows_end,
  42. MKL_INT *col_indx,
  43. float *values );
  44. #if (_OPENMP >= 202011)
  45. #pragma omp declare variant (MKL_SPBLAS_VARIANT_NAME(d_create_csr)) match(construct={dispatch}, device={arch(gen)}) \
  46. append_args(interop(prefer_type("sycl","level_zero"),targetsync)) \
  47. adjust_args(need_device_ptr:rows_start, rows_end, col_indx, values)
  48. #endif
  49. #pragma omp declare variant (MKL_SPBLAS_VARIANT_NAME(d_create_csr)) match(construct={target variant dispatch}, device={arch(gen)})
  50. sparse_status_t mkl_sparse_d_create_csr( sparse_matrix_t *A,
  51. const sparse_index_base_t indexing,
  52. const MKL_INT rows,
  53. const MKL_INT cols,
  54. MKL_INT *rows_start,
  55. MKL_INT *rows_end,
  56. MKL_INT *col_indx,
  57. double *values );
  58. #if (_OPENMP >= 202011)
  59. #pragma omp declare variant (MKL_SPBLAS_VARIANT_NAME(s_export_csr)) match(construct={dispatch}, device={arch(gen)}) \
  60. append_args(interop(prefer_type("sycl","level_zero"),targetsync))
  61. //adjust_args(nothing)
  62. #endif
  63. #pragma omp declare variant (MKL_SPBLAS_VARIANT_NAME(s_export_csr)) match(construct={target variant dispatch}, device={arch(gen)})
  64. sparse_status_t mkl_sparse_s_export_csr( const sparse_matrix_t source,
  65. sparse_index_base_t *indexing,
  66. MKL_INT *rows,
  67. MKL_INT *cols,
  68. MKL_INT **rows_start,
  69. MKL_INT **rows_end,
  70. MKL_INT **col_indx,
  71. float **values );
  72. #if (_OPENMP >= 202011)
  73. #pragma omp declare variant (MKL_SPBLAS_VARIANT_NAME(d_export_csr)) match(construct={dispatch}, device={arch(gen)}) \
  74. append_args(interop(prefer_type("sycl","level_zero"),targetsync))
  75. //adjust_args(nothing)
  76. #endif
  77. #pragma omp declare variant (MKL_SPBLAS_VARIANT_NAME(d_export_csr)) match(construct={target variant dispatch}, device={arch(gen)})
  78. sparse_status_t mkl_sparse_d_export_csr( const sparse_matrix_t source,
  79. sparse_index_base_t *indexing,
  80. MKL_INT *rows,
  81. MKL_INT *cols,
  82. MKL_INT **rows_start,
  83. MKL_INT **rows_end,
  84. MKL_INT **col_indx,
  85. double **values );
  86. #if (_OPENMP >= 202011)
  87. #pragma omp declare variant (MKL_SPBLAS_VARIANT_NAME(destroy)) match(construct={dispatch}, device={arch(gen)}) \
  88. append_args(interop(prefer_type("sycl","level_zero"),targetsync))
  89. //adjust_args(nothing)
  90. #endif
  91. #pragma omp declare variant (MKL_SPBLAS_VARIANT_NAME(destroy)) match(construct={target variant dispatch}, device={arch(gen)})
  92. sparse_status_t mkl_sparse_destroy( sparse_matrix_t A );
  93. #if (_OPENMP >= 202011)
  94. #pragma omp declare variant (MKL_SPBLAS_VARIANT_NAME(set_mv_hint)) match(construct={dispatch}, device={arch(gen)}) \
  95. append_args(interop(prefer_type("sycl","level_zero"),targetsync))
  96. //adjust_args(nothing)
  97. #endif
  98. #pragma omp declare variant (MKL_SPBLAS_VARIANT_NAME(set_mv_hint)) match(construct={target variant dispatch}, device={arch(gen)})
  99. sparse_status_t mkl_sparse_set_mv_hint ( const sparse_matrix_t A,
  100. const sparse_operation_t operation,
  101. const struct matrix_descr descr,
  102. const MKL_INT expected_calls );
  103. #if (_OPENMP >= 202011)
  104. #pragma omp declare variant (MKL_SPBLAS_VARIANT_NAME(set_sv_hint)) match(construct={dispatch}, device={arch(gen)}) \
  105. append_args(interop(prefer_type("sycl","level_zero"),targetsync))
  106. //adjust_args(nothing)
  107. #endif
  108. #pragma omp declare variant (MKL_SPBLAS_VARIANT_NAME(set_sv_hint)) match(construct={target variant dispatch}, device={arch(gen)})
  109. sparse_status_t mkl_sparse_set_sv_hint ( const sparse_matrix_t A,
  110. const sparse_operation_t operation,
  111. const struct matrix_descr descr,
  112. const MKL_INT expected_calls );
  113. #if (_OPENMP >= 202011)
  114. #pragma omp declare variant (MKL_SPBLAS_VARIANT_NAME(optimize)) match(construct={dispatch}, device={arch(gen)}) \
  115. append_args(interop(prefer_type("sycl","level_zero"),targetsync))
  116. //adjust_args(nothing)
  117. #endif
  118. #pragma omp declare variant (MKL_SPBLAS_VARIANT_NAME(optimize)) match(construct={target variant dispatch}, device={arch(gen)})
  119. sparse_status_t mkl_sparse_optimize( sparse_matrix_t A );
  120. #if (_OPENMP >= 202011)
  121. #pragma omp declare variant (MKL_SPBLAS_VARIANT_NAME(order)) match(construct={dispatch}, device={arch(gen)}) \
  122. append_args(interop(prefer_type("sycl","level_zero"),targetsync))
  123. //adjust_args(nothing)
  124. #endif
  125. #pragma omp declare variant (MKL_SPBLAS_VARIANT_NAME(order)) match(construct={target variant dispatch}, device={arch(gen)})
  126. sparse_status_t mkl_sparse_order( const sparse_matrix_t A );
  127. /* Level 2 */
  128. /* Computes y = alpha * A * x + beta * y */
  129. #if (_OPENMP >= 202011)
  130. #pragma omp declare variant (MKL_SPBLAS_VARIANT_NAME(s_mv)) match(construct={dispatch}, device={arch(gen)}) \
  131. append_args(interop(prefer_type("sycl","level_zero"),targetsync)) \
  132. adjust_args(need_device_ptr:x,y)
  133. #endif
  134. #pragma omp declare variant (MKL_SPBLAS_VARIANT_NAME(s_mv)) match(construct={target variant dispatch}, device={arch(gen)})
  135. sparse_status_t mkl_sparse_s_mv ( const sparse_operation_t operation,
  136. const float alpha,
  137. const sparse_matrix_t A,
  138. const struct matrix_descr descr,
  139. const float *x,
  140. const float beta,
  141. float *y );
  142. #if (_OPENMP >= 202011)
  143. #pragma omp declare variant (MKL_SPBLAS_VARIANT_NAME(d_mv)) match(construct={dispatch}, device={arch(gen)}) \
  144. append_args(interop(prefer_type("sycl","level_zero"),targetsync)) \
  145. adjust_args(need_device_ptr:x,y)
  146. #endif
  147. #pragma omp declare variant (MKL_SPBLAS_VARIANT_NAME(d_mv)) match(construct={target variant dispatch}, device={arch(gen)})
  148. sparse_status_t mkl_sparse_d_mv ( const sparse_operation_t operation,
  149. const double alpha,
  150. const sparse_matrix_t A,
  151. const struct matrix_descr descr,
  152. const double *x,
  153. const double beta,
  154. double *y );
  155. /* Solves triangular system y = alpha * A^{-1} * x */
  156. #if (_OPENMP >= 202011)
  157. #pragma omp declare variant (MKL_SPBLAS_VARIANT_NAME(s_trsv)) match(construct={dispatch}, device={arch(gen)}) \
  158. append_args(interop(prefer_type("sycl","level_zero"),targetsync)) \
  159. adjust_args(need_device_ptr:x, y)
  160. #endif
  161. #pragma omp declare variant (MKL_SPBLAS_VARIANT_NAME(s_trsv)) match(construct={target variant dispatch}, device={arch(gen)})
  162. sparse_status_t mkl_sparse_s_trsv ( const sparse_operation_t operation,
  163. const float alpha,
  164. const sparse_matrix_t A,
  165. const struct matrix_descr descr,
  166. const float *x,
  167. float *y );
  168. #if (_OPENMP >= 202011)
  169. #pragma omp declare variant (MKL_SPBLAS_VARIANT_NAME(d_trsv)) match(construct={dispatch}, device={arch(gen)}) \
  170. append_args(interop(prefer_type("sycl","level_zero"),targetsync)) \
  171. adjust_args(need_device_ptr:x, y)
  172. #endif
  173. #pragma omp declare variant (MKL_SPBLAS_VARIANT_NAME(d_trsv)) match(construct={target variant dispatch}, device={arch(gen)})
  174. sparse_status_t mkl_sparse_d_trsv ( const sparse_operation_t operation,
  175. const double alpha,
  176. const sparse_matrix_t A,
  177. const struct matrix_descr descr,
  178. const double *x,
  179. double *y );
  180. /* Level 3 */
  181. /* Computes y = alpha * A * x + beta * y */
  182. #if (_OPENMP >= 202011)
  183. #pragma omp declare variant (MKL_SPBLAS_VARIANT_NAME(s_mm)) match(construct={dispatch}, device={arch(gen)}) \
  184. append_args(interop(prefer_type("sycl","level_zero"),targetsync)) \
  185. adjust_args(need_device_ptr:x, y)
  186. #endif
  187. #pragma omp declare variant (MKL_SPBLAS_VARIANT_NAME(s_mm)) match(construct={target variant dispatch}, device={arch(gen)})
  188. sparse_status_t mkl_sparse_s_mm( const sparse_operation_t operation,
  189. const float alpha,
  190. const sparse_matrix_t A,
  191. const struct matrix_descr descr,
  192. const sparse_layout_t layout,
  193. const float *x,
  194. const MKL_INT columns,
  195. const MKL_INT ldx,
  196. const float beta,
  197. float *y,
  198. const MKL_INT ldy );
  199. #if (_OPENMP >= 202011)
  200. #pragma omp declare variant (MKL_SPBLAS_VARIANT_NAME(d_mm)) match(construct={dispatch}, device={arch(gen)}) \
  201. append_args(interop(prefer_type("sycl","level_zero"),targetsync)) \
  202. adjust_args(need_device_ptr:x, y)
  203. #endif
  204. #pragma omp declare variant (MKL_SPBLAS_VARIANT_NAME(d_mm)) match(construct={target variant dispatch}, device={arch(gen)})
  205. sparse_status_t mkl_sparse_d_mm( const sparse_operation_t operation,
  206. const double alpha,
  207. const sparse_matrix_t A,
  208. const struct matrix_descr descr,
  209. const sparse_layout_t layout,
  210. const double *x,
  211. const MKL_INT columns,
  212. const MKL_INT ldx,
  213. const double beta,
  214. double *y,
  215. const MKL_INT ldy );
  216. /* Computes product of sparse matrices: C = opA(A) * opB(B), result is sparse */
  217. #if (_OPENMP >= 202011)
  218. #pragma omp declare variant (MKL_SPBLAS_VARIANT_NAME(sp2m)) match(construct={dispatch}, device={arch(gen)}) \
  219. append_args(interop(prefer_type("sycl","level_zero"),targetsync))
  220. //adjust_args(nothing)
  221. #endif
  222. #pragma omp declare variant (MKL_SPBLAS_VARIANT_NAME(sp2m)) match(construct={target variant dispatch}, device={arch(gen)})
  223. sparse_status_t mkl_sparse_sp2m ( const sparse_operation_t transA,
  224. const struct matrix_descr descrA,
  225. const sparse_matrix_t A,
  226. const sparse_operation_t transB,
  227. const struct matrix_descr descrB,
  228. const sparse_matrix_t B,
  229. const sparse_request_t request,
  230. sparse_matrix_t *C );
  231. #ifdef __cplusplus
  232. }
  233. #endif /*__cplusplus */
  234. #endif /*_MKL_SPBLAS_OMP_OFFLOAD_H_ */