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

跨架构能力:用 GPU 进行思考

emptyStarIconemptyStarIconemptyStarIconemptyStarIconemptyStarIcon

0/5 (0投票)

2022年2月9日

CPOL

6分钟阅读

viewsIcon

4919

在本文中,我们将探讨开发人员如何利用 oneAPI 的跨架构能力,在他们的应用程序中利用 GPU 资源。

除了专业应用之外,大多数程序员传统上都专注于 CPU。直到最近,CPU 还是大多数机器中唯一的实质性处理能力。然而,随着强大的 GPU 成为各种设备中的标准组件,CPU 现在也伴随着其他计算选项。

开发人员可以利用 GPU 和其他处理器与传统 CPU 相结合的额外处理能力。为此,您需要采用并行编程技术来创建具有跨架构能力的应用程序。

Intel 的 oneAPI 提供了一套强大的工具,供开发人员确保他们的软件充分利用跨架构资源,在多样化的平台环境中最大限度地发挥硬件特性。oneAPI 使您能够思考通过额外的 GPU 处理能力来增强应用程序的可能性。

转向跨架构

oneAPI 的关键特性之一是代码的可重用性。使用 Khronos SYCL 标准进行数据并行处理,C++ 开发人员可以利用现有代码或编写可与 CPU、GPU 和 FPGA 一起工作的代码。通过这种方法,您可以针对特定平台进行精细优化。这种可重用性使您能够无缝地将代码卸载到不同的处理平台,在设计和优化跨架构应用程序方面提供了令人印象深刻的灵活性。

充分利用这些额外的计算资源需要的不只是更改代码本身。它还要求开发人员重新思考他们的软件设计策略。异构并行编程方法带来了新的挑战,很快就会出现关于哪些平台应该执行哪些代码片段的问题。

为了帮助开发人员解答这些问题,Intel 已将 oneAPI 的跨架构能力添加到 Intel® Advisor 和 Intel® VTune™ Profiler 中。两者都可以独立下载。

Intel Advisor 分析工具可识别有利可图的 GPU 卸载机会。它还提供关于提高向量并行效率的见解,监控性能与硬件限制的关系,并帮助设计、可视化和分析流程图等功能。

使用 Intel Advisor,您可以快速了解代码中的哪些循环适合卸载到 GPU。Intel Advisor 估算主机和目标设备之间的数据传输成本,并提供优化数据传输的建议。它还识别可以从改进向量化中受益的循环,并提供关于提高向量化效率的可操作指南。

在 Intel Advisor 的帮助下,您可以测试和分析您的应用程序,以整合 GPU 处理能力。它还可以帮助您在进行代码更改之前识别潜在的性能提升,即使无法访问实际硬件。Intel Advisor 执行高级卸载建模,使其能够在一个软件建模的平台上测试代码。此功能使其成为设计考虑 GPU 的应用程序的强大工具。

Intel VTune Profiler 有助于识别耗时最多的 GPU 内核以进行进一步优化。它有助于确定应用程序是受 GPU 限制还是受 CPU 限制。它有助于分析受 GPU 限制的代码,以查找由微架构限制或低效内核算法引起的性能瓶颈。

Intel VTune Profiler 提供了一套广泛的分析功能,可以快速查找和修复瓶颈,以提高跨架构应用程序的性能。与 Intel Advisor 协同使用时,这两个工具为开发人员提供了必要的见解,以揭示其跨架构实现的奥秘。

使用 Intel Advisor 和 Intel VTune Profiler 进行优化

为 GPU 设计和调整您的应用程序 网络研讨会中,咨询工程师 Jennifer DiMatteo 使用稍作修改的 Mandelbrot OpenMP 示例 演示了 Intel Advisor 的功能。OpenMP 提供了自己的多平台编程功能集,并且与 oneAPI 良好协同。

在此演示中,Jennifer 将 Mandelbrot 示例通过 Intel Advisor 的卸载建模进行运行。Jennifer 能够快速识别代码中适合卸载到 GPU 的部分,并估算改进可以使应用程序加速多少,使用 Intel Advisor 的 GUI 视图进行更好的可视化,如下图所示。

在演示过程中,Jennifer 深入研究了 Mandelbrot 集中的一个特定循环。卸载建模识别出一个机会,通过简单地卸载到 GPU,可以使该特定循环的速度提高近 1.9 倍。

然后,Jennifer 会更深入地研究 Intel Advisor 返回的关于该循环的指标。她可以快速查看关于吞吐量、数据传输、缓存使用、延迟以及影响循环性能的其他因素的统计信息。Intel Advisor 突出显示了已识别出的用于卸载的代码特定部分,并提供了关于如何最佳实施卸载建议的可操作建议。

在 Jennifer 的示例中,Advisor 提供了使用统一共享内存 (USM) 来优化数据传输的建议。它还找到了一些改进 OpenMP map 子句的建议,并提供了一些 Pragma 代码示例,建议如何改进实现。

在根据 Intel Advisor 的建议实施更改后,Jennifer 使用建议的卸载来测试代码。在这种情况下,她卸载到 GPU 的特定循环提高了性能并减少了执行时间。

然而,这种更改引入了一些开销,增加了程序在 CPU 上的整体执行时间。有了这些信息,Jennifer 可以继续深入研究是什么增加了开销,或者确定该循环不适合卸载,并恢复到原始配置。

为了确定额外开销的来源,Jennifer 深入研究了 Intel Advisor 的 GPU Roofline Insights,以识别是什么导致代码变慢。利用 Intel Advisor GUI 丰富的可视化效果,如以下屏幕截图所示,Jennifer 可以快速识别可以进行更改以提高性能并消除原始修改引入的开销的区域。

为了找到额外开销问题的根本原因,Jennifer 求助于 Intel VTune Profiler。在浏览器中打开 Intel VTune Profiler GUI,Jennifer 运行她修改过的 Mandelbrot 示例,并执行“GPU Compute Media Hotspot”分析。通过此分析,Jennifer 可以看到程序在不同平台上的运行情况的图形时间线,如下面的屏幕截图所示,使她能够快速可视化跨架构性能。

此时间线显示,一个名为 zeModuleCreate 的特定任务引入了新的开销。有了关于导致问题的特定任务的信息,Jennifer 可以快速确定解决方案。在这种情况下,该任务正在卸载到 GPU,但没有关于 GPU 的任何详细信息,这些信息必须在运行时确定。在编译时或提前 (AOT) 指定要使用的 GPU 和架构可以最大限度地减少任务的执行时间。

Intel Advisor 和 Intel VTune Profiler 的组合功能使 Jennifer 能够深入了解复杂的跨架构性能问题。她通过分析 Intel VTune Profiler 关于性能和瓶颈的详细指标,快速识别优化、实施它们并发现进一步改进的机会。

尝试一下!

想看看您可以用跨架构能力做什么?引入 GPU 可以让您创建功能强大的应用程序,最大限度地榨取机器的计算能力。或者,您可以创建更轻量级的应用程序,选择性地使用跨架构能力来保持快速精简。

这里有一些入门 oneAPI 和测试代码性能的资源。您可能会发现一个全新的跨架构可能性世界

© . All rights reserved.