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 }