DPCT1134#

Message#

The tool cannot deduce the consumer API (dpct::sparse::csrgemm) of this API, and this API has 2 arguments depending on the 8th and the 12th parameters of the consumer API. Please replace the 2 arguments tagged as dpct_placeholder with the corresponding value.

Detailed Help#

The output of dpct::sparse::csrgemm_nnz is a number representing the NNZ (number of non-zero). This number is usually used as the size for memory allocation which will be used by consumer API dpct::sparse::csrgemm. The API dpct::sparse::csrgemm_nnz has 2 arguments depending on the 8th and the 12th parameters of the related consumer API dpct::sparse::csrgemm. The tool cannot detect the relationship. Users need to manually fill in those 2 arguments.

Suggestions to Fix#

For example, this original CUDA* code:

 1void bar(cusparseHandle_t handle, cusparseOperation_t trans_a,
 2         cusparseMatDescr_t descr_a, int c_nnz, cusparseMatDescr_t descr_b,
 3         cusparseMatDescr_t descr_c, const float *val_a_s, const int *row_ptr_a,
 4         const int *col_ind_a, const float *val_b_s, const int *row_ptr_b,
 5         const int *col_ind_b, float *val_c_s, int *row_ptr_c, int *col_ind_c) {
 6  cusparseScsrgemm(handle, CUSPARSE_OPERATION_NON_TRANSPOSE,
 7                   CUSPARSE_OPERATION_NON_TRANSPOSE, 3, 4, 3, descr_a, 4,
 8                   val_a_s, row_ptr_a, col_ind_a, descr_b, 5, val_b_s,
 9                   row_ptr_b, col_ind_b, descr_c, val_c_s, row_ptr_c,
10                   col_ind_c);
11}
12
13void foo(cusparseHandle_t handle, cusparseOperation_t trans_a,
14         cusparseMatDescr_t descr_a, int c_nnz, cusparseMatDescr_t descr_b,
15         cusparseMatDescr_t descr_c, const float *val_a_s, const int *row_ptr_a,
16         const int *col_ind_a, const float *val_b_s, const int *row_ptr_b,
17         const int *col_ind_b, float *val_c_s, int *row_ptr_c, int *col_ind_c) {
18  cusparseXcsrgemmNnz(handle, CUSPARSE_OPERATION_NON_TRANSPOSE,
19                      CUSPARSE_OPERATION_NON_TRANSPOSE, 3, 4, 3, descr_a, 4,
20                      row_ptr_a, col_ind_a, descr_b, 5, row_ptr_b, col_ind_b,
21                      descr_c, row_ptr_c, &c_nnz);
22  bar(handle, trans_a, descr_a, c_nnz, descr_b, descr_c, val_a_s, row_ptr_a,
23      col_ind_a, val_b_s, row_ptr_b, col_ind_b, val_c_s, row_ptr_c, col_ind_c);
24}

results in the following migrated SYCL code:

 1void bar(dpct::sparse::descriptor_ptr handle, oneapi::mkl::transpose trans_a,
 2         std::shared_ptr<dpct::sparse::matrix_info> descr_a, int c_nnz,
 3         std::shared_ptr<dpct::sparse::matrix_info> descr_b,
 4         std::shared_ptr<dpct::sparse::matrix_info> descr_c,
 5         const float *val_a_s, const int *row_ptr_a, const int *col_ind_a,
 6         const float *val_b_s, const int *row_ptr_b, const int *col_ind_b,
 7         float *val_c_s, int *row_ptr_c, int *col_ind_c) {
 8  dpct::sparse::csrgemm(handle, oneapi::mkl::transpose::nontrans,
 9                        oneapi::mkl::transpose::nontrans, 3, 4, 3, descr_a,
10                        val_a_s, row_ptr_a, col_ind_a, descr_b, val_b_s,
11                        row_ptr_b, col_ind_b, descr_c, val_c_s, row_ptr_c,
12                        col_ind_c);
13}
14
15 void foo(dpct::sparse::descriptor_ptr handle, oneapi::mkl::transpose trans_a,
16          std::shared_ptr<dpct::sparse::matrix_info> descr_a, int c_nnz,
17          std::shared_ptr<dpct::sparse::matrix_info> descr_b,
18          std::shared_ptr<dpct::sparse::matrix_info> descr_c,
19          const float *val_a_s, const int *row_ptr_a, const int *col_ind_a,
20          const float *val_b_s, const int *row_ptr_b, const int *col_ind_b,
21          float *val_c_s, int *row_ptr_c, int *col_ind_c) {
22   /*
23   DPCT1134:0: The tool cannot deduce the consumer API ("dpct::sparse::csrgemm")
24   of this API, and this API has 2 arguments depending on the 8th and the 12th
25   parameters of the consumer API. Please replace the 2 arguments tagged as
26   "dpct_placeholder" with the corresponding value.
27   */
28   dpct::sparse::csrgemm_nnz(handle, oneapi::mkl::transpose::nontrans,
29                             oneapi::mkl::transpose::nontrans, 3, 4, 3, descr_a,
30                             4, dpct_placeholder, row_ptr_a, col_ind_a, descr_b,
31                             5, dpct_placeholder, row_ptr_b, col_ind_b, descr_c,
32                             row_ptr_c, &c_nnz);
33   bar(handle, trans_a, descr_a, c_nnz, descr_b, descr_c, val_a_s, row_ptr_a,
34       col_ind_a, val_b_s, row_ptr_b, col_ind_b, val_c_s, row_ptr_c, col_ind_c);
35 }

which can be rewritten to:

 1void bar(dpct::sparse::descriptor_ptr handle, oneapi::mkl::transpose trans_a,
 2         std::shared_ptr<dpct::sparse::matrix_info> descr_a, int c_nnz,
 3         std::shared_ptr<dpct::sparse::matrix_info> descr_b,
 4         std::shared_ptr<dpct::sparse::matrix_info> descr_c,
 5         const float *val_a_s, const int *row_ptr_a, const int *col_ind_a,
 6         const float *val_b_s, const int *row_ptr_b, const int *col_ind_b,
 7         float *val_c_s, int *row_ptr_c, int *col_ind_c) {
 8  dpct::sparse::csrgemm(handle, oneapi::mkl::transpose::nontrans,
 9                        oneapi::mkl::transpose::nontrans, 3, 4, 3, descr_a,
10                        val_a_s, row_ptr_a, col_ind_a, descr_b, val_b_s,
11                        row_ptr_b, col_ind_b, descr_c, val_c_s, row_ptr_c,
12                        col_ind_c);
13}
14
15void foo(dpct::sparse::descriptor_ptr handle, oneapi::mkl::transpose trans_a,
16         std::shared_ptr<dpct::sparse::matrix_info> descr_a, int c_nnz,
17         std::shared_ptr<dpct::sparse::matrix_info> descr_b,
18         std::shared_ptr<dpct::sparse::matrix_info> descr_c,
19         const float *val_a_s, const int *row_ptr_a, const int *col_ind_a,
20         const float *val_b_s, const int *row_ptr_b, const int *col_ind_b,
21         float *val_c_s, int *row_ptr_c, int *col_ind_c) {
22  dpct::sparse::csrgemm_nnz(handle, oneapi::mkl::transpose::nontrans,
23                            oneapi::mkl::transpose::nontrans, 3, 4, 3, descr_a,
24                            4, val_a_s, row_ptr_a, col_ind_a, descr_b, 5,
25                            val_b_s, row_ptr_b, col_ind_b, descr_c, row_ptr_c,
26                            &c_nnz);
27  bar(handle, trans_a, descr_a, c_nnz, descr_b, descr_c, val_a_s, row_ptr_a,
28      col_ind_a, val_b_s, row_ptr_b, col_ind_b, val_c_s, row_ptr_c, col_ind_c);
29}