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}