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 }