DPCT1041
目次
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 }