DPCT1010#
メッセージ#
SYCL* はエラーの報告に例外を使用するため、エラーコードは使用していません。呼び出しは 0 に置き換えられます。このコードを書き換える必要があります。
説明#
SYCL* では、エラーの報告に例外を使用しており、エラーコードは使用していません。元のコードでは、エラーコードを取得しようとしていますが、SYCL* ではそのような機能は必要ありません。呼び出しは 0 に置き換えられます。
修正方法の提案#
コードを修正する必要があります。
例えば、以下のオリジナル CUDA* コードについて考えてみます。
1__global__ void kernel() {
2...3}
4
5void foo() {
6 kernel<<<1, 1>>>();
7 cudaDeviceSynchronize();
8 cudaError_t err = cudaGetLastError();
9 printf("%d\n", err);
10}
このコードは、以下の SYCL* コードに移行されます。
1void kernel() {
2 ... 3}
4
5void 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}
このコードは次のように書き換えられます。
1void kernel() {
2 ... 3}
4
5void 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}