DPCT1109
目次
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 };)