原始论文采用 CC BY 4.0 许可(http://creativecommons.org/licenses/by/4.0/)。 这是对下方论文的AI生成解释。它不是由作者撰写或认可的。如需技术准确性,请参阅原始论文。 阅读完整免责声明
想象一下你是一位正试图烹饪一场盛大宴会的厨师。你的厨房里有三种不同类型的高功率烤箱:一台由 NVIDIA 制造,一台由 AMD 制造,还有一台由 Intel 制造。每台烤箱烹饪食物的方式都不同,使用的旋钮也不同,并且需要不同的食谱才能发挥最佳性能。
如果你专门为 NVIDIA 烤箱编写食谱(使用一种叫做 CUDA 的语言),你就不能直接把同样的食谱放入 AMD 或 Intel 的烤箱中。你必须重写整个东西。这是一个问题,因为你并不总是知道明天你的厨房里会有哪种烤箱。
为了解决这个问题,论文讨论了“可移植层”(portability layers)。把它们想象成 通用翻译器 或 智能适配器。它们能让你编写一个主食谱,然后由翻译器将其转换为每台烤箱都能理解的特定语言。论文研究了几个这样的翻译器(如 Kokkos、SYCL、OpenMP 和 Alpaka),以观察哪一个最适合不同类型的烹饪任务。
以下是作者在用高能物理实验(例如用于研究亚原子粒子的实验)中的真实“食谱”测试这些翻译器时发现的结果:
1. “启动时间”问题
启动 GPU(烤箱)并不是瞬间完成的。它需要几毫秒的时间来唤醒并做好准备。
- 问题所在: 有些翻译器在启动烹饪过程时非常缓慢。例如,在使用 AMD 烤箱时,Kokkos 会导致显著的延迟。如果你的烹饪任务非常短(比如煮一个 10 秒钟的鸡蛋),而翻译器光是启动炉灶就花了 5 秒钟,那么你就浪费了一半的时间。
- 教训: 如果你的任务非常微小且快速,请避开那些会让启动变慢的翻译器。
2. “拥挤厨房”问题
在真实的物理实验室中,GPU 并不是独自工作的。它是更大系统的一部分,许多人(线程)试图同时使用这台烤箱。
- 问题所在: 一些翻译器处理不好人群。例如,Kokkos 有一条规则说:“一次只能有一个人与烤箱交谈”,这会导致当多个厨师试图同时启动任务时出现交通堵塞。SYCL 则有些不稳定;有时它允许所有人同时烹饪,有时又会强迫他们在排队等待,这取决于你使用的是哪个版本的翻译器。
- 教训: 如果你的应用程序需要许多人同时工作,你需要一个懂得如何管理繁忙厨房而不锁上门的翻译器。
3. “工具箱兼容性”问题
物理食谱通常使用特殊的工具(库,如 ROOT 或 Eigen)来辅助数学运算和数据处理。
- 问题所在: 一些这些工具与翻译器配合得并不好。例如,一个流行的数学工具 Eigen 在使用 NVIDIA 编译器(许多翻译器依赖于此)时经常会出错。此外,尝试在一个项目中同时使用两个不同的编译器(一个用于 CPU,一个用于 GPU)就像是用两套不匹配的蓝图来盖房子——这会让建筑过程(构建软件)变成一场噩梦。
- 教训: 在选择翻译器之前,请检查你喜爱的工具是否能装进它的框架里。
4. “家具摆放”问题
GPU 喜欢简单、平坦的布局。它们更喜欢数据像一排整齐的盒子那样排列。然而,物理数据往往呈现出复杂、凌乱的形状(比如一堆大小不一的行李箱)。
- 问题所在: 翻译器试图通过将数据包装在特殊的容器中来修复这种混乱。虽然这使得代码具有可移植性,但它增加了“开销”——就像在移动任何东西之前,都要先把每一件物品都装进行李箱,即使你只需要移动一只袜子。这会减慢速度。此外,没有任何一个翻译器擅长处理“锯齿状”数据(长度不一的行),而这在物理学中非常常见。
- 教训: 如果你的数据复杂且凌乱,翻译器可能会为了整理它们而拖慢你的速度。
5. “专业工具”问题
有时你需要特定的工具,比如随机数生成器(RNG)或快速傅里叶变换(FFT)。
- 问题所在: 每个烤箱制造商都有自己专属的、超快速的专业化工具。通用翻译器通常不包含这些专门的工具,或者使用的是它们自己较慢的版本。虽然你可以强制翻译器使用烤箱的原生工具,但这会破坏“可移植性”,因为那个工具只适用于那台特定的烤箱。
- 教训: 如果你严重依赖这些特定工具,你可能必须在速度(使用烤箱的原生工具)或可移植性(使用翻译器的通用工具)之间做出选择。
6. “建设时间”与“搬家”问题
- 构建食谱: 一些翻译器会让“烹饪时间”(编译时间)变得更长。对于大型项目,使用某些翻译器可能会让构建过程从几分钟变成几小时。
- 搬迁厨房: 如果你为特定的烤箱(例如 NVIDIA V100)构建了软件,它可能无法在更新的烤箱(例如 NVIDIA A100)上运行。这要求你为可能遇到的每一种类型的烤箱都构建一个单独的版本,这为向不同实验室分发软件带来了巨大的物流难题。
最终结论
论文得出结论:不存在“完美”的翻译器。
- Kokkos 对某些任务表现出色,但在特定硬件上的并发处理和启动时间方面存在困难。
- SYCL 功能强大,但根据编译器版本的不同,其表现可能并不一致。
- OpenMP 及其他翻译器在处理内存和不同硬件方面各有优劣。
核心要点: 你不能仅仅因为某个翻译器很流行就去选择它。你必须观察你的特定“食谱”(你的应用程序)。如果你的代码短促且快速,请选择启动时间低的翻译器。如果你的代码复杂且使用了许多工具,请选择能与这些工具良好配合的翻译器。
作者还指出,这些技术正在迅速发展,就像每年都会推出新模型的烤箱一样。今天的最佳选择在明天可能会发生变化,因此开发者需要持续关注这一领域的发展。虽然未来的新标准可能会让这些选择变得更容易,但目前,仔细的测试是找到合适方案的唯一途径。
您所在领域的论文太多了?
获取与您研究关键词匹配的最新论文每日摘要——附技术摘要,使用您的语言。