Visible to Intel only — GUID: GUID-8991D405-FCAA-4819-9404-9FB38A783B1B
Visible to Intel only — GUID: GUID-8991D405-FCAA-4819-9404-9FB38A783B1B
DPCT1047
Message
The meaning of <parameter name> in the <API name> is different from the <API name>. You may need to check the migrated code.
Detailed Help
In cuBLAS* and cuSolver* getrf API, the LU factorization is done as P*A=L*U; in Intel® oneAPI Math Kernel Library API, it is done as A=P*L*U. The result of the matrix P may be different.
Suggestions to Fix
If the matrix P is only used in library API, ignore this warning. If P is used other ways, you may need to adjust the value of P.
For example, this original CUDA* code:
void foo(cublasHandle_t handle, float **a_array, float **b_array, int *p_array,
int *info_array) {
cublasSgetrfBatched(handle, 2, a_array, 2, p_array, info_array, 1);
cublasSgetrsBatched(handle, CUBLAS_OP_N, 2, 2, a_array, 2, p_array, b_array,
2, info_array, 1);
}
results in the following migrated SYCL* code:
void foo(dpct::queue_ptr handle, float **a_array, float **b_array, int *p_array,
int *info_array) {
/*
DPCT1047:0: The meaning of p_array in the dpct::getrf_batch_wrapper is
different from the cublasSgetrfBatched. You may need to check the migrated
code.
*/
dpct::getrf_batch_wrapper(*handle, 2, a_array, 2, p_array, info_array, 1);
dpct::getrs_batch_wrapper(*handle, oneapi::mkl::transpose::nontrans, 2, 2,
const_cast<float const **>(a_array), 2, p_array,
b_array, 2, info_array, 1);
}
which is rewritten to:
void foo(dpct::queue_ptr handle, float **a_array, float **b_array, int *p_array,
int *info_array) {
// cublas/cusolver API getrs need the output of cublas/cusolver getrf as input.
// MKL/dpct helper API getrs need the output of MKL/dpct helper getrf as input.
// In this case, matrix P is only used as a temporary data between library API
// invocations, so the warning can be ignored.
dpct::getrf_batch_wrapper(*handle, 2, a_array, 2, p_array, info_array, 1);
dpct::getrs_batch_wrapper(*handle, oneapi::mkl::transpose::nontrans, 2, 2,
const_cast<float const **>(a_array), 2, p_array,
b_array, 2, info_array, 1);
}