Visible to Intel only — GUID: GUID-EF2A68F0-4139-40B9-A760-858515D2D481
Visible to Intel only — GUID: GUID-EF2A68F0-4139-40B9-A760-858515D2D481
DPCT1081
Message
The generated code assumes that <pointer variable> points to the global memory address space. If it points to a local or private memory address space, replace address_space::global with address_space::local or address_space::private.
Detailed Help
Intel® DPC++ Compatibility Tool tries to deduce the address space of the memory that <pointer variable> points to. If the tool cannot deduce the address space (for example, the pointer variable is used by multiple functions), the tool will use address_space::global and the warning will be emitted.
Suggestions to Fix
Check the address space of the memory that <pointer variable> points to and replace address_space::global with the correct address space.
For example, this original CUDA* code:
__device__ void bar1(double *out1, double *d) {
double i = 30;
double &d2 = *d;
sincos(i, out1, &d2);
}
__global__ void kernel(double *out1, double *out2) {
double d;
bar1(out1, &d);
*out2 = d;
}
results in the following migrated SYCL code:
void bar1(double *out1, double *d) {
double i = 30;
double &d2 = *d;
/*
DPCT1081:0: The generated code assumes that "&d2" points to the global memory
address space. If it points to a local or private memory address space,
replace "address_space::global" with "address_space::local" or
"address_space::private".
*/
*out1 = sycl::sincos(
i, sycl::address_space_cast<sycl::access::address_space::global_space,
sycl::access::decorated::yes, double>(&d2));
}
void kernel(double *out1, double *out2) {
double d;
bar1(out1, &d);
*out2 = d;
}
which is rewritten to:
void bar1(double *out1, double *d) {
double i = 30;
double &d2 = *d;
*out1 = sycl::sincos(
i, sycl::address_space_cast<sycl::access::address_space::private_space,
sycl::access::decorated::yes, double>(&d2));
}
void kernel(double *out1, double *out2) {
double d;
bar1(out1, &d);
*out2 = d;
}