DPCT1046
目次
DPCT1046#
注
この診断メッセージは非推奨となり、インテル® DPC++ 互換性ツール 2023.0 以降では生成されなくなりました。
メッセージ#
<reason>により、<original API name> は移行されませんでした。コードを調整する必要があります。
詳細な説明#
mkl::blas::gemm()
では、すべてのデータタイプの組み合わせがサポートされているわけではありません。
これは、以下のいずれかが原因であると考えられます。
移行では、すべてのパラメーター値を評価できませんでした。
行列データタイプとスカラータイプの組み合わせはサポートされていません。
サポートされているデータタイプを使用して、コードを書き換えます。
修正方法の提案#
手動でデータを修正する際に使用可能なサポートされているデータ型については、『インテル® oneAPI マス・カーネル・ライブラリー (インテル® oneMKL) - データ並列 C++ デベロッパー・リファレンス』の「gemm」 (英語) を参照してください。
例えば、以下のオリジナル CUDA* コードについて考えてみます。
1 void foo(cublasHandle_t handle, float alpha, float beta, void *a, void *b,
2 void *c, cudaDataType_t type) {
3 cublasSgemmEx(handle, CUBLAS_OP_C, CUBLAS_OP_C, 2, 2, 2, &alpha, a, type, 2,
4 b, type, 2, &beta, c, type, 2);
5 }
このコードは、以下の SYCL* コードに移行されます。
1 void foo(dpct::queue_ptr handle, float alpha, float beta, void *a, void *b,
2 void *c, dpct::library_data_t type) {
3 /*
4 DPCT1046:0: The cublasSgemmEx was not migrated because not all values of
5 parameters could be evaluated in migration.You need to adjust the code.
6 */
7 cublasSgemmEx(handle, oneapi::mkl::transpose::conjtrans,
8 oneapi::mkl::transpose::conjtrans, 2, 2, 2, &alpha, a, type, 2,
9 b, type, 2, &beta, c, type, 2);
10 }
このコードは次のように書き換えられます。
1 void foo(dpct::queue_ptr handle, float alpha, float beta, void *a, void *b,
2 void *c, dpct::library_data_t type) {
3 switch (type) {
4 case dpct::library_data_t::real_bfloat16: {
5 oneapi::mkl::blas::column_major::gemm(
6 *handle, oneapi::mkl::transpose::conjtrans,
7 oneapi::mkl::transpose::conjtrans, 2, 2, 2, alpha,
8 (oneapi::mkl::bfloat16 *)a, 2, (oneapi::mkl::bfloat16 *)b, 2, beta,
9 (oneapi::mkl::bfloat16 *)c, 2);
10 break;
11 }
12 case dpct::library_data_t::real_half: {
13 oneapi::mkl::blas::column_major::gemm(
14 *handle, oneapi::mkl::transpose::conjtrans,
15 oneapi::mkl::transpose::conjtrans, 2, 2, 2, alpha, (sycl::half *)a, 2,
16 (sycl::half *)b, 2, beta, (sycl::half *)c, 2);
17 break;
18 }
19 case dpct::library_data_t::real_float: {
20 oneapi::mkl::blas::column_major::gemm(
21 *handle, oneapi::mkl::transpose::conjtrans,
22 oneapi::mkl::transpose::conjtrans, 2, 2, 2, alpha, (float *)a, 2,
23 (float *)b, 2, beta, (float *)c, 2);
24 break;
25 }
26 default:
27 throw std::runtime_error("the data type is unsupported");
28 }
29 }