GPU 计算长期以来一直是人工智能和高性能计算领域的重要推动力, 但其复杂的编程环境一直是许多开发者望而却步的门槛。然而, 一个名为 gpu.cpp 的新项目可能正在改变这一现状, 为 GPU 编程带来前所未有的简洁性和可移植性。
从梦想到现实: 简化 GPU 编程
前谷歌 DeepMind 研究员 Austin Huang 最近加入 Answer.ai 后, 立即着手实现他长期以来的一个梦想: 让 GPU 编程变得像普通 C++编程一样简单。这个梦想最终在 gpu.cpp 项目中得以实现。
"我们希望能够像编写普通 C++代码一样编写 GPU 程序,"Huang 解释道,"无需复杂的工具链, 无需庞大的构建系统, 也无需纠结于繁琐的描述符集布局。就是简单地 include 一个头文件, 然后直接编译运行。"
gpu.cpp 通过巧妙地利用 WebGPU 作为底层 API 来实现这一目标。尽管名字中带有"Web", 但 gpu.cpp 实际上并不依赖于浏览器环境。相反, 它为开发者提供了一个轻量级的接口, 使他们能够直接在本地环境中进行 GPU 编程。
令人瞩目的性能与简洁性
为了展示 gpu.cpp 的威力,Huang 编写了一个"Hello World"级别的程序, 实现了机器学习中常用的 GELU(Gaussian Error Linear Unit) 激活函数。令人惊叹的是, 整个编辑、编译和运行的周期仅需 1-2 秒, 这种快速的迭代速度对于 GPU 编程来说是前所未有的。
更令人印象深刻的是,Huang 还开发了一个名为 shadertui 的终端版 Shadertoy 克隆。这个工具能够实时加载和执行 WebGPU 计算着色器, 而整个程序的代码量仅为 150 行左右, 编译时间不到一秒。这充分展示了 gpu.cpp 在快速原型开发和实验方面的潜力。
填补 GPU 编程生态的空白
尽管有人可能认为 gpu.cpp 仅仅是对 WebGPU 的简单封装, 但 Huang 强调了该项目的独特定位。他指出, 当前的 GPU 编程主要有两种方式: 一是像 CUDA 和 ROCm 这样的底层平台专用栈, 二是 PyTorch 、 JAX 等框架与各种机器学习编译器的组合。
"这两种方式各有优势, 但都不太适合快速原型开发和实验,"Huang 解释道,"gpu.cpp 的目标就是填补这个空白。它让开发者能够像编写普通 C++代码一样进行 GPU 编程, 既保留了底层控制的灵活性, 又避免了繁琐的环境配置。"
WebGPU: 通用 GPU 编程的新标准?
gpu.cpp 的一个关键创新在于它将 WebGPU 转变为一个通用的 GPU 编程接口。这一巧妙的策略可能会对整个 GPU 编程生态系统产生深远影响。
"我们希望扩大 GPU 计算的可用性,"Huang 表示,"并使自定义 GPU 算法能够轻松地集成到各种应用程序、模拟环境和运行时中, 同时保证广泛的可移植性和易用性。"
为了展示 gpu.cpp 的潜力,Huang 还展示了一个小型物理模拟项目——一组双摆系统的动态模拟。这个不到 100 行代码的程序能够立即编译和运行, 充分体现了 gpu.cpp 的简洁性和高效性。
性能与可移植性的权衡
在可移植性方面,Huang 承认存在一些权衡, 但早期的实验结果令人鼓舞。一位名为 @junjihashimoto 的开发者使用 gpu.cpp 实现的简单矩阵乘法基准测试在 M1 Max 笔记本电脑上达到了约 2.5 TFLOPS 的性能, 而且还有很大的优化空间。
Huang 表示, 未来他们计划沿着 llm.c 项目开辟的道路继续前进, 将 CUDA 内核移植到 WebGPU 上, 以探索在保持易用性和可移植性的同时能够达到多高的性能。
GPU 编程的未来展望
尽管有人兴奋地宣称 gpu.cpp 将使开发者摆脱 CUDA 的束缚, 但 Huang 保持谨慎乐观的态度。他承认, 要完全取代 CUDA 还有很长的路要走, 但 gpu.cpp 确实为 GPU 编程开辟了一条新路, 让更多人能够轻松地进入 GPU 编程的世界。
"GPU 的用途远不止训练 AI 模型,"Huang 强调道,"我们希望通过 gpu.cpp 展示 GPU 在通用计算方面的巨大潜力。"
随着 gpu.cpp 的出现,GPU 编程的春天似乎真的来临了。无论是 AI 研究人员、图形编程爱好者, 还是其他领域的开发者,gpu.cpp 都为他们提供了一个新的、富有吸引力的选择。
然而, 关键问题仍然存在:gpu.cpp 是否有潜力成为下一个 CUDA, 彻底改变 GPU 编程格局? 还是说它只是昙花一现? 随着项目的进一步发展和更多开发者的参与, 我们将拭目以待 gpu.cpp 在 GPU 编程生态系统中的表现。
参考文献
- Huang, A. (2024). Introducing gpu.cpp. Twitter. https://twitter.com/austinvhuang/status/1816141053239427343✅
- AnswerDotAI. (2024). gpu.cpp: A lightweight library for portable low-level GPU computation using WebGPU. GitHub. https://github.com/AnswerDotAI/gpu.cpp