Evaluating Application Characteristics for GPU Portability Layer Selection

本文通过分析来自主要高能物理实验的代表性异构应用,旨在识别影响不同 GPU 可移植性层性能的关键特征,从而指导开发者根据其特定需求选择最合适的技术。

原作者: Mohammad Atif, Meghna Bhattacharya, Mark Dewing, Zhihua Dong, Julien Esseiva, Oliver Gutsche, Matti Kortelainen, Ka Hei Martin Kwok, Charles Leggett, Meifeng Lin, Aleksei Strelchenko, Vakhang Tsulaia
发布于 2026-01-27
📖 1 分钟阅读🧠 深度阅读

原作者: Mohammad Atif, Meghna Bhattacharya, Mark Dewing, Zhihua Dong, Julien Esseiva, Oliver Gutsche, Matti Kortelainen, Ka Hei Martin Kwok, Charles Leggett, Meifeng Lin, Aleksei Strelchenko, Vakhang Tsulaia, Brett Viren, Tianle Wang, Haiwang Yu

原始论文采用 CC BY 4.0 许可(http://creativecommons.org/licenses/by/4.0/)。 这是对下方论文的AI生成解释。它不是由作者撰写或认可的。如需技术准确性,请参阅原始论文。 阅读完整免责声明

想象一下你是一位正试图烹饪一场盛大宴会的厨师。你的厨房里有三种不同类型的高功率烤箱:一台由 NVIDIA 制造,一台由 AMD 制造,还有一台由 Intel 制造。每台烤箱烹饪食物的方式都不同,使用的旋钮也不同,并且需要不同的食谱才能发挥最佳性能。

如果你专门为 NVIDIA 烤箱编写食谱(使用一种叫做 CUDA 的语言),你就不能直接把同样的食谱放入 AMD 或 Intel 的烤箱中。你必须重写整个东西。这是一个问题,因为你并不总是知道明天你的厨房里会有哪种烤箱。

为了解决这个问题,论文讨论了“可移植层”(portability layers)。把它们想象成 通用翻译器智能适配器。它们能让你编写一个主食谱,然后由翻译器将其转换为每台烤箱都能理解的特定语言。论文研究了几个这样的翻译器(如 KokkosSYCLOpenMPAlpaka),以观察哪一个最适合不同类型的烹饪任务。

以下是作者在用高能物理实验(例如用于研究亚原子粒子的实验)中的真实“食谱”测试这些翻译器时发现的结果:

1. “启动时间”问题

启动 GPU(烤箱)并不是瞬间完成的。它需要几毫秒的时间来唤醒并做好准备。

  • 问题所在: 有些翻译器在启动烹饪过程时非常缓慢。例如,在使用 AMD 烤箱时,Kokkos 会导致显著的延迟。如果你的烹饪任务非常短(比如煮一个 10 秒钟的鸡蛋),而翻译器光是启动炉灶就花了 5 秒钟,那么你就浪费了一半的时间。
  • 教训: 如果你的任务非常微小且快速,请避开那些会让启动变慢的翻译器。

2. “拥挤厨房”问题

在真实的物理实验室中,GPU 并不是独自工作的。它是更大系统的一部分,许多人(线程)试图同时使用这台烤箱。

  • 问题所在: 一些翻译器处理不好人群。例如,Kokkos 有一条规则说:“一次只能有一个人与烤箱交谈”,这会导致当多个厨师试图同时启动任务时出现交通堵塞。SYCL 则有些不稳定;有时它允许所有人同时烹饪,有时又会强迫他们在排队等待,这取决于你使用的是哪个版本的翻译器。
  • 教训: 如果你的应用程序需要许多人同时工作,你需要一个懂得如何管理繁忙厨房而不锁上门的翻译器。

3. “工具箱兼容性”问题

物理食谱通常使用特殊的工具(库,如 ROOTEigen)来辅助数学运算和数据处理。

  • 问题所在: 一些这些工具与翻译器配合得并不好。例如,一个流行的数学工具 Eigen 在使用 NVIDIA 编译器(许多翻译器依赖于此)时经常会出错。此外,尝试在一个项目中同时使用两个不同的编译器(一个用于 CPU,一个用于 GPU)就像是用两套不匹配的蓝图来盖房子——这会让建筑过程(构建软件)变成一场噩梦。
  • 教训: 在选择翻译器之前,请检查你喜爱的工具是否能装进它的框架里。

4. “家具摆放”问题

GPU 喜欢简单、平坦的布局。它们更喜欢数据像一排整齐的盒子那样排列。然而,物理数据往往呈现出复杂、凌乱的形状(比如一堆大小不一的行李箱)。

  • 问题所在: 翻译器试图通过将数据包装在特殊的容器中来修复这种混乱。虽然这使得代码具有可移植性,但它增加了“开销”——就像在移动任何东西之前,都要先把每一件物品都装进行李箱,即使你只需要移动一只袜子。这会减慢速度。此外,没有任何一个翻译器擅长处理“锯齿状”数据(长度不一的行),而这在物理学中非常常见。
  • 教训: 如果你的数据复杂且凌乱,翻译器可能会为了整理它们而拖慢你的速度。

5. “专业工具”问题

有时你需要特定的工具,比如随机数生成器(RNG)或快速傅里叶变换(FFT)。

  • 问题所在: 每个烤箱制造商都有自己专属的、超快速的专业化工具。通用翻译器通常不包含这些专门的工具,或者使用的是它们自己较慢的版本。虽然你可以强制翻译器使用烤箱的原生工具,但这会破坏“可移植性”,因为那个工具只适用于那台特定的烤箱。
  • 教训: 如果你严重依赖这些特定工具,你可能必须在速度(使用烤箱的原生工具)或可移植性(使用翻译器的通用工具)之间做出选择。

6. “建设时间”与“搬家”问题

  • 构建食谱: 一些翻译器会让“烹饪时间”(编译时间)变得更长。对于大型项目,使用某些翻译器可能会让构建过程从几分钟变成几小时。
  • 搬迁厨房: 如果你为特定的烤箱(例如 NVIDIA V100)构建了软件,它可能无法在更新的烤箱(例如 NVIDIA A100)上运行。这要求你为可能遇到的每一种类型的烤箱都构建一个单独的版本,这为向不同实验室分发软件带来了巨大的物流难题。

最终结论

论文得出结论:不存在“完美”的翻译器。

  • Kokkos 对某些任务表现出色,但在特定硬件上的并发处理和启动时间方面存在困难。
  • SYCL 功能强大,但根据编译器版本的不同,其表现可能并不一致。
  • OpenMP 及其他翻译器在处理内存和不同硬件方面各有优劣。

核心要点: 你不能仅仅因为某个翻译器很流行就去选择它。你必须观察你的特定“食谱”(你的应用程序)。如果你的代码短促且快速,请选择启动时间低的翻译器。如果你的代码复杂且使用了许多工具,请选择能与这些工具良好配合的翻译器。

作者还指出,这些技术正在迅速发展,就像每年都会推出新模型的烤箱一样。今天的最佳选择在明天可能会发生变化,因此开发者需要持续关注这一领域的发展。虽然未来的新标准可能会让这些选择变得更容易,但目前,仔细的测试是找到合适方案的唯一途径。

您所在领域的论文太多了?

获取与您研究关键词匹配的最新论文每日摘要——附技术摘要,使用您的语言。

试用 Digest →