Visible to Intel only — GUID: GUID-CC5E8A7B-DD9D-4E60-AAF9-3BA546F620A9
DPCT1000
DPCT1001
DPCT1002
DPCT1003
DPCT1004
DPCT1005
DPCT1006
DPCT1007
DPCT1008
DPCT1009
DPCT1010
DPCT1011
DPCT1012
DPCT1013
DPCT1014
DPCT1015
DPCT1016
DPCT1017
DPCT1018
DPCT1019
DPCT1020
DPCT1021
DPCT1022
DPCT1023
DPCT1024
DPCT1025
DPCT1026
DPCT1027
DPCT1028
DPCT1029
DPCT1030
DPCT1031
DPCT1032
DPCT1033
DPCT1034
DPCT1035
DPCT1036
DPCT1037
DPCT1038
DPCT1039
DPCT1040
DPCT1041
DPCT1042
DPCT1043
DPCT1044
DPCT1045
Message
Detailed Help
Suggestions to Fix
DPCT1046
DPCT1047
DPCT1048
DPCT1049
DPCT1050
DPCT1051
DPCT1052
DPCT1053
DPCT1054
DPCT1055
DPCT1056
DPCT1057
DPCT1058
DPCT1059
DPCT1060
DPCT1061
DPCT1062
DPCT1063
DPCT1064
DPCT1065
DPCT1066
DPCT1067
DPCT1068
DPCT1069
DPCT1070
DPCT1071
DPCT1072
DPCT1073
DPCT1074
DPCT1075
DPCT1076
DPCT1077
DPCT1078
DPCT1079
DPCT1080
DPCT1081
DPCT1082
DPCT1083
DPCT1084
DPCT1085
DPCT1086
DPCT1087
DPCT1088
DPCT1089
DPCT1090
DPCT1091
DPCT1092
DPCT1093
DPCT1094
DPCT1095
DPCT1096
DPCT1097
DPCT1098
DPCT1099
DPCT1100
DPCT1101
DPCT1102
DPCT1103
DPCT1104
DPCT1105
DPCT1106
DPCT1107
DPCT1108
DPCT1109
DPCT1110
DPCT1111
DPCT1112
DPCT1113
DPCT1114
DPCT1115
DPCT1116
DPCT1117
DPCT1118
Visible to Intel only — GUID: GUID-CC5E8A7B-DD9D-4E60-AAF9-3BA546F620A9
DPCT1045
Message
Migration is only supported for this API for the <matrix type> sparse matrix type. You may need to adjust the code.
Detailed Help
This warning appears if the matrix type in use is not supported or cannot be determined.
Suggestions to Fix
If the matrix type in used is:
Supported by the routine: ignore this warning.
Not supported by the routine: manually fix the code according to sparse-blas-routines.
For example, this original CUDA* code:
// -- --
// | 1 0 2 |
// A = | 0 3 4 |
// | 0 0 5 |
// -- --
// a_val = [1, 2, 3, 4, 5]
// a_row_ptr = [0, 2, 4, 5]
// a_col_ind = [0, 2, 1, 2, 2]
void test_cusparseTcsrmm(cusparseHandle_t handle, cusparseMatDescr_t descrA,
float alpha, float beta, float *b, float *c) {
// malloc and set value
float *a_val = my_malloc<float>();
int *a_row_ptr = my_malloc<int>();
int *a_col_ind = my_malloc<int>();
set_value(a_val);
set_value(a_row_ptr);
set_value(a_col_ind);
// calculate
cusparseSetMatType(descrA, CUSPARSE_MATRIX_TYPE_SYMMETRIC);
cusparseScsrmm(handle, CUSPARSE_OPERATION_NON_TRANSPOSE, 4, 2, 5, 9, &alpha,
descrA, a_val, a_row_ptr, a_col_ind, &beta, 5, b, c, 4);
// synchronize and check value
...
// free
my_free(a_val);
my_free(a_row_ptr);
my_free(a_col_ind);
}
results in the following migrated SYCL* code:
// -- --
// | 1 0 2 |
// A = | 0 3 4 |
// | 0 0 5 |
// -- --
// a_val = [1, 2, 3, 4, 5]
// a_row_ptr = [0, 2, 4, 5]
// a_col_ind = [0, 2, 1, 2, 2]
void test_cusparseTcsrmm(sycl::queue *handle,
std::shared_ptr<dpct::sparse::matrix_info> descrA,
float alpha, float beta, float *b, float *c) {
// malloc and set value
float *a_val = my_malloc<float>();
int *a_row_ptr = my_malloc<int>();
int *a_col_ind = my_malloc<int>();
set_value(a_val);
set_value(a_row_ptr);
set_value(a_col_ind);
// calculate
descrA->set_matrix_type(dpct::sparse::matrix_info::matrix_type::sy);
/*
DPCT1045:0: Migration is only supported for this API for the general sparse
matrix type. You may need to adjust the code.
*/
dpct::sparse::csrmm(*handle, oneapi::mkl::transpose::nontrans, 4, 2, 5,
&alpha, descrA, a_val, a_row_ptr, a_col_ind, &beta, 5, b,
c, 4);
// synchronize and check value
...
// free
my_free(a_val);
my_free(a_row_ptr);
my_free(a_col_ind);
}
which is rewritten to:
// -- --
// | 1 0 2 |
// A = | 0 3 4 |
// | 0 0 5 |
// -- --
// a_val = [1, 2, 3, 4, 5]
// a_row_ptr = [0, 2, 4, 5]
// a_col_ind = [0, 2, 1, 2, 2]
//
// Original matrix A is a symmetric matrix. Only upper/lower data is used.
// To make it to be a general matrix, all data in the matrix need to be filled.
// -- --
// | 1 0 2 |
// new_A = | 0 3 4 |
// | 2 4 5 |
// -- --
// new_a_val = [1, 2, 3, 4, 2, 4, 5]
// new_a_row_ptr = [0, 2, 4, 7]
// new_a_col_ind = [0, 2, 1, 2, 0, 1, 2]
void test_cusparseTcsrmm(sycl::queue *handle,
std::shared_ptr<dpct::sparse::matrix_info> descrA,
float alpha, float beta, float *b, float *c) {
// malloc and set value
float *a_val = my_malloc<float>();
int *a_row_ptr = my_malloc<int>();
int *a_col_ind = my_malloc<int>();
set_value(a_val);
set_value(a_row_ptr);
set_value(a_col_ind);
float *new_a_val = my_malloc<float>();
int *new_a_row_ptr = my_malloc<int>();
int *new_a_col_ind = my_malloc<int>();
// convert matrix data from symmetric format to general format
std::tie(new_a_val, new_a_row_ptr, new_a_col_ind) =
symmetric_to_general(a_val, a_row_ptr, a_col_ind);
my_free(a_val);
my_free(a_row_ptr);
my_free(a_col_ind);
// calculate
descrA->set_matrix_type(dpct::sparse::matrix_info::matrix_type::ge);
dpct::sparse::csrmm(*handle, oneapi::mkl::transpose::nontrans, 4, 2, 5,
&alpha, descrA, new_a_val, new_a_row_ptr,
new_a_col_ind, &beta, 5, b, c, 4);
// synchronize and check value
...
// free
my_free(new_a_val);
my_free(new_a_row_ptr);
my_free(new_a_col_ind);
}