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  }