Tutorial

  • 2022.2
  • 04/11/2022
  • Public Content

Troubleshooting

Template Operators Cannot Be Found

The compiler omits the code of a template class method if that method is not used in the code. This is a C++ issue and may cause inconvenience when you want to invoke the omitted function. This issue is seen in SYCL* because the basic classes (
range
,
id
,
nd_range
,
accessor
, and others) are templates that have several overloaded operators. Examples:
  • p index
    Output:
    $1 = cl::sycl::id<1> = {32}
  • p index + 5
    Output:
    Could not find operator +.
As a solution, you can explicitly instantiate a template class in your source. Then the methods of the template instance are available in the binary. The instantiations can be surrounded with
#ifndef NDEBUG
and
#endif
to avoid code bloat in release builds. Example:
#ifndef NDEBUG template class cl::sycl::id<1>; template class cl::sycl::id<2>; template class cl::sycl::id<3>; template class cl::sycl::range<1>; template class cl::sycl::nd_range<1>; #endif // #ifndef NDEBUG

Accessor Operator [] Cannot Be Resolved

Elements of an
accessor
object cannot be accessed using the multi-dimensional access syntax during expression evaluation. See example below:
print anAccessor[5][3][4]
Example output:
Cannot resolve function operator[] to any overloaded instance
Instead, use an
id
object:
  • print workItemId
    Example output:
    $1 = cl::sycl::id<3> = {5, 3, 4}
  • print anAccessor[workItemId]
    Example output:
    $2 = 1234

Kernel Stops Responding

If the kernel that is offloaded to a GPU stops responding:
  1. Check whether there are any stray `gdbserver-gt` processes running in the background:
    ps -u $USER | grep gdbserver-gt
  2. Stop background `gdbserver-gt` processes, if there are any:
    killall -9 gdbserver-gt

Breakpoint Is Not Hit

  • If the breakpoints defined inside the kernel are not hit when running on a GPU, reset the GPU device (requires root access):
    1. Unload the `igfxdcd` driver
      modprobe -r igfxdcd
    2. Reset the device
      echo 0xffffffff | tee /sys/kernel/debug/dri/0/i915_wedged
    3. Load the `igfxdcd` driver again
      modprobe igfxdcd
  • If the breakpoints defined inside the kernel are not hit when running on a GPU, and Virtualization technology for directed I/O (VT-d) is enabled, disable VT-d through the BIOS menu.
    Debug companion driver is not supported with VT-d enabled.

Product and Performance Information

1

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