Developer Guide and Reference

  • 2021.4
  • 09/27/2021
  • Public Content

DPCT1083

Message

The size of local memory in the migrated code may be different from the original code. Check that the allocated memory size in the migrated code is correct.

Detailed Help

Some types have a different size in the migrated code than in the original code, for example
sycl::float3
compared to
float3
. Check if the allocated size of local memory is correct in the migrated code.
In the example below,
3*sizeof(float)
is used to represent the size of
float3
in the original code. In the migrated code the size of
sycl::float3
is different, so the allocated size needs adjustment.
For example, this original code:
_global_ void kernel() { extern __shared__ float3 shared_memory[]; } int main() { size_t shared_size = 3 * sizeof(float); kernel<<<1, 1, shared_size>>>(); ... }
results in the following migrated DPC++ code:
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()); }); }); ... }
which is manually adjusted to:
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()); }); } ); ... }

Suggestions to Fix

Check the allocated size of local memory and replace it with the correct size if necessary.

Product and Performance Information

1

Performance varies by use, configuration and other factors. Learn more at www.Intel.com/PerformanceIndex.