Tutorial: Debugging with Intel® Distribution for GDB* on Linux* OS Host
This tutorial describes the basic scenarios of debugging applications on a CPU, a GPU, and an FPGA emulator using Intel® Distribution for GDB*.
Visit the Release Notes page and FAQ pages for information about key capabilities, new features, and known issues.
Prerequisites
Check the Get Started Guide and complete all setup steps depending on whether you intend to debug on a CPU or a GPU.
Debugging a Kernel on CPU and GPU: Major Differences
The behavior and commands of Intel Distribution for GDB are very close to the standard GDB. The CPU debugging experience is almost the same; however, there are differences in GPU debugging, coming from the architecture.
In comparison to debugging on a CPU, debugging a kernel on a GPU has a few differences:
Aspect |
Description |
CPU |
GPU |
---|---|---|---|
Threads and single instruction, multiple data (SIMD) lanes |
When the code is vectorized, threads process vectors of data elements in parallel. SIMD lane is a logical unit of execution for accessing data elements within an instruction. |
The debugger does not support SIMD lanes. Even if your code is vectorized, you cannot switch context to a non-default SIMD lane. |
The debugger supports threads and SIMD lanes. You can switch the context to a particular thread or SIMD lane during debugging. When kernels are compiled in debug mode, most SIMD instructions have 8 or 16 lanes (i.e. execution channels). To refer to a particular SIMD lane of a thread, use a SIMD lane identifier in the format thread ID:lane. To learn more about debugging programs with multiple threads, refer to Chapter 4.10 of Intel® Distribution for GDB* User Guide. |
The following commands behave differently during GPU debugging:
Command |
Description |
Modification |
Example/Comment |
---|---|---|---|
disassemble |
Disassemble the current function. |
GEN instructions and registers are shown. |
N/A |
|
|
SIMD lanes are supported and SIMD lane switches can occur. |
next[Switching to SIMD lane0] |
thread |
|
SIMD lanes are supported. |
|
thread apply |
Apply a command to the specified SIMD lane of the thread. |
SIMD lanes are supported. |
thread apply 2.3:* print element prints the value of the element variable for each active lane of thread 2.3. Useful for inspecting vectorized values. |
info threads |
Display information about threads with ID, including their active SIMD lanes. |
SIMD lanes are supported. |
Use the -stopped option to filter out the unavailable threads. |
info devices |
Display information about the available devices. |
New command. |
N/A |
commands |
Specify a list of commands to execute when your program stops due to a particular breakpoint. |
SIMD lanes are supported. With the /a modifier, breakpoint actions apply to all SIMD lanes that match the condition of the specified breakpoint. |
commands /aprint elementend prints the element value for all SIMD lanes that match the condition of the specified breakpoint. |
break |
Create a breakpoint at a specified line. |
|
|
To start debugging, refer to the following sections: