CUDA到HIP迁移:AMD Ryzen AI嵌入式平台如何实现可移植性

为什么可移植性比以往更重要

多年来,CUDA® 一直带着一个心照不宣的假设:如果你用 CUDA 编写代码,也就同时决定了它的运行平台。当 GPU 是整个系统的中心、所有组件都围绕它适配时,这种模式是合理的,软件选择与硬件选择实际上是一回事。但如今许多嵌入式系统已经不再这样构建。

今天,GPU 已不再是唯一主角。CPU 很重要,NPU 很重要,网络、内存行为、显示流水线、功耗、尺寸和生命周期都至关重要。在这种环境下,正确的硬件选择不再是最熟悉的 GPU 技术栈,而是最契合整个系统的方案。AMD 正是基于这一现实打造了 AMD Ryzen AI 嵌入式 P100 和 X100 系列处理器,将“Zen 5”CPU 核心、AMD RDNA 3.5 显卡和 AMD XDNA 2 NPU 加速集成于单颗器件之中。

这种转变以一种非常实际的方式改变了新设计的出发点:你希望软件绑定在一个 GPU 技术栈上,还是希望拥有自由,围绕最适合你产品的平台来构建架构?这正是可移植性如今变得前所未有的重要的原因。

它并不意味着推倒重来,也不要求你重写已有的一切。它只是要确保你已投入的软件投资不会把你锁定在一个可能已不再是最优选择的系统架构中。

即便 CUDA 已经可用,为何依然重要

如果 CUDA 目前运行良好,你的第一反应可能是:为什么要改?答案并不是 CUDA 突然没用了,而是应用需求和性能要求也正在改变。如果未来每个产品都将围绕 NVIDIA® 系统级模块构建,系统其余部分也围绕这一选择来设计,那么现有模式可能仍然适用。但许多现代系统正朝着不同方向发展:它们更集成、更受功耗限制、更在意成本,也更依赖 CPU、GPU 和 NPU 协同工作。

这正是可移植性开始发挥关键作用的地方。当你的软件具备可移植性,你就不再被迫选择最熟悉的 GPU,而是可以选择最契合整个系统的平台。

可移植性的真正含义

从技术层面看,问题很直白。CUDA 二进制文件是 NVIDIA 专用的;AMD GPU 采用不同的指令集和二进制格式,因此为 NVIDIA 编译的代码无法原样迁移。这正是异构计算可移植接口(HIP)存在的原因。AMD 将 HIP 设计为一种与 CUDA 高度对齐的 C++ 运行时 API 和内核语言,为你提供一条将现有 CUDA 应用迁移到 AMD 平台的实用路径。作为 AMD ROCm 软件解决方案的一部分,HIP 是一个类似 CUDA 的可移植 GPU 开发环境;HIPIFY 则是将 CUDA 代码自动转换为可移植 HIP C++ 的工具集。

关键在于这对你意味着什么。你无需在“永远留在 CUDA”和“从头重写代码”之间做选择。你可以拿现有代码,让它具备可移植性,并保留一个能同时面向 CUDA 和 AMD ROCm 平台后端的单一源代码库。这正是 HIP 可移植性的核心承诺。

可移植性不是一次跳跃,而是一种工作流。

这种工作流在实际代码中是什么样

理解这为何有效的最简单方式,是看看编程模型实际变化有多小。如果你习惯使用带托管内存的 CUDA 编写,下面这种模式应该很熟悉;移植到 HIP 后,可以看到同样的东西。

这就是全部变化:由 HIPIFY 帮你完成的 CUDA → HIP 重命名。内核未动,结构未动,最重要的是,对嵌入式设计而言,全程没有 host-to-device(主机到设备)拷贝,因为在统一内存下,根本不需要跨设备复制任何内容。

这也是集成平台悄悄消除 GPU 低效的地方。如果你正在移植使用经典 cudaMalloc + cudaMemcpy 模式的旧 CUDA 代码,HIPIFY 会将这些调用一对一转换,代码也能正确运行;但在 AMD Ryzen AI 嵌入式平台上,你也许根本不需要它们。显式拷贝函数的存在是为了将数据通过 PCIe® 传输到独立内存域;当 CPU 与 iGPU 共享 DRAM 时,你可以完全去掉暂存缓冲区和传输过程。结果是代码更少、延迟更低、内存占用更小,这正是功耗和成本受限的边缘设计所需要的系统级简化。

结论有两点:对许多常见运行时模式,迁移可以始于一次重命名,而非重写;而在 AMD Ryzen AI 嵌入式平台上,你的代码的惯用写法可能比最初基于独立 GPU 的原始代码还要简单。

HIPIFY 让迁移变得可量化

在你接触任何一行代码之前,你已经可以回答最大的问题:迁移到底有多难?HIPIFY 提供了一种在迁移前扫描和理解 CUDA 代码库的方式。它包含 hipify-clang 和 hipify-perl,二者各有用途。hipify-clang 借助 Clang 前端执行基于抽象语法树(AST)的翻译,能够对生产级 CUDA 代码进行准确、上下文感知的转换。由于依赖语义解析,它需要存在 CUDA 头文件(如 cuda_runtime.h)以及适当的 include 路径,以便 Clang 正确解析和理解源码。相比之下,hipify-perl 是一种轻量级、基于文本的工具,通过模式匹配进行快速扫描和初步翻译,但缺乏语义理解,需要更多人工验证。HIPIFY 可以自动转换许多 CUDA 运行时 API 调用、内核启动语法和常见语言元素,同时明确标出需要人工关注的部分。

这很重要,因为它把迁移从一个模糊的风险变成了一个可以量化的过程。你不再问:“这会很痛苦吗?”而是问:“哪些函数可以直接移植,哪些函数需要花时间?”这是一个更健康的起点。

仅举一个例子:在 AMD 内部对一个相控阵波束成形应用的测试中,HIPIFY 保留了高达 81% 的 CUDA 代码。理解哪些部分需要你关注、哪些已经可以测试,有助于你确定迁移所需的工作量。而且,由于 HIP 也能针对 NVIDIA 后端,你可以先在现有系统上稳定功能,然后再转向 AMD 目标。这种“边验证边推进”的增量路径,是 AMD CUDA 到 HIP/ROCm 迁移培训的一部分。

为什么 Ryzen AI 嵌入式 X100 系列处理器改变了讨论

当你的软件可移植时,你不再把平台看作“能运行我代码的那个东西”,也不再把它视为下一个设计的默认选择。你开始把硬件评价为“最适合自己产品的系统”。这正是 AMD Ryzen AI 嵌入式 X100 系列处理器在这一讨论中的重要性所在。

AMD Ryzen AI 嵌入式 X100 系列处理器不只是一个带集成显卡的目标平台。它是一个单芯片嵌入式平台,结合了高性能“Zen 5”CPU 核心和 AMD RDNA 3.5 显卡。X100 平衡了 CPU 与 GPU 性能,在无需将 CPU 和 GPU 作为独立器件拼接的情况下,提供低延迟 AI 和系统级响应。X100 还集成了一个低功耗、高性能的 NPU,旨在配合 AMD Ryzen AI 软件平台加速推理。开发者还可以借助 AMD Riallto 框架,探索将 NPU 用于图像和信号处理等各类工作负载,为 AMD NPU 在多种嵌入式应用中增加额外价值。所有这些之所以重要,是因为这款器件面向现代工作负载取得了平衡,与过去流行的经典 GPU 优先架构截然不同。

因此,与其围绕独立加速器构建系统,然后处理 PCIe 跳转、独立内存域,并围绕它打造系统的其余部分,不如直接针对一个 CPU、GPU、NPU 完全集成的平台。这可以简化封装、内存移动、功耗和热设计。对于许多边缘和嵌入式产品而言,这种系统级简化与原始加速器吞吐量同样重要。

而且,Ryzen AI 嵌入式 X100 系列处理器不只是纸面上的架构。当你把它的 CPU 并发、集成 AMD RDNA 3.5 显卡、AMD XDNA 2 NPU 加速和统一共享内存结合起来,信息就变得更加清晰:你并不会为了可移植性而牺牲系统能力。在许多情况下,你可以构建一个更贴合你试图解决问题的架构的平台。

Ryzen AI 嵌入式 P100 系列处理器将同样的逻辑带入更受成本和功耗约束的设计。它们在更小的嵌入式封装尺寸中提供相同的 CPU/GPU/NPU 集成,因此即使你不构建 X100 级系统,可移植性也很有价值。

NVIDIA 凭借成熟、熟悉且与 AI 深度绑定的 CUDA,在开发者心中占据了强势位置。但这导致了一种假设:GPU 技术栈必须是系统设计的重心。如果你的产品真的是一个 GPU 优先的盒子,这个假设或许没问题。但如果你正在构建一个 CPU 并发、网络、显示、图形和 AI 必须共存的系统,那么 GPU 优先设计并不自动是最佳答案。围绕 Ryzen AI 构建平台可以减少复杂性,而不是增加复杂性。

可移植性只有在生态可信时才有意义

当然,没有人会仅凭信念选择一条新的可移植路径。你需要工具、文档、示例以及学习路径。这就是为什么将 AMD ROCm 软件描述为一个“由厂商支持的开源软件栈”比简单说“开源”更有用。价值不在于为了开放而开放,而在于你无需采用一个没有供应商支持的工具链,就能获得灵活性和支持。

AMD 发布了一份移植指南和一套公开的 CUDA 到 ROCm 迁移课程,专门面向已经熟悉 CUDA、希望以结构化方式理解转换路径的开发者。此外,AMD 有超过 900 名面向客户的员工致力于你在 AMD 嵌入式平台上的成功。

所有这些之所以重要,是因为真正的障碍不是语法,而是信心。你需要知道有一条受支持的路可以走。

更大的转变

最重要的一点是,这不再只是一个 GPU 决策,而是一个软件杠杆决策——你如何利用已有软件投资撬动更大的架构自由度。如果你的代码始终绑定在单个供应商的技术栈上,那么未来每个产品都会继承该供应商的约束。如果你的代码变得可移植,你就重新获得了架构决策的自由。这意味着你可以在合适的时候选择独立 GPU,也可以在符合需求时选择 AMD Ryzen AI 嵌入式 X100 系列这类集成式 APU 平台。你可以让产品需求驱动架构,而不是让旧的软件假设迫使你去迁就它。

这才是真正的收益。不是抽象的可移植性,也不是作为口号的“开放”,而是更实际的东西:保留你已经构建的软件,同时获得构建一个为未来做好准备的平台的自由。

你的 GPU 软件中最有价值的部分,不是它最初所基于的供应商,而是其中已经沉淀的工程投资。HIP 和 HIPIFY 为你提供了一条现实路径,在保留 CUDA 投资的同时扩展你的选择。而一旦你的代码可移植,像 AMD Ryzen AI 嵌入式 X100 和 P100 系列这样的平台就会变得更有吸引力——它们不仅是 NVIDIA 的替代品,更是可能比 GPU 优先架构更适合你下一个设计的集成系统平台。

这就是为什么可移植性现在比 CUDA 成为默认选择时更加重要。了解更多关于使用 HIPIFY 进行 CUDA 到 HIP 迁移的信息,探索 AMD ROCm 平台如何帮助你为下一个嵌入式设计做好准备。

新人专享大礼包