如何确定是否充分利用了您的跨架构实现





5.00/5 (1投票)
本文将探讨开发人员如何使用 Intel® Advisor 和 Intel® VTune™ Profiler 有效地将任务卸载到 GPU 并优化其跨架构应用程序。
英特尔率先发起了 oneAPI 行业倡议,旨在消除编程模型中的弱点。统一编程模型有助于改善跨平台开发体验。它还能够释放不同硬件组件(例如中央处理器 (CPU)、图形处理器 (GPU) 和现场可编程门阵列 (FPGA))的功能,以最大程度地提高其他架构设备的应用程序性能。
英特尔拥有支持开发过程的性能库,以实现这一目标。作为开发人员,我们通常最熟悉 Intel® oneAPI Base Toolkit。然而,本文将讨论另外两个知名工具 Intel® Advisor 和 Intel® VTune™ Profiler 的功能,它们都具备跨架构性能分析能力。
Intel Advisor 是一款强大的设计和分析工具,用于开发高性能 CPU 和 GPU 代码。它能够设计具有更好线程、矢量化和内存使用的应用程序。Intel Advisor 还有助于确定代码的每个部分在何处(CPU 或 GPU)运行最佳。可以说,这是其最有用的功能,但它还提供了性能预测和直接的建议,以设计快速的 GPU 代码。
同样出色的 Intel VTune Profiler 为我们提供了独特的优化应用程序和系统性能的方法。它有助于调节整个应用程序的性能,无论是运行在主机上的代码还是加速部分。值得一提的是,它与各种编程语言兼容。
Intel Advisor
尽管 Intel Advisor 提供了许多功能,但本文重点介绍其中两个:卸载建模和屋脊线分析。
卸载建模
卸载将代码片段从一个处理器转移到另一个处理器。卸载建模功能有助于识别在 CPU 上运行的代码元素,这些元素可以由 GPU 更有效地管理。它通过将循环指标与其源和调用树进行匹配来查找要卸载的特定循环。这种方法通过减少循环开销和使用矢量化来最大化性能。一旦检测到问题,Intel Advisor 将对内存和 CPU 进行深入分析。它详细描述了每个循环的干扰,包括其总时间、加速器卸载的估计时间以及数据传输速率和内存流量。然后,卸载建模功能预测使用 GPU 运行代码可能带来的速度提升。
此外,卸载建模功能还能发现潜在的性能瓶颈,使我们能够决定优化选项。它还会检查主机和目标设备之间数据传输的效率。
上图显示了 Intel Advisor 如何识别我们可以转移到 GPU 以提高性能的循环和函数。它还显示了这种更改所提供的总潜在速度提升。
Roofline 分析
屋脊线分析功能使我们能够优化代码的内存和计算。它以图形方式表示应用程序在硬件限制下的性能 headroom。此外,屋脊线分析通过识别高影响力的优化机会,帮助我们制定切实的优化路线图。它检测并优先处理内存、缓存或计算瓶颈,并通过突出显示性能不佳的循环和导致阻塞的因素来帮助理解其原因。
最后,此功能提供了优化进度的可视化。X轴表示算术强度,Y轴以每秒浮点运算(GFLOPs)衡量性能。我们还可以选择内存子系统和算术强度来评估代码的性能。
上面的 GPU 屋脊线图用点描述了瓶颈。红点是给定内存和硬件配置下的当前性能。屋脊是可达到的最大性能,红点与屋脊之间的距离描述了给定 GPU 规格下的性能裕量。
此图有助于我们确定是否必须提高缓存性能,减少数据和 CPU 之间的停滞时间,或者减少 CPU 和 GPU 之间的数据传输。
Intel VTune Profiler
Intel VTune Profiler 可对 GPU、CPU 和 FPGA 进行调优。它还通过提供有关 CPU、GPU、浮点单元 (FPU) 线程和内存带宽的准确数据来帮助优化卸载性能。该工具支持多种语言,包括数据并行 C++ (DPC++)、C、C++、Fortran、Python、Go 和 Java。此应用程序使瓶颈易于查找。
Intel VTune Profiler 的新功能“性能快照”建议从何处开始。快速工作负载运行后,它会提供各种分析类型。此功能使我们能够分析系统级别的独立应用程序。
识别限制
在执行简短分析后,Intel VTune Profiler 会显示各种指标,以帮助确定我们的应用程序是受 CPU、GPU 还是内存限制。例如,如果 GPU 使用率达到 80%,则应用程序受 GPU 限制。我们可以通过指定系统、目标和类型来配置此分析。
Intel VTune Profiler 可以通过突出关键热点并提供有关内核问题的可操作建议来分析 GPU 任务效率。此外,在分析过程中运行的图形功能还提供了有关任务执行的更详细信息。时间线视图同时显示 GPU 和 CPU 执行情况,以帮助了解应用程序或任务在运行时使用了多少 CPU 或 GPU。
识别热点
此外,Intel VTune Profiler 提供热点分析功能,用于突出处理器花费时间最多的区域。它还显示一个直方图,以比较 CPU 和 GPU 的使用情况。
GPU 卸载功能有助于确定卸载到 GPU 的代码是否有效工作。它显示了经过时间、最耗时的 GPU 计算任务、作业大小及其总持续时间。此外,它还提供有关 GPU 内核时间的信息,并有助于发现与内存延迟或内核算法不足相关的任何问题。
此功能还提供系统图。我们可以在“平台”选项卡上查看时间线、停滞的执行单元、计算线程、内存访问和带宽。此信息有助于发现(例如)高内存访问和低执行单元问题,这些问题必须解决才能进行优化。
适用于多种架构的 OneAPI 工具
OneAPI 专注于支持开发人员改进代码,而不是学习新语言。然而,基于 oneAPI 的应用程序最重要的功能是能够利用 Intel 的性能分析工具来深入了解硬件使用和性能。然后,我们可以利用这些信息来优化和微调针对多种架构的代码。
Intel Advisor 在查找可以有效转移到 GPU 的代码方面非常有效。此外,Intel Advisor 将卸载和非卸载区域进行分类,以便我们可以专注于带来实际性能提升的更改。此外,Intel Advisor 的屋脊线分析有助于消除瓶颈,而 Intel VTune Profiler 的 GPU 卸载功能可以显著提高 GPU 性能。
总的来说,Intel Advisor 的效率导向功能与 Intel VTune Profiler 的 GPU 优化功能相结合,为微调代码以在多种架构中运行提供了优势。
用例
英特尔的 oneAPI 提供了一个简化的统一编程模型,赋予我们极大的灵活性。它有助于开发第一人称射击游戏或任何需要图形密集型工作负载的软件。
利用用户硬件优化性能至关重要。如果用户的 GPU 性能强大,Intel Advisor 的卸载模型会识别应用程序代码中哪些部分可以受益于其处理能力。
此外,屋脊线分析有助于为主机和加速器实现最佳性能。
结论
强大的 OneAPI 工具使我们能够构建强大的应用程序,而无需花费过多时间学习其他语言。虽然它支持许多性能优化工具,但我们主要关注 Intel Advisor 和 Intel VTune Profiler。
借助卸载建模、屋脊线分析和热点分析等功能,我们能够更清晰地了解如何最有效地管理代码的行为和性能。
最后,英特尔的 oneAPI 提供了一个全面的工具包,以满足开发人员的各种需求,从编写支持多种架构的代码到在各个层面提高性能。探索 oneAPI,体验 Intel Advisor 和 Intel VTune Profiler 如何有效地改善您的应用程序优化过程。