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  }