Intel® Distribution for GDB* 2023 Release Notes

ID 792169
Updated 7/6/2023
Version 2023.2
Public

author-image

By

Where to Find the Release

Intel® Distribution for GDB* is available as part of the Intel® oneAPI Base Toolkit. To download the Intel® oneAPI Base Toolkit and learn more about toolkits, visit the Intel® oneAPI Toolkits main page.

Visit Intel® oneAPI Toolkit and Component Versioning Schema for more information about semantic versioning and how it is used with Intel® oneAPI.

Release Notes for Linux* OS

Major Features

  • Multi-target: The debugger can orchestrate multiple targets of different architectures. This feature allows you to debug the "host" portion and the "kernel" of a SYCL* program in the same Intel® Distribution for GDB* session.
  • Auto-attach: The debugger automatically creates an inferior that attaches itself to the Intel® Graphics Technology target to be able to receive events and control the GPU for native debugging.
  • Thread SIMD lanes: The debugger displays SIMD lane information for the GPU threads on the command line interface. You can switch between lanes.
  • Support for debugging a kernel offloaded to a CPU, GPU, or FPGA-emulation device.
  • The debugger is based on the GDB* 13.1 release.

Key Capabilities

  • Support for Intel® Iris® Xe Graphics.
  • Automatically detecting JIT-compiled, or dynamically loaded, kernel code for debugging.
  • Defining breakpoints (both inside and outside of a kernel) to halt the execution of the program.
  • Inspecting and changing the values of variables in the application.
  • Inspecting and changing register values.
  • Listing the threads; switching the current thread context.
  • Listing active SIMD lanes; switching the current SIMD lane context per thread.
  • Evaluating and printing the values of expressions in multiple threads and SIMD lane contexts.
  • Disassembling the machine instructions.
  • Displaying and navigating the function call-stack.
  • Source- and instruction-level stepping.
  • Non-stop and all-stop debug mode.
  • Recording the execution using Intel® Processor Trace (Intel® PT).
  • Printing of Intel® Processor Trace (Intel® PT) PTWRITE payloads in the instruction history and function-call history.
  • Reading and writing Intel® Advanced Matrix Extensions (Intel® AMX) registers.

System Requirements

Documentation

  • Switched from DCD debug driver to Intel® oneAPI Level Zero (Level Zero) (currently only supporting discrete GPUs).
  • Bumped GDB version to 12.1. See changes here.
  • Added a new option -stopped to info threads to print stopped threads only.
  • Added the --qid option to the -thread-info MI command to print qualified-id of threads.
  • Fixed issue with corrupted debug sessions after detaching from GPU.
  • Improved error reporting, debugging experience, and usability overall.
  • Various bug fixes and performance improvements.
  • Added the set|show suppress-mi-notifications command which guards suppression of some MI notifications. Check help set|show suppress-mi-notifications for more info.
  • Added the --stopped option to the -thread-info MI command to print stopped threads only.
  • The Array Transform and Jacobi samples of the debugger now use the ONEAPI_DEVICE_SELECTOR environment variable to select a device instead of a command-line argument.
  • The "Channel Enable" (ce) register is now available in the register list of the GPU target. The "Execution Mask" (emask) register is deprecated; ce should be used instead.
  • Various bug fixes and performance improvements, including the following: 
    • Fixed occasionally reporting an arbitrary thread as unavailable after resuming the debuggee program.
    • Fixed stopping on module load events using the set stop-on-solib-events 1 command, which allows the user to inspect the newly loaded kernel prior to submission of a workload.
    • Fixed a gdbserver-ze assertion violation due to a race condition in non-stop mode.
    • Improved performance when hitting a breakpoint with a large number of threads and resuming these stopped threads.
    • Improved performance for single-stepping statements via the next and step commands.
    • Fixed GDB prompt being displayed prematurely when attaching to a live process before the Intel® oneAPI Level Zero backend is initialized.
    • Fixed SIMD wildcard range in thread apply <thread range>:*: unavailable threads are ignored.
    • Renamed labels of unavailable threads in info threads from (inactive) to (unavailable).

Changes in 2023.2 Release 

  • Removed Eclipse plugin, as Eclipse can now be configured to use gdb-oneapi natively. See Using Eclipse IDE for details.
  • Rebased on GDB version 13.1. See the changes here.
  • Removed the DCD-based gdbserver target from the code base.
  • Improve error message printing during auto-attach for GPU offload debugging.
  • Added support for reading and writing shared local memory (SLM) via sycl::local_accessor and generic pointers.
  • Added convenience variables for work-item coordinates: $_thread_workgroup$_workitem_local_id$_workitem_global_id.
  • Various bug fixes and improvements, including the following:
  • Fixed a problem where a thread could run until termination and become unavailable as a result of executing the next command when scheduler-locking was set to off or replay.
  • Reduced the overhead of the info threads command. The improvement is applicable when frame argument values are not needed to be printed. This can be achieved by changing the setting globally using set print frame-arguments none, or by using with print frame-arguments none -- info threads for a single command execution.

Known Issues and Limitations

  • If the debugger is quit before a workload under debug is executed until it finishes, the system may go into a state where breakpoints are not hit anymore. finish / step / continue commands might take a long time to complete. Rebooting the machine will resolve those issues. Please update to the next available driver as soon as it becomes available. If you still experience issues, try setting those environment variables:
    • export NEOReadDebugKeys=1
    • export EnableRecoverablePageFaults=0
    • export EnableImmediateVmBindExt=1

These are experimental keys only recommended for debugging purposes and not to be included on production scripts or release packages.

  • For OpenMP* #pragma omp single  blocks in C++, private variables cannot be inspected and breakpoints may occasionally not hit the expected line.
  • During the expression evaluation, an element of an accessor object cannot be accessed using the multi-dimensional access syntax. See an error example below:
(gdb) print anAccessor[5][3][4]
Cannot resolve function operator[] to any overloaded instance

You can use the id object instead:

(gdb) print workItemId
$1 = cl::sycl::id<3> = {5, 3, 4}
(gdb) print anAccessor[workItemId]
$2 = 1234
  • With kernels older than 5.9, hanging behavior may be seen for devices with id 0x3E98. The GPU can be programmatically reset for recovery.
  • Compilers may emit trampoline functions, which do not exist in the source code, but can be visible in the backtrace and step commands.

On GPU devices:

  • GDB might occasionally return the message "Cannot execute this command while the target is running". Ignore the message as it should not affect further debugging.
  • If you define a breakpoint at a location before a kernel (inside the host code), the breakpoint is also defined at the start of the kernel. This is similar to defining a breakpoint at a comment line or an empty line: in these cases, the breakpoint is defined for the next source line.
  • If the currently selected SIMD lane of a thread becomes inactive, GDB might silently switch the focus to the first active SIMD lane in this thread.
  • Dereferencing sycl::multi_ptr is not supported.
  • Applications that use unified shared memory (USM) may appear as raising a SIGSEGV when a USM-allocated memory is being accessed. This is a mechanism used by the runtime to trigger memory migration. In such cases, sending the signal back to the application resumes the program. For this, use GDB's signal SIGSEGV command.
  • backtrace may fail with error PC not saved, when inside OpenMP parallel for loop with a large number of iterations. To get a proper backtrace, limit the number of parallel threads in the loop by using num_teams and thread_limit.
  • The non-stop mode is not supported on systems with multiple (sub)devices. The ZE_AFFINITY_MASK environment variable can be used for limiting the system to a single subdevice.

Release Notes for Windows* OS

Major Features

  • Support for debugging a kernel offloaded to a CPU, GPU, or FPGA-emulation device.
  • Integration into Microsoft Visual Studio* interface to enable GPU remote debugging. This feature allows you to debug the "host" portion and the "kernel" of a SYCL* program in the same VS remote debugging session.

Key Capabilities

  • Inserting a breakpoint inside a kernel and stopping when the breakpoint is hit by a thread
  • Inspecting SIMD lanes
  • Inspecting device informaton
  • Inspecting local variables
  • Source-level stepping
  • Backtracing function calls
  • Examining threads
  • Reading registers
  • Disassembling
  • Automatic launch of gdbserver-ze
  • Support for debugging OpenCL and SYCL* programs
  • Support for debugging OpenMP* C++ kernel code for CPU and GPU offloads.
  • Ability to connect and debug a target outside the domain network.

System Requirements

You can download the latest driver at Intel® Arc™ & Iris® Xe Graphics - WHQL - Windows.

Documentation

To set up the debugger, refer to the Get Started with Debugging SYCL*

  • Debug Companion Driver (DCD) is deprecated and all the libraries that use DCD and/or related components are removed.
  • Removed target installer (Intel® Distribution for GDB* Target).
  • GPU debugging is not supported for Windows due to DCD deprecation and missing support in Intel® oneAPI Level Zero (Level Zero).
  • GPU debugging is supported for Windows with Intel® oneAPI Level Zero (Level Zero).
  • Target installer (Intel® Distribution for GDB* Target) is available with Intel® oneAPI Base Toolkit.
  •  Introduction of new Intel® oneAPI GPU Thread window for visual representation of threads, lanes and device info when performing GPU debugging.
  • Introduction of new SIMD lane toolbar to give user the flexibility to change SIMD lanes on a stopped thread during GPU debugging. This is in addition to the Intel® oneAPI GPU Thread window where user can perform the same operation.
  • Introduction of new SIMD lane conditional breakpoint to stop on SIMD lane specific conditions.
  • The "Channel Enable" (ce) register is now available in the register list of the GPU target. The "Execution Mask" (emask) register is deprecated; ce should be used instead.

Changes in 2023.2 Release 

  • Includes performance improvement and bug fixes.
  • Ability to debug GPU locally on a single machine.
  • Removed the DCD-based gdbserver target from the code base.
  • Following improvements were made to the Intel® oneAPI GPU Thread window:
    • Add filter feature.
    • Add option to group by columns.
    • Addition of workgroup ID, local ID and global ID.
  • Added support for debugging assumed-rank arrays in Visual Studio with ifx compiler.
  • Breakpoint hit count in the Breakpoint window now increments correctly.
  • localIDglobalID, and workgroupID have been added in the oneAPI Visual Studio extension.
  • Now you can debug on a single machine in Windows. A remote debugging machine is no longer required.
  • Thread filtering is now supported in Visual Studio when debugging a SYCL kernel.

Known Issues and Limitations

On GPU devices:

  • With a two-machine setup, when a debugging session is interrupted abruptly during kernel offload to a GPU, there is a possibility that further debugging is not possible. This is often indicated by deployment errors despite the Visual Studio Remote Debugger session running on the target. In this case, restarting the target machine should resolve the issue.
  • Inferior calls (invocation of kernel functions from inside the debugger for expression evaluation) are not supported.
  • If you define a breakpoint at a location before the kernel (inside the host code), the breakpoint is also defined at the start of the kernel. This is similar to defining a breakpoint at a comment line or an empty line: in these cases, the breakpoint is defined for the next source line.

On CPU and GPU devices:

  • For OpenMP #pragma omp single blocks in C++, private variables cannot be inspected and breakpoints may occasionally not hit the expected line.
  • Compilers may emit trampoline functions, which do not exist in the source code, but can be visible when stepping or when examining the call stack.

On FPGA emulator devices:

  • For debugging on FPGA emulator, ahead-of-time (AoT) compilation is not supported. Ensure that in Project Properties > SYCL   Enable FPGA Workflows is set to no.
  • For debugging on an FPGA emulator, no support for OpenMP.

On CPU devices and FPGA emulator devices:

  • In Microsoft Visual Studio*, the following message is displayed on the output window during debugging the kernel offloaded to a CPU/FPGA device. "INTEL_GT_DEBUGGER: (257891284) Unable to execute command. The MIEngine is not currently debugging any process." This can be ignored and should not have any effect on the program execution and further debugging
  • It is recommended to disable the GPU debugger for smooth debugging on CPU and FPGA emulator devices.

Previous oneAPI Releases

Notices and Disclaimers

Intel technologies may require enabled hardware, software or service activation.

No product or component can be absolutely secure.

Your costs and results may vary.

© Intel Corporation. Intel, the Intel logo, and other Intel marks are trademarks of Intel Corporation or its subsidiaries. Other names and brands may be claimed as the property of others.

No license (express or implied, by estoppel or otherwise) to any intellectual property rights is granted by this document.

The products described may contain design defects or errors known as errata which may cause the product to deviate from published specifications. Current characterized errata are available on request.

Intel disclaims all express and implied warranties, including without limitation, the implied warranties of merchantability, fitness for a particular purpose, and non-infringement, as well as any warranty arising from course of performance, course of dealing, or usage in trade.