Contents
IA-32/Intel® 64 Architecture debugging
Intel® Xeon Phi coprocessor debugging
Intel® Debugger for Heterogeneous Compute
The GNU* Project Debugger (GDB) provided with the Intel® Parallel Studio XE Composer Edition is based on GDB with enhancements provided by Intel.
It comes in different versions:
Debug applications natively on IA-32 or Intel® 64 Architecture systems.
Always source the following script in the same environment where you use the debugger:
source <install-dir>/bin/compilervars.sh
<install_dir>
is the installation
directory, by default, it is:
/opt/intel/<suitename>
$HOME/intel/<suitename>
For other prerequisites, new debugger features, hardware and software requirements, and known issues refer to the release notes.
To debug applications natively on IA-32 or Intel® 64 Architecture systems, start GDB with the following command:
gdb-ia
The actual debugger usage is the same as for the GNU* Project Debugger. Extensions for IA-32/Intel® 64Architecture are described in the debugger documentation.
Debug applications remotely on Intel® Xeon Phi coprocessor systems.
The debugger runs on a host system and a debug agent (gdbserver) runs on the coprocessor. There are two options:
Always source the following script in the same environment where you use the debugger:
source <install-dir>/bin/compilervars.sh
<install_dir>
is the installation
directory, by default, it is:
/opt/intel/<suitename>
$HOME/intel/<suitename>
For other prerequisites, new debugger features, hardware and software requirements, and known issues refer to the release notes.
Debugging applications for the Intel® Xeon Phi coprocessor is different to debugging local applications, because of the difference of host and target:
The host is running the debugger GNU* GDB. This system can be the host containing the coprocessor cards or any other development host.
The target, here the coprocessor itself, executes a debug agent (gdbserver) to which the host connects to.
For more information on debugging on the Intel® Xeon Phi coprocessor, see also
http://software.intel.com/en-us/articles/debugging-intel-xeon-phi-applications-on-linux-host
You can either start the debugger from the command line or from Eclipse* IDE.
$ scp <install-dir>/debugger_2017/gdb/targets/mic/bin/gdbserver
"mic0:/tmp"
$ gdb-mic(gdb) target extended-remote | ssh mic0 /tmp/gdbserver --multi –
(gdb) file <path_on_host>/application
(gdb) set remote exec-file <path_on_target>/application
(gdb) file <path_on_host>/application
(gdb) attach <pid>
<install_dir>
is the installation
directory, by default, it is:
/opt/intel/<suitename>
$HOME/intel/<suitename>
AMPLXE_COI_DEBUG_SUPPORT=TRUE
MYO_WATCHDOG_MONITOR=-1
<install-dir>/ide_support_2017/eclipse/gdb_xe
.Complete the installation of the plugin.
Restart Eclipse* IDE.
Select Run > Debug Configurations and create a new debug configuration by double-clicking C/C++ MIC Offload Application on the left side bar of the dialog box.
For example,
Luna
-http://download.eclipse.org/releases/luna.
main__
Debug parts of the code that gets executed on an Intel® integrated GPU applications
remotely. The debugger
runs on a host system and a debug agent (gdbserver-igfx)
runs on the target
system.
There are two options:
gdb-igfx
.Required Hardware
Two systems are required for debugging code running on the GPU. The main reason for this requirement is that video output from the GPU could be interrupted during debugging, which would make an IDE integrated debugger impossible to use on a single system.
The currently support target CPUs are Intel 4th, 5th and 6th Generation Core processors with integrated graphics. The detailed target system setup is detailed below.
The host system can be any stable, relatively recent Linux distribution with no special requirements to host hardware. For this description the host system is assumed to be CentOS 7, but other systems work as well.
Both systems should be able to communicate freely with each other over TCP/IP networking, ideally within the same sub-net and a Domain Name Server.
In addition, it is required to have the ability to elevate privileges using "sudo" or "su" commands for the purpose of installation of required packages.
For other prerequisites, new debugger features, hardware and software requirements, and known issues refer to the release notes..
Required Software Packages
This target setup description uses CentOS* 7 as the base installation. Currently only 64-bit versions are supported.
Target:
sudo yum -y install epel-release
sudo yum -y update
sudo yum -y group install "Development Tools"
sudo yum -y install pciutils redhat-lsb nfs-utils mesa-dri-drivers rpm-build redhat-rpm-config
\
asciidoc hmaccalc perl-ExtUtils-Embed pesign xmlto audit-libs-devel binutils-devel
elfutils-devel \
elfutils-libelf-devel newt-devel numactl-devel pciutils-devel python-devel zlib-devel
net-tools \
cmake ncurses-devel wget dkms
sudo usermod -a -G video $USER
sudo reboot
Note:
This NFS sharing setup is not secure. Other systems may connect to the NFS server
and access files.
Please refer to external documentation for more information about how to secure an NFS
server.
Target:
mkdir shared
sudo mkdir -p /export/shared
sudo chown $USER.$USER /export/shared
sudo sh -c 'echo "/export *(rw,fsid=0,insecure,no_subtree_check,async)" >>/etc/exports'
sudo sh -c 'echo "/export/shared *(rw,nohide,insecure,no_subtree_check,async)" >>/etc/exports'
sudo sh -c 'echo `pwd`/shared /export/shared none rw,bind 0 0 >>/etc/fstab'
sudo mount -a
sudo firewall-cmd --permanent --add-port=2049/tcpsudo systemctl enable rpcbind
sudo systemctl enable nfs-server
sudo systemctl enable nfs-lock
sudo systemctl enable nfs-idmap
sudo systemctl restart rpcbind
sudo systemctl restart nfs-server
sudo systemctl restart nfs-lock
sudo systemctl restart nfs-idmap
Host:
cd ~
mkdir shared
sudo mount
-t nfs4 igfx-target:/shared ~/shared
Host:
mkdir -p ~/shared/drivers
cd
~/shared/drivers
cp
<driver-file-location>/intel-linux-media_<distribution>.<version-number>_64bit.tar.gz
./
Note: If the latest packages installed on the target system have higher version
numbers than the files provided with the driver package, edit the file install_sdk_UMD_CentOS.sh
by adding --oldpackage
to the parameters for rpm. So the line should
read rpm -Uvh --oldpackage \
.
There can be a similar problem with the kernel rpm that gets created by the build_kernel_rpm_CentOS.sh
script, if a newer kernel version already exists on the target system. In that case
install the kernel rpm packages on the target using:
Target:
sudo rpm -i --oldpackage rpmbuild/RPMS/x86_64/kernel-3.10.0-229.1.2.47109.MSSr6.el7.centos.x86_64.rpm
rpmbuild/RPMS/x86_64/kernel-devel-3.10.0-229.1.2.47109.MSSr6.el7.centos.x86_64.rpm
Target:
sudo firewall-cmd --permanent --add-port=10000/tcp
sudo firewall-cmd --permanent --add-port=61000-61100/tcp
sudo firewall-cmd --permanent --add-port=10001/tcp
/opt/intel/debugger_2017/gdb/targets/idhc/install
to shared directory.
Host:
cp /opt/intel/debugger_2017/gdb/targets/idhc/install/*.rpm ~/shared
Target:
cd ~/shared
sudo rpm -i gdbserver-igfx-7.6.1-1.x86_64.rpm libelfdwarf-1.0-1.x86_64.rpm libigfxdbg-1.0-1.x86_64.rpm
gdbserver-ia-7.6.1-1.x86_64.rpm
igfxdcd-dkms-1.0-1.x86_64.rpm
sudo dkms add -m igfxdcd -v 1.0
sudo dkms build -m igfxdcd -v 1.0
sudo dkms install -m igfxdcd -v 1.0
sudo modprobe igfxdcd
For this setup, we assume a standard installation of CentOS* 7.1 as a desktop system with development tools present.
Host:
cd ~
tar xfz eclipse-cpp-mars-1-linux-gtk-x86_64.tar.gz
Host:
cd ~
mkdir shared
sudo mount -t nfs4
igfx-target:/shared ~/shared
Host:
mkdir -p ~/shared/lib
cd ~/shared/lib
cp /opt/intel/compilers_and_libraries/linux/lib/intel64/* .
The next step is to start Eclipse*.
Host:
cd ~/shared
source /opt/intel/bin/compilervars.sh intel64
~/eclipse/eclipse
At startup enter the workspace path that points into the shared directory, i.e.,
/home/$USER/shared/workspace
.
You now need to add a C++ source file and a Makefile for the project.
matmult.cpp
as the
name and accept with OK.
/* Copyright 2016 Intel Corporation. All Rights Reserved.
* The source code contained or described herein and all
* documents related to the source code ("Material") are owned by
* Intel Corporation or its suppliers or licensors. Title to the
* Material remains with Intel Corporation or its suppliers and
* licensors. The Material is protected by worldwide copyright
* laws and treaty provisions. No part of the Material may be
* used, copied, reproduced, modified, published, uploaded,
* posted, transmitted, distributed, or disclosed in any way
* except as expressly provided in the license provided with the
* Materials. No license under any patent, copyright, trade
* secret or other intellectual property right is granted to or
* conferred upon you by disclosure or delivery of the Materials,
* either expressly, by implication, inducement, estoppel or
* otherwise, except as expressly provided in the license
* provided with the Materials.
*/
#include <stdio.h>
void matmult()
{
// Sample data
int a[3][2] = { { 1, 2 },{ 3, 4 },{ 5, 6 } };
int b[2][3] = { { 6, 5, 4 },{ 3, 2, 1 } };
int c[3][3] = { { 0, 0, 0 },{ 0, 0, 0 },{ 0, 0, 0 } };
// Offloaded code
#pragma offload target(gfx) pin(a) pin(b) pin(c)
_Cilk_for(int i = 0; i < 3; i++)
{
_Cilk_for(int j = 0; j < 3; j++)
{
for (int k = 0; k < 2; k++)
{
c[i][j] += a[i][k] * b[k][j];
}
}
}
// CPU code
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 3; j++)
{
printf("%2d ", c[i][j]);
}
printf("\n");
}
}
int main(int argc, char *argv[])
{
matmult();
return 0;
}
Makefile
.
all: matmult.cpp
icpc -gdwarf-3 -qoffload-arch=haswell:visa3.1 -O0 matmult.cpp
Note:There needs to be a TAB character in front icpc
, otherwise
make
will not be functional.
The next step is to create a debug configuration.
Change the default launcher by clicking Select other....
/home/user/shared/workspace/matmult/a.out
.
start_mpm.sh
script to be entered
in the GDB
debugger field:
The host system is now ready for debugging. Do not click the Debug button yet, since debugging need to be started on the target system.
The final step in the system setup is to start debugging on the target system.
Since the project files are already shared, there is no need to transfer any files.
The debugger server can be started, which launches the target program.
Target:
# Set up compiler runtime, if necessary
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/user/shared/lib
gdbserver-ia :10000 ~/shared/workspace/matmult/a.out
Now switch back to the host system and click Debug. The debugging
session should start and execution will stop just inside the
main()
function.
At this point debugging should work as normal. To stop in any code on the GPU, insert
a breakpoint inside the code for the GPU and continue the application, i.e., the
line containing the matrix multiplication's inner loop body: c[i][j] += a[i][k]
* b[k][j];
Once the host application starts offloading code, the GPU threads are automatically added to the debugging session and inserted breakpoints get triggered as the execution comes across them.
CentOS* 7 has a firewall enabled by default. If there is any problem with connections between the debugger and the debug server (from host to target) ensure the ports are opened in the firewall. Alternatively, disable the firewall.
Document |
Description |
---|---|
Contains descriptions of the GNU* Debugger (GDB) functions and interfaces including Intel-extended features for debugging applications natively on IA-32 or Intel® 64 Architecture systems | |
Contains descriptions of the GNU* Debugger (GDB) functions and interfaces including Intel-extended features for debugging applications remotely on Intel® Xeon Phi coprocessor systems (Linux* OS host only) | |
Contains descriptions of the GNU* Debugger (GDB) functions and interfaces including Intel-extended features for the Intel® Debugger for Heterogeneous Compute | |
GDB Manual in Info format |
To read the GDB Manual in the Info format, use the following command:
or
or
|
GDB man pages |
To access the GDB man pages, set the environment variables by sourcing the
compiler environment script,
or
or
|
Intel® Parallel Studio XE 2017 Composer Edition Fortran - Debug Solutions Release Notes Intel® Parallel Studio XE 2017 Composer Edition C++ - Debug Solutions Release Notes |
Release Notes for debugging with the Intel® Parallel Studio XE. |
Intel® Parallel Studio XE product page. See this page for support and online documentation. |
No license (express or implied, by estoppel or otherwise) to any intellectual property rights is granted by this document. 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. This document contains information on products, services and/or processes in development. All information provided here is subject to change without notice. Contact your Intel representative to obtain the latest forecast, schedule, specifications and roadmaps. The products and services described may contain defects or errors known as errata which may cause deviations from published specifications. Current characterized errata are available on request.
Intel, the Intel logo and Intel XEON Phi are trademarks of Intel Corporation in the U.S. and/or other countries.
*Other names and brands may be claimed as the property of others.
© 2016, Intel Corporation