DPCT1083¶
メッセージ¶
移行したコードのローカルメモリーのサイズは、オリジナルコードとは異なる場合があります。移行したコードの割り当てメモリーサイズが正しいことを確認してください。
説明¶
例えば、sycl::float3
と float3
のように、移行したコードではオリジナルコードとは異なるサイズになる型があります。移行したコードで、ローカルメモリーの割り当てサイズが正しいかどうかを確認します。
以下の例では、オリジナルコードの float3
を表すため 3*sizeof(float)
を使用しています。移行したコードでは、sycl::float3
のサイズが異なるため、割り当てサイズの調整が必要です。
例えば、以下のオリジナルコードについて考えてみます。
1 2 3 4 | _global_ void kernel() { extern __shared__ float3 shared_memory[]; }
int main()
{ size_t shared_size = 3 * sizeof(float); kernel<<<1, 1, shared_size>>>(); ... }
|
このコードは、以下の DPC++ コードに移行されます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | void kernel(uint8_t *dpct_local)
{ auto shared_memory = (float3 *)dpct_local; }
int main() {
/*
DPCT1083
*/
size_t shared_size = 3 * sizeof(float);
get_default_queue().submit([&](handler &cgh) {
accessor<...> dpct_local_acc_ct1(range<1>(shared_size), cgh);
cgh.parallel_for(...,
[=](nd_item<3> item_ct1) {
kernel(dpct_local_acc_ct1.get_pointer()); });
});
...
}
|
このコードを以下のように手動で調整します。
1 2 3 4 5 6 7 8 9 10 11 12 13 | void kernel(uint8_t *dpct_local) { auto shared_memory = (float3 *)dpct_local; }
int main() {
size_t shared_size = 1 * sizeof(float3);
get_default_queue().submit([&](handler &cgh)
Unknown macro: {
accessor<...> dpct_local_acc_ct1(range<1>(shared_size), cgh); cgh.parallel_for(..., [=](nd_item<3> item_ct1) {
kernel(dpct_local_acc_ct1.get_pointer());
});
}
);
...
}
|
修正方法の提案¶
ローカルメモリーの割り当てサイズを確認し、必要に応じて正しいサイズに置き換えます。