DPCT1083#
メッセージ#
移行したコードの <placeholder>
サイズは、オリジナルコードとは異なる場合があります。移行したコードの割り当てメモリーサイズが正しいことを確認してください。
説明#
一部の型は、移行後のコードと移行前のコードではサイズが異なります (例: sycl::float3
と float3
)。移行したコードで、メモリーの割り当てサイズが正しいかどうかを確認します。
以下の例では、オリジナルコードの 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 }
修正方法の提案#
メモリーの割り当てサイズを確認し、必要に応じて正しいサイズに置き換えます。