DPCT1109#

メッセージ#

<language feature> は SYCL* デバイスコードでは呼び出すことができません。コードを調整する必要があります。

説明#

SYCL* デバイスコードでは、メモリーストレージ割り当て、再帰関数、仮想関数などの機能はサポートされていません。SYCL* 仕様に従うようコードを書き換えます。

修正方法の提案#

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

1__global__ void kernel_func(size_t size) { 
2 int *data = new int[size]; 
3 *data = 1; 
4} 
5 
6void foo() { 
7 Kernel_func<<<1, 1>>>(size); 
8}

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

1 /* 
2 DPCT1109:0: Memory storage allocation cannot be called in SYCL device code. You need to adjust the code. 3*/ 
4void kernel_func(size_t size) { 
5 int *data= new int[size]; 
6 *data = 1; 
7} 
8void foo() { 
9 q.parallel_for(sycl::nd_range<3>(sycl::range<3>(1, 1, 1), sycl::range<3>(1, 1, 1)), [=](sycl::nd_item<3> item_ct1) {kernel_func (data, size); };) 
10}

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

1void kernel_func(int *data, size_t size) { 
2 *data = 1; 
3} 
4 
5int *data= sycl::malloc_shared<int>(size, q);// Call the memory allocation function on the host code.6q.parallel_for(sycl::nd_range<3>(sycl::range<3>(1, 1, 1), sycl::range<3>(1, 1, 1)), [=](sycl::nd_item<3> item_ct1) { 
7 kernel_func(data, size); 
8};)