在 Windows* 主机上调试英特尔® 至强融核™ 应用

目录

简介

英特尔® 至强融核™ 协处理器是一款基于英特尔® 众核架构(英特尔® MIC)的产品。 英特尔® 为该架构提供了调试解决方案,其可调试英特尔® 至强融核™ 协处理器上运行的应用。

英特尔 ® MIC 需要一款调试解决方案出于多种原因。 以下介绍了其中一些主要原因:

  • 开发本地英特尔® MIC 应用与在 IA-32 或英特尔® 64 主机上开发应用一样简单。 在大部分情况下,仅需对其进行交叉编译(/Qmic)。
    但是,英特尔® MIC 架构不同于主机架构。 这些区别可以揭示目前的区别。 此外,对英特尔® MIC 调试不当可能会带来新的问题(如数据对齐,一款应用能否处理数百个以上线程?有效的内存消耗?等。)
  • 开发支持卸载的应用将会带来更多复杂性,因为主机和协处理器在共享工作负载。
  • 一般的低级别分析,追踪执行路径,了解英特尔® MIC 架构的指令集...

面向英特尔® MIC 的调试解决方案

对于 Windows* 主机,英特尔可提供一款调试解决方案 — 面向英特尔® MIC 架构应用的英特尔® 调试器扩展。 它支持能够使用卸载调试功能的应用,并支持原生英特尔® MIC 应用在英特尔® 至强融核™ 协处理器上运行。

如何获得?

如要获取面向基于 Windows* 主机的英特尔® MIC 架构的调试解决方案,您需要以下组件:

集成调试解决方案

来自基于英特尔® 的 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 (链接器)
  • 可选: 未经优化的代码 (/Od) 更易于理解
    ,因为一些临时变量等被删除/或优化掉。
    Visual Studio* Project Properties (Debug Information & Optimization)

应用仅可在 64 位中进行调试

  • 将平台设置为 x64
  • 确认 /MACHINE:x64 (链接器)是否设置!
    Visual Studio* Project Properties (Machine)

使用卸载扩展调试应用

启动 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 同时显示主机/协处理器的信息:
    • 端点
    • 断点
    • 进程/模块
  • 支持多个协处理器:
    • 所显示的数据为混合状态:
      请记住不同的进程和地址空间
    • 无需进一步配置:
      随意调试!

设置断点

Debugging Applications with Offload Extension - Setting Breakpoints

请注意此处的混合断点:
在正常代码中设置的断点(未卸载的)适用于主机。 卸载代码上的断点仅适用于各自的协处理器。
断点窗口显示所有断点(主机和协处理器)。

启动调试

通过菜单(所显示)或 <F5> 键正常启动调试:
Debugging Applications with Offload Extension - Start Debugging

继续执行调试,直至遇到卸载代码中设置的断点,该断点能够对协处理器代码进行调试。

线程信息

Debugging Applications with Offload Extension - Thread Information

主机和协处理器的信息处于混合状态。 在上述示例中,线程窗口将显示两个使用其线程进行处理的进程。 一个进程来自主机,负责卸载。 另一个是托管和执行卸载代码的进程,每个协处理器有一个。

其它要求

对于支持卸载调试的应用,还需设置其他环境变量:

  • 英特尔® 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…”菜单打开选项:

Debugging Native Coprocessor Applications - Configuration

它可以告诉调试程序扩展在什么位置查找二进制和源。 它在每次调试新的协处理器本机应用时都需要进行变化。

条目 solib-search-path 目录同样适用于类似的 GNU* GDB 命令。 它支持从构建系统上将路径映射到运行调试程序的主机系统上。

条目 Host Cache Directory 用于缓存符号文件。 它可以加速查找大尺寸应用。

附加销售

通过 TOOLS/Attach to Process… 菜单打开选项:

Debugging Native Coprocessor Applications - Attach to Process...

指定面向英特尔(R) 架构的英特尔(R) 调试器扩展。 设置 GDBServer 用以执行的 IP 和端口。 GDBServer 的常见端口是 2000,但是我们建议使用非特权式端口 (如 16000)。
短暂延迟后,将列出协处理器卡的进程。 选择一个进行连接。

注:
显示所有用户进程的复选框中不包含针对协处理器的函数,因为用户账户无法从主机映射到目标,反之亦然(Linux* 和 Windows*)。

有关编译器优化的更完整信息,请参阅优化通知