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};)