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 }