DPCT1041#

メッセージ#

SYCL* では、エラーの報告に例外を使用しており、エラーコードは使用していません。<statement name> 文 では、エラーコードの代わりに 0 が使用されます。このコードを書き直す必要があるかもしれません。

詳細な説明#

SYCL* では、エラーの報告に例外を使用しており、エラーコードは使用していません。元のコードでは、エラーコードを取得しようとしていますが、SYCL* ではそのような機能は必要ありません。次の文では、エラーコードの代わりに 0 が使用されます。

  • if

  • while

  • do

  • for

  • switch

  • return

  • 関数型マクロ

修正方法の提案

このコードを書き換える必要があります。

例えば、以下のオリジナル CUDA* コードについて考えてみます。


1   void foo() { 
2    ...
3    int N; 
4    cublasHandle_t handle; 
5    float alpha, beta; 
6    float *a, *b, *c; 
7    if (int status = cublasSgemm(handle, CUBLAS_OP_N, CUBLAS_OP_N, N, N, N, &alpha, 
8    a, N, b, N, &beta, c, N)) { 
9     printf("cublasSgemm failed\n"); 
10   } 
11    ... 
12  }

このコードは、以下の SYCL* コードに移行されます。


1   void foo() try { 
2    ... 
3    int N; 
4    dpct::queue_ptr handle; 
5    float alpha, beta; 
6    float *a, *b, *c; 
7    { 
8     auto a_buf_ct1 = dpct::get_buffer<float>(a); 
9     auto b_buf_ct2 = dpct::get_buffer<float>(b); 
10    auto c_buf_ct3 = dpct::get_buffer<float>(c); 
11    oneapi::mkl::blas::column_major::gemm( 
12    *handle, oneapi::mkl::transpose::nontrans, 
13    oneapi::mkl::transpose::nontrans, N, N, N, alpha, a_buf_ct1, N, 
14    b_buf_ct2, N, beta, c_buf_ct3, N); 
15   } 
16   /* 
17   DPCT1041:0: SYCL uses exceptions to report errors, it does not use error 
18   codes.0 is used instead of an error code in an if statement.You may need to 
19   rewrite this code.
20   */ 
21   if (int status = 0) { 
22    printf("cublasSgemm failed\n"); 
23   } 
24   ... 
25  } 
26  catch (sycl::exception const &exc) { 
27    std::cerr << exc.what() << "Exception caught at file:" << __FILE__ 
28    << ", line:" << __LINE__ << std::endl; 
29    std::exit(1); 
30  }

このコードは次のように書き換えられます。


1   void foo() try { 
2    ... 
3    int N; 
4    dpct::queue_ptr handle; 
5    float alpha, beta; 
6    float *a, *b, *c; 
7    { 
8    auto a_buf_ct1 = dpct::get_buffer<float>(a); 
9    auto b_buf_ct2 = dpct::get_buffer<float>(b); 
10   auto c_buf_ct3 = dpct::get_buffer<float>(c); 
11   oneapi::mkl::blas::column_major::gemm( 
12   *handle, oneapi::mkl::transpose::nontrans, 
13   oneapi::mkl::transpose::nontrans, N, N, N, alpha, a_buf_ct1, N, 
14   b_buf_ct2, N, beta, c_buf_ct3, N); 
15   } 
16   ... 
17  } 
18  catch (sycl::exception const &exc) { 
19   std::cerr << exc.what() << "Exception caught at file:" << __FILE__ 
20   << ", line:" << __LINE__ << std::endl; 
21   std::exit(1); 
22  }