Tutorial: Debugging with Intel® Distribution for GDB* on Linux* OS Host¶
This tutorial describes basic scenarios of debugging applications on a CPU, GPU, and an FPGA emulator using Intel® Distribution for GDB*.
Prerequisites¶
Check the Get Started Guide and complete all setup steps depending on whether you aim at debugging 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*. 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 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. |
Inferior calls |
Inferior calls are calls to kernel functions from inside the debugger as part of expression evaluation. |
Inferior calls are supported. |
Inferior calls are not supported. |
The following commands behave differently during GPU debugging:
Command |
Description |
Modification |
Example |
---|---|---|---|
|
Disassemble the current function. |
GEN instructions and registers are shown. |
N/A |
|
|
SIMD lanes are supported and SIMD lane switches can occur. |
|
|
Switch context to the SIMD lane of the specified thread. |
SIMD lanes are supported. |
|
|
Apply a command to the specified SIMD lane of the thread. |
SIMD lanes are supported. |
|
|
Display information about threads with ID, including their active SIMD lanes. |
SIMD lanes are supported. |
N/A |
|
Specify a list of commands to execute when your program stops due to a particular breakpoint. |
SIMD lanes are supported. With the |
|
|
Create a breakpoint at a specified line. |
|
|
To start debugging, refer to the following sections: