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 
6  void 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  */ 
4  void kernel_func(size_t size) { 
5   int *data= new int[size]; 
6   *data = 1; 
7  } 
8  void 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 }

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

1  void kernel_func(int *data, size_t size) { 
2   *data = 1; 
3  } 
4 
5  int *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  };)