数据中心/云端

编译器资源管理器:CUDA 开发者必备的内核实验室

您是否曾想过,当您编写 GPU 核函数时,CUDA 编译器究竟会生成什么?是否曾想与同事轻松分享精简的 CUDA 示例,而无需他们先安装特定的 CUDA 工具包版本?或者,也许您完全不熟悉 CUDA,正在寻找一种无需安装任何东西甚至无需配备 GPU 的简单方法?

得益于广泛使用的开源工具 Compiler Explorer (通常称为 godbolt) ,您可以直接通过浏览器以交互方式即时完成所有这些工作。本文将解释 Compiler Explorer 提供的内容,以及为什么它应该成为 CUDA 开发工具套件的一部分。

什么是编译器资源管理器?

编译器资源管理器是一款基于 Web 的工具,可帮助开发者编写源代码,使用各种编译器实时编译,并立即查看生成的输出,例如 assembly、中间表示 (IR) 、PTX 等。

Screenshot of the Compiler Explorer browser window. The left pane is the input source code and the right pane has multiple windows showing the generated PTX, generated SASS, and the program execution output.
图 1。借助用于 CUDA 开发的 Compiler Explorer 接口,您可以编写代码、选择编译器和标志、编译、查看主机组件和设备 PTX,以及直接在真实 GPU 上运行代码,所有这些操作均可在远程 GPU 上运行的浏览器中完成

Compiler Explorer 最初由 Matt Godbolt 创建,旨在帮助开发者了解编译器优化,现已发展成为一款用于整个系统编程世界的强大多语言工具。根据 godbolt.org 网站 Grafana 控制面板的数据,该网站目前支持 70 多种语言 (包括 C++、C、Rust、Python 和 CUDA) ,每周可处理超过 100 万次编译。

虽然 `Compiler Explorer` 和 `godbolt` 这两个名称通常可互换使用,但二者并不完全相同。Compiler Explorer 是应用程序的名称。Godbolt 是其创作者的姓氏,创作者还在 godbolt.org 上维护了该工具最广泛使用的公共实例。任何人都可以在本地运行 Compiler Explorer 或托管自己的实例,但提及“godbolt”通常指 godbolt.org 实例。

编译器资源管理器的主要优势之一是,您可以使用它来编译和运行代码。在 CPU 方面,此功能长期以来一直可用,并因其简化学习、验证和调试工作流程的能力而受到广泛赞赏。

多年来,Compiler Explorer 一直支持编译 CUDA 代码,因此无需安装完整的工具包,即可轻松构建 CUDA C++ 代码原型并检查 PTX 或 SASS 输出。但它最初缺乏 CPU 工作流的优势之一:能够实际运行 CUDA 代码。

通过 NVIDIA 工程师与 Compiler Explorer 维护人员之间的密切合作,这一差距在 2022 年得到了弥合。Compiler Explorer 经过扩展,支持直接在 NVIDIA GPU 上执行 CUDA 代码,为 CUDA 开发者在浏览器中提供完整的写入 – 编译 – 运行功能。

面向 CUDA 开发者的强大功能

本节将分享Compiler Explorer作为CUDA开发者不可或缺的工具的五种实用方式。

在浏览器中运行 CUDA C++ 代码

编译器 Explorer 支持直接在 NVIDIA GPU 上的浏览器中编写、编译和运行小型 CUDA 程序。这显著降低了原型设计、调试和学习的门槛。您可以在几秒钟内完成从想法到结果的过程。

这将提高您的工作效率。亮点包括:

  • 无需本地设置即可工作
  • 获取实时反馈:write → compile → run → output
  • 轻松进行prototype设计、validate和teach

示例工作流程包括:

  • 无需完整的本地环境即可快速对 CUDA C++ 代码进行原型设计
  • 复制和调试问题
  • 使用交互式执行进行 CUDA 教学

2. 轻松共享和协作

编译器 Explorer 简化了用于调试、协作或教育的最小 CUDA 示例的共享。

  • 编写 CUDA 代码片段,单击“Share”,并获取永久 URL —您的收件人可以看到完全相同的代码、编译器设置和输出
  • 报告compiler bugs或性能问题
  • 教授 CUDA 概念

示例工作流程包括:

  • 通过快速向同事发送精确代码示例来调试编译器优化问题
  • 分享一个最小的可运行示例,向队友或学生说明 CUDA 最佳实践或常见陷阱

3. 实验库

编译器资源管理器不限于原版 CUDA C++ 代码。您还可以开箱即用地使用 CCCLMatX 等 CUDA 库。因为它是开源的,所以您可以自由地进一步扩展。如果您想集成自己的 CUDA 库,只需向 compiler-explorer GitHub 存储库做出贡献即可。

Screenshot of web browser page showing an example of adding libraries to a project.
图 2。在 godbolt.org 上为您的项目添加 libraries

4. 并行检查 PTX 和 SASS assembly

查看由 CUDA C++ 代码生成的程序集可以揭示有关性能优化的关键见解。如需了解有关 PTX 的更多信息,请参阅了解 PTX, the Assembly Language of CUDA GPU Computing

使用 cuobjdumpnvdisasmNVIDIA Nsight Compute 等工具检查 GPU 组件的方法有很多。Compiler Explorer 通常被证明是最方便的,尤其是对于快速实验、教学或早期调试而言。

编译器资源管理器将源代码的每行与相应生成的指令相关联。此映射在用户界面中进行视觉颜色编码,因此可以轻松追踪每行 CUDA C++ 代码如何在输出窗格中转换为 PTX 和 SASS 指令。例如,在图 1 中,您可以看到如何对第 4 行的 printf 调用进行颜色编码以匹配右侧生成的 PTX 指令。

借助 Compiler Explorer,您可以轻松完成以下工作:

  • 直接在浏览器中编写 CUDA C++ 核函数
  • 查看 PTX 和 SASS 的并排视图

示例工作流程包括:

  • 观察更改loop unrolling pragmas如何影响assembly
  • 跟踪 __restrict__ 如何影响生成的加载指令
  • 验证 vector 加载/存储指令的生成

5. 即时比较 compiler 版本和 flags

想知道不同的 CUDA 编译器版本或特定编译器标志对您生成的 GPU 代码有何影响?Compiler Explorer 简化了这一过程:

  • 从多个 CUDA 编译器版本中进行选择
  • 无需管理多个本地安装即可立即查看结果
  • 即时确认或反证不同版本compiler行为的变化

示例工作流程包括:

  • 验证最新的 CUDA 工具包版本是否能更好地优化您的设备代码
  • 跟踪 -use_fast_math 如何影响生成的 assembly
  • 使用 --resource-usage 检查资源使用情况,例如每个线程的寄存器

开始使用 Compiler Explorer

编译器 Explorer 已成为现代 CUDA 开发工作流程中不可或缺的一部分,简化了从调试和性能分析到教授和共享代码的所有工作。因此,该项目被选定为 NVIDIA FOSS 基金的创始接受方,该基金支持对开发者产生切实影响的开源工具。该团队为能够支持该项目而感到自豪,并希望它成为您自己的 CUDA 工具包中的核心工具。

如果您尚未使用 Compiler Explorer,请尝试以下操作:

  • 原型设计和探索 CUDA 概念
  • 调试性能回归或验证compiler行为
  • 轻松共享最小的可复制示例

请查看以下示例以开始使用: Hello WorldVector AddCCCL。如需了解更多信息,请访问 godbolt.org,为 Compiler-Explorer GitHub 存储库做出贡献,并在 Discord 上加入 Compiler Explorer

致谢

特别感谢 Compiler Explorer 的创建者 Matt Godbolt 以及整个社区,感谢他们为开发者构建和维护如此强大的资源。特别要感谢 Patrick Quist他的长期合作和技术工作有助于扩展 Compiler Explorer 上的 CUDA 支持

标签