DPCT1083#

メッセージ#

移行したコードの <placeholder> サイズは、オリジナルコードとは異なる場合があります。移行したコードの割り当てメモリーサイズが正しいことを確認してください。

説明#

一部の型は、移行後のコードと移行前のコードではサイズが異なります (例: sycl::float3float3)。移行したコードで、メモリーの割り当てサイズが正しいかどうかを確認します。

以下の例では、オリジナルコードの float3 を表すため 3*sizeof(float) を使用しています。移行したコードでは、sycl::float3 のサイズが異なるため、割り当てサイズの調整が必要です。

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

1 _global_ void kernel() { extern __shared__ float3 shared_memory[]; } 
2 
3 int main() 
4 { size_t shared_size = 3 * sizeof(float); kernel<<<1, 1, shared_size>>>();...}

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

1 void kernel(uint8_t *dpct_local) 
2 { auto shared_memory = (float3 *)dpct_local; } 
3 int main() { 
4 /* 
5 DPCT1083 
6 */ 
7 size_t shared_size = 3 * sizeof(float); 
8 get_default_queue().submit([&](handler &cgh) { 
9 accessor<...> dpct_local_acc_ct1(range<1>(shared_size), cgh); 
10 cgh.parallel_for(..., 
11 [=](nd_item<3> item_ct1) { 
12 kernel(dpct_local_acc_ct1.get_pointer()); }); 
13 }); 
14 ... 15 }

このコードを以下のように手動で調整します。

1 void kernel(uint8_t *dpct_local) { auto shared_memory = (float3 *)dpct_local; } 
2 
3 int main() { 
4 size_t shared_size = 1 * sizeof(float3); 
5 get_default_queue().submit([&](handler &cgh) 
6 Unknown macro: { 
7 accessor<...> dpct_local_acc_ct1(range<1>(shared_size), cgh); cgh.parallel_for(..., [=](nd_item<3> item_ct1) { 
8 kernel(dpct_local_acc_ct1.get_pointer()); 
9 }); 
10 } 
11 ); 
12 ... 13 }

修正方法の提案#

メモリーの割り当てサイズを確認し、必要に応じて正しいサイズに置き換えます。