65.9K
CodeProject 正在变化。 阅读更多。
Home

使用System Analyzer和Platform Analyzer剖析OpenCL™应用程序

emptyStarIconemptyStarIconemptyStarIconemptyStarIconemptyStarIcon

0/5 (0投票)

2014年11月6日

CPOL

11分钟阅读

viewsIcon

8218

本文概述了System Analyzer和Platform Analyzer在Windows*操作系统上提供的OpenCL支持。

引言

用于 OpenCL™ 应用程序的英特尔® SDK 是一个强大的 OpenCL™ 应用程序开发软件环境。System Analyzer 和 Platform Analyzer 使您能够在视觉计算应用程序中分析 OpenCL 代码。这些是分析 OpenCL API 和相关指标支持的关键组件。

System Analyzer 实时收集并显示应用程序的硬件和软件指标数据。Platform Analyzer 针对使用图形处理单元 (GPU) 进行渲染、视频处理和计算的应用程序进行离线性能分析。具体来说,Platform Analyzer 在应用程序运行期间收集实时分析数据。除了跟踪重要的 OpenCL API 外,它还捕获英特尔® 核芯显卡 OpenCL 设备的重要指标,例如执行单元利用率或内存流量。然后,Platform Analyzer 将应用程序的执行配置文件可视化。

本文概述了 System Analyzer 和 Platform Analyzer 在 Windows* 操作系统上提供的 OpenCL 支持。请注意,存在更精细的分析方法,特别是使用 Intel® VTune™ Amplifier XE。尽管如此,System 和 Platform Analyzer 都是通过用户级 OpenCL API 了解通用平台(CPU 和 GPU)利用率的绝佳起点。

新特性

System Analyzer 和 Platform Analyzer 在运行应用程序时分析 GPU 内核,这与捕获通用 CPU 活动相结合,使您能够关联这两个设备上的活动。您还可以识别哪个设备(和 API)最限制您的应用程序。

OpenCL API 支持的改进很多,包括

支持分析 OpenCL 应用程序。以前,OpenCL 应用程序(例如基于控制台的应用程序)只能使用 CPU 指标。

跟踪应用程序启动。此功能在需要测量初始化成本或分析非常短的应用程序时特别有用。

改进了对指标的支持。现在,您可以以更精确的方式(粒度小于 1 毫秒)探索应用程序随时间变化的选定 GPU 指标的性能。

更重要的是,这些指标不再与帧绑定。现在,所有分析类型都可以使用细粒度指标

  • System Analyzer 的实时视图中,包括抬头显示器 (HUD) 和独立版本

    图 1. System Analyzer 中的细粒度指标。
  • Platform Analyzer 中,您可以放大到特定的时间区域或帧并离线详细检查。请参阅下面的“使用 Platform Analyzer 进行 API 级别分析”部分。

有关指标的详细信息,请参阅在线帮助

Platform Analyzer 时间线视图中 OpenCL 内核的计算队列。Platform Analyzer 视图已扩展以显示 OpenCL 设备队列的信息(参见图 2)。

图 2. OpenCL 设备队列(命名为“Intel® HD Graphics 4000”,与设备相同)。此计算队列显示排队内核(蓝色标记)和执行路径(红色标记)的堆栈视图。请注意堆栈视图中的内核名称。

现在,您可以使用以下选项更好地了解应用程序流随时间的变化

  • 将 GPU 软件队列(以及相关的 DMA 数据包队列/执行)和 OpenCL 设备队列与主机 (CPU) 发出的 OpenCL API 命令匹配。
  • 探索 Microsoft DirectX* 调用对相同 GPU 软件队列和由此产生的 GPU 负载(通过 DMA 数据包执行)的贡献,以及这些调用如何干扰源自 OpenCL API 的 DMA 数据包。
  • 分析来自 Intel® Media SDK 的视频处理任务,这些任务在单独的 DMA 数据包队列中表现出来(主要由专用硬件辅助执行提供服务,从而最大限度地减少与渲染和计算任务的 GPU 资源争用),并了解 Intel Media SDK 任务与 OpenCL/DirectX 执行的重叠情况。
  • 对于上述所有三种活动类型,使用上面讨论的细粒度 GPU 指标检查整体设备利用率。

有关示例跟踪,请参阅使用 Platform Analyzer 进行 API 级别分析部分。

配置分析配置文件

配置分析配置文件

  1. 运行 Graphics Monitor (开始 > 所有程序 > Intel Graphics Performance Analyzers <版本> > Graphics Monitor)。
  2. 右键单击系统托盘中的 Monitor 图标,然后从上下文菜单中选择 Profiles… 以打开 Profiles 对话框

    图 3. “Profiles”对话框中的“Tracing”选项卡。

Profiles 对话框的 Tracing 选项卡上现在提供了新选项

  • Capture Application Startup 复选框使您能够在应用程序启动时立即开始跟踪,这对于通过常规 Ctrl+Shift+T 快捷方式难以跟踪的短应用程序很有用。
    • 注意:您可以使用微调框指定跟踪持续时间。要指定用于触发跟踪的各种类型的事件,请切换到 Trigger 选项卡。
  • View fine-grained system-wide GPU metrics 复选框使您能够收集有关硬件计数器的精确数据。
  • Collect DMA Packet Type 复选框使您能够收集 DMA 数据包,这是关联用户级 API 调用和由此产生的设备负载的关键方法。

运行平台分析

要开始分析您的应用程序

  1. 右键单击系统托盘中的 Monitor 图标 ,然后从上下文菜单中选择 Analyze Application…
  2. 在对话框中指定应用程序路径和选项,然后单击 Run:

     

    图 4. 左:Intel Graphics Monitor 上下文菜单。右:分析应用程序对话框。

现在您的应用程序以插桩模式运行,您可以使用 Ctrl+Shift+T 捕获跟踪。有关如何指定感兴趣的指标、如何有条件地捕获跟踪等信息,请参阅在线帮助。注意:如果您的应用程序执行时间很短,请考虑使用新的 Capture Application Startup 配置选项(请参阅上一节)。

使用 Platform Analyzer 进行 API 级别分析

生成应用程序跟踪后,下一步是通过在 Platform Analyzer 中打开跟踪来检查时间线。它提供了非常方便的方法来查明执行中的热点并将其与 API 调用关联起来。

通常,特定的分析取决于已确定的改进领域。例如,您可能会看到 DirectX 调用在 GPU 执行路径中占主导地位。在这种情况下,请使用 Frame Analyzer,因为它依赖于帧捕获文件(类似于跟踪捕获生成,但使用 Ctrl+Shift+C 快捷方式)。帧捕获可帮助您逐帧了解应用程序中发生的情况。

对于本文档的其余部分,我们重点关注与 OpenCL API 相关的功能。具体来说,我们使用 OpenCL 和 Intel Media SDK 互操作性代码示例,该示例利用 Intel Media SDK 进行初始视频解码,使用 OpenCL API 处理解码后的视频帧,最后使用 DirectX API 在屏幕上显示结果图像。因此,所有三个 API 都用于一个示例!

下面是 Platform Analyzer 中显示的示例跟踪

图 5. Platform Analyzer 中显示的示例跟踪。请注意 OpenCL 设备队列(蓝色)的执行路径(红色标记)如何与 DMA 数据包队列(黑色)相关联。将鼠标悬停在 DMA 队列中的任何数据包上,都会突出显示其通过队列到 GPU 实际执行的路径。

正如您在图 5 中看到的,应用程序在 OpenCL 队列中有两个内核,MouseProcess。两者都遵循执行路径,其中队列中的命令背靠背执行。由于 Mouse 只有一个工作项(将鼠标悬停在对象上以获取带有内核执行参数的弹出提示),它执行得如此之快,以至于您需要放大才能在执行路径上找到它。

反过来,OpenCL 队列执行路径将内核加速到驱动程序,在那里不同类型的 DMA 数据包在单个 DMA 队列中多路复用。此 Render and GPGPU queue 同时服务于图形源(标记为“GHAL”)和计算源(标记为“OpenCL”)数据包。请注意,视频转码任务通过专用的 Video Codec 队列,这使得 Intel Media SDK 命令在大多数情况下可以在 GPU 上并行运行。

与 OpenCL 设备队列中为不同内核分配不同颜色(与 OpenCL 执行路径中的颜色匹配)不同,DMA 队列只有两种颜色:浅绿色表示仍在 DMA 队列中堆叠的数据包,黄色表示当前由 GPU 处理的数据包。带有 DirectX "Present" 调用的 DMA 数据包用斜线阴影标记 (),颜色方案相同:绿色表示排队的 DMA 数据包,黄色表示正在执行的数据包。

有关 Platform Analyzer 及其 GUI 的更多详细信息,请参阅在线帮助

OpenCL 内核分析的指标

正如我们在上一节中讨论的,应用程序优化通常从用户空间分析开始,例如,在 Platform Analyzer 的帮助下进行 API 级别跟踪,以清理通用应用程序流(上一节)并检查整体 GPU 利用率是否正常。

在 API 级别分析的这个阶段之后,您可以借助特定指标专注于最昂贵的 OpenCL 内核。这些指标出现在相同的时间线上

图 6. Platform Analyzer 中细粒度指标(屏幕截图底部图表)的示例。请注意指标出现在相同的时间线上。还要注意指标的分辨率(顶部的时间刻度)。将鼠标悬停在图表上的任何特定点上,都会弹出一个带有确切值的提示。

Platform Analyzer 支持与上一版本相同类型的 OpenCL 内核指标

  • CPU 特定指标,例如核心利用率
  • Intel HD Graphics 执行单元 (EU) 指标,其中 GPU EU 活跃/空闲/停滞是最重要的
  • 内存指标,例如 GPU 内存读/写
  • CPU、Intel HD Graphics 设备和整个封装的功耗指标

除非您的算法受内存限制,否则执行单元 (EU) 可能会限制您的应用程序的性能。EU 指标可以提供有关这些瓶颈的信息。目标是最大限度地利用 EU 进行有用的计算。有关提示和技巧,请参阅OpenCL 应用程序优化指南

以下信息简要描述了 EU 相关指标

  • GPU EUs Active 表示 GPU 执行单元 (EU) 正在主动执行的时间百分比。GPU EUs Idle 是指 GPU 执行单元 (EU) 既不主动执行指令也不停滞(下文)的时间百分比。
  • GPU EUs Stalled 指标表示 GPU 执行单元 (EU) 停滞的时间百分比。当其所有线程都在等待固定功能单元的结果时,例如,从数据端口或采样器请求数据时,EU 就会停滞。

如果 GPU EUs Stalled 相当高,这可能表示内存带宽使用效率低下(例如,次优数据访问粒度或缓存抖动,导致 GPU 等待数据到达)。请参阅用于 OpenCL 优化指南的 Intel SDK,了解理论内存性能和饱和带宽的提示。

最后,如果飞行中的工作组数量不足,EU 利用率可能会非常低(GPU EUs Idle 将很高)。提供给 clEnqueueNDRange 调用的局部大小值过低也可能导致单元空闲。再次请参阅用于 OpenCL 优化指南的 Intel SDK 以获取详细信息。

还可以尝试用于 OpenCL 和 Intel Media SDK 互操作性的 Intel SDK 代码示例,该示例使您可以通过简单的 GUI 暂停/恢复 Intel Media SDK 解码和 OpenCL 代码处理。您可以尝试使用它来了解不同示例管道阶段对指标的影响。

使用 Instrumentation and Tracing Technology (Intel® ITT) API 对 CPU 代码进行自定义插桩

由于 Platform Analyzer 的主要目标是 GPU 效率,因此除了跟踪已识别的 OpenCL 或 DirectX API 调用之外,它对 CPU 代码的洞察力不多。例如,它不提供通用 C/C++ 代码的热点(与提供更深入分析和源级热点视图的 Intel VTune Amplifier XE 不同)。尽管如此,您仍然可以使用 Platform Analyzer 检查整体 CPU 核心利用率。

您还可以使用 ITT API 标注任何 CPU 代码,以探索特定代码区域的执行流在时间线上相对于其余活动如何显示。这种用户插桩对于 Platform Analyzer 和 VTune Amplifier XE 都适用。

摘要

本文涵盖以下关键点

  • Platform Analyzer 提供了一种强大的方式来分析 OpenCL 应用程序,并支持 OpenCL 设备队列。
  • 您可以检查整体 GPU 利用率,并查看每个 API 的细分,包括 OpenCL API。
  • 您可以探索一组准确的指标,涵盖主机 CPU 和 Intel HD Graphics OpenCL 设备。

有关更多信息,请参阅在线帮助

* 其他名称和品牌可能被声明为他人财产。
OpenCL 和 OpenCL 徽标是 Apple Inc. 的商标,经 Khronos 许可使用。
版权所有 © 2014 英特尔公司。保留所有权利。

Intel® Developer Zone 提供跨平台应用程序开发的工具和操作方法信息、平台和技术信息、代码示例以及同行专业知识,以帮助开发人员创新和成功。加入我们的 物联网Android*Intel® RealSense™ TechnologyWindows* 社区,以下载工具、访问开发工具包、与志同道合的开发人员分享想法,并参与黑客马拉松、竞赛、路演和本地活动。

© . All rights reserved.