DPCT1010#

メッセージ#

SYCL* はエラーの報告に例外を使用するため、エラーコードは使用していません。呼び出しは 0 に置き換えられます。このコードを書き直す必要があります。

詳細な説明#

SYCL* では、エラーの報告に例外を使用しており、エラーコードは使用していません。オリジナルコードではエラーコードを取得していますが、SYCL* ではそのような機能は必要ありません。呼び出しは 0 に置き換えられます。

修正方法の提案#

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

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


1  __global__ void kernel() { 
2  ...
3  } 
4 
5  void foo() { 
6   kernel<<<1, 1>>>(); 
7   cudaDeviceSynchronize(); 
8   cudaError_t err = cudaGetLastError(); 
9   printf("%d\n", err); 
10 }

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


1  void kernel() { 
2   ... 
3  } 
4 
5  void foo() { 
6   dpct::get_default_queue().parallel_for( 
7   sycl::nd_range<3>(sycl::range<3>(1, 1, 1), sycl::range<3>(1, 1, 1)), 
8   [=](sycl::nd_item<3> item_ct1) { 
9   kernel(); 
10  }); 
11  dpct::get_current_device().queues_wait_and_throw(); 
12  /* 
13  DPCT1010:0: SYCL uses exceptions to report errors and does not use the error 
14  codes. The call was replaced with 0. You need to rewrite this code. 
15  */ 
16  int err = 0; 
17  printf("%d\n", err); 
18 }

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


1  void kernel() { 
2   ... 
3  } 
4 
5  void foo() { 
6   try { 
7   dpct::get_default_queue().parallel_for( 
8   sycl::nd_range<3>(sycl::range<3>(1, 1, 1), sycl::range<3>(1, 1, 1)), 
9   [=](sycl::nd_item<3> item_ct1) { 
10  kernel(); 
11  }); 
12  dpct::get_current_device().queues_wait_and_throw(); 
13  } catch (sycl::exception const &e) { 
14  std::cerr << e.what() << std::endl; 
15  } 
16 }