目录
简介
英特尔® 至强融核™ 协处理器是一款基于英特尔® 众核架构(英特尔® MIC)的产品。 英特尔® 为该架构提供了调试解决方案,其可调试英特尔® 至强融核™ 协处理器上运行的应用。
英特尔 ® MIC 需要一款调试解决方案出于多种原因。 以下介绍了其中一些主要原因:
- 开发本地英特尔® MIC 应用与在 IA-32 或英特尔® 64 主机上开发应用一样简单。 在大部分情况下,仅需对其进行交叉编译(/Qmic)。
但是,英特尔® MIC 架构不同于主机架构。 这些区别可以揭示目前的区别。 此外,对英特尔® MIC 调试不当可能会带来新的问题(如数据对齐,一款应用能否处理数百个以上线程?有效的内存消耗?等。) - 开发支持卸载的应用将会带来更多复杂性,因为主机和协处理器在共享工作负载。
- 一般的低级别分析,追踪执行路径,了解英特尔® MIC 架构的指令集...
面向英特尔® MIC 的调试解决方案
对于 Windows* 主机,英特尔可提供一款调试解决方案 — 面向英特尔® MIC 架构应用的英特尔® 调试器扩展。 它支持能够使用卸载调试功能的应用,并支持原生英特尔® MIC 应用在英特尔® 至强融核™ 协处理器上运行。
如何获得?
如要获取面向基于 Windows* 主机的英特尔® MIC 架构的调试解决方案,您需要以下组件:
- 英特尔® Composer XE (适用于 C/C++ 或 Fortran):
http://software.intel.com/en-us/intel-composer-xe
- 只有英特尔® Composer XE 包含面向 Windows* 主机的调试解决方案。 但是,如要获得该解决方案,还需要英特尔®众核平台软件堆栈(英特尔® MPSS):
http://software.intel.com/en-us/articles/intel-manycore-platform-software-stack-mpss
(目前适用于 Windows* 的是 3.3.1)
集成调试解决方案
来自基于英特尔® 的 GNU* GDB 的调试解决方案:
- 与 Microsoft Visual Studio* 全面集成,无需命令行版本
- 支持英特尔® Composer XE 2013 SP1 及更高版本
注:
也可通过在协处理器上使用英特尔版本的 GNU* GDB 以在协处理器上执行纯原生调试。 这在面向 Linux* 主机的文章中进行了介绍:
http://software.intel.com/en-us/articles/debugging-intel-xeon-phi-applications-on-linux-host
为何与 Microsoft Visual Studio* 集成?
- Microsoft Visual Studio* 是 Windows* 主机上的已有 IDE
- 集成可以再次使用现有的可用性和特性
- Fortran 支持与英特尔® Fortran Composer XE
所需的组件
针对英特尔® MIC 架构进行开发和调试将需要以下组件:
- 英特尔® 至强融核™ 协处理器
- Windows* Server 2008 RC2、Windows* 7 或更高版本
- Microsoft Visual Studio* 2012 或更高版本
在英特尔® Composer XE 2013 SP1 更新 1 中添加了对 Microsoft Visual Studio* 2013 的支持。 - 英特尔® MPSS 3.1 或更高版本
- C/C++ 开发:
面向 Windows* 或更高版本的英特尔® C++ Composer XE 2013 SP1 - Fortran 开发:
面向 Windows* 或更高版本的英特尔® Fortran Composer XE 2013 SP1
配置与测试
关键是确保协处理器设置能够正常使用。 否则调试程式可能无法全面运行。
设置英特尔® MPSS:
- 按照英特尔® MPSS readme-windows.pdf进行设置
- 确认英特尔®至强融核™ 协处理器是否能够运行
在使用卸载扩展调试应用之前:
- 参照官方示例:
C:\Program Files (x86)\Intel\Composer XE 2013 SP1\Samples\en_US - 确认卸载代码是否能够正常使用
关键是确保协处理器设置能够正常使用。 否则调试程式可能无法全面运行。
调试前提条件
面向英特尔® MIC 架构的调试程序集成仅在调试信息可能时才可使用:
- 在调试模式下至少使用以下选项集进行编译:
/Zi(编译器)和 /DEBUG(链接器)
应用仅可在 64 位中进行调试
- 将平台设置为 x64
使用卸载扩展调试应用
启动 Microsoft Visual Studio* IDE,使用卸载扩展打开或创建英特尔®至强融核™ 项目。 您可以在英特尔® Composer XE 的示例目录中找到示例,即:
C:\Program Files (x86)\Intel\Composer XE 2013 SP1\Samples\en_US
- C++\mic_samples.zip 或
- Fortran\mic_samples.zip
我们将在以下内容中使用官方 C++ 示例中的 intro_SampleC。
使用英特尔® C++/Fortran 编译器编译项目。
调试特点
- 在代码中设置断点(在调试会话期间或之前):
- 在针对主机和协处理器混合的代码中
- 调试程序集成自动在主机/协处理器之间分配
- 运行控制对于原生应用而言相同:
- 运行/继续
- 停止/中断
- 等
- 卸载代码在主机上停止运行(卸载线程)
- 卸载代码在另一条线程的协处理器上运行
- IDE 同时显示主机/协处理器的信息:
- 端点
- 断点
- 进程/模块
- 等
- 支持多个协处理器:
- 所显示的数据为混合状态:
请记住不同的进程和地址空间 - 无需进一步配置:
随意调试!
- 所显示的数据为混合状态:
设置断点
请注意此处的混合断点:
在正常代码中设置的断点(未卸载的)适用于主机。 卸载代码上的断点仅适用于各自的协处理器。
断点窗口显示所有断点(主机和协处理器)。
启动调试
继续执行调试,直至遇到卸载代码中设置的断点,该断点能够对协处理器代码进行调试。
线程信息
主机和协处理器的信息处于混合状态。 在上述示例中,线程窗口将显示两个使用其线程进行处理的进程。 一个进程来自主机,负责卸载。 另一个是托管和执行卸载代码的进程,每个协处理器有一个。
其它要求
对于支持卸载调试的应用,还需设置其他环境变量:
- 英特尔® MPSS 2.1:
COI_SEP_DISABLE=FALSE
MYO_WATCHDOG_MONITOR=-1
- 英特尔® MPSS 3.*:
AMPLXE_COI_DEBUG_SUPPORT=TRUE
MYO_WATCHDOG_MONITOR=-1
请在启动 Visual Studio* IDE 前设置这些变量!
目前需要它们,但是未来可能会将其淘汰。 请注意,调试程序不能且不应与英特尔® VTune™ Amplifier XE 一起使用。 因此,应禁用 SEP(英特尔® VTune™ Amplifier XE 的组件)。 必须禁用看门狗监控器,因为调试器可能在一段不确定的时间内阻止系统执行。 因此,系统看门狗可能认为被调试的应用(如果不再有反应)死机并将终止它。 对于调试而言,我们不希望看到这种情况。
注:
请勿为产品系统设置这些变量!
调试本机协处理器应用
先决条件
创建本机英特尔®至强融核™ 协处理器应用,将应用转换至协处理器目标并执行:
- 使用 micnativeloadex.exe(英特尔® MPSS 针对应用提供)C:\Temp\mic-examples\bin\myApp, e.g.:
> "C:\Program Files\Intel\MPSS\bin\micnativeloadex.exe""C:\Temp\mic-examples\bin\myApp" -d 0 - 选项 –d 0用于指定第一台设备(基于 0),以防每台设备上有多台协处理器
- 传输后应用直接执行
micnativeloadex.exe可将特定应用传输至特定协处理器,并直接执行它。 命令本身将锁定,直至传输的应用结束。
使用 micnativeloadex.exe还可照顾到相关性(如库),并对其也进行传输。
此外,也可以使用其他方式来传输和执行本机应用(但是更复杂):
- SSH/SCP
- NFS
- FTP
- 等
仅可通过 “Attach to Process…”使用 Start Visual Studio* IDE 来调试本地应用:
- 使用了 micnativeloadex.exe来传输和执行本机应用
- 确保应用在连接上之前不执行任何操作,如通过:
static int lockit = 1; while(lockit) { sleep(1); }
- 连接上之后,将 lockit设置为 0并继续操作。
- 无需 Visual Studio* 解决方案/计划。
以这种方式每次只能调试一个协处理器。
配置
通过“TOOLS/Options…”菜单打开选项:
它可以告诉调试程序扩展在什么位置查找二进制和源。 它在每次调试新的协处理器本机应用时都需要进行变化。
条目 solib-search-path 目录同样适用于类似的 GNU* GDB 命令。 它支持从构建系统上将路径映射到运行调试程序的主机系统上。
条目 Host Cache Directory用于缓存符号文件。 它可以加速查找大尺寸应用。
附加销售
通过 TOOLS/Attach to Process…菜单打开选项:
指定面向英特尔(R) 架构的英特尔(R) 调试器扩展。 设置 GDBServer 用以执行的 IP 和端口。 GDBServer 的常见端口是 2000,但是我们建议使用非特权式端口 (如 16000)。
短暂延迟后,将列出协处理器卡的进程。 选择一个进行连接。
注:
显示所有用户进程的复选框中不包含针对协处理器的函数,因为用户账户无法从主机映射到目标,反之亦然(Linux* 和 Windows*)。