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