一份CUDA源码,跑上了苹果GPU
想象一下这个场景:你有一段原本为英伟达 CUDA 设计的硬核计算程序,几乎没改动任何内核代码,就直接跑在了一台搭载 M3 Pro 芯片的 MacBook 上。
这不是什么科幻电影里的“跨次元”技术,而是昨天开源科学计算平台 OpenFVM 上真实发生的一幕。更让人意外的是,它并非一个简单的“向量加减乘除”演示,而是在真实的三维流体模拟任务中,实现了约 10 倍的速度提升。
而这件事的背后,站着一位特殊的参与者 —— GPT-5.6 Sol。
当“巴别塔”被打通:CUDA 如何读懂 Metal?
事情要从 GPU 计算领域的“碎片化”说起。
过去十几年,GPU 计算生态就像一座语言不通的巴别塔。英伟达有 CUDA,AMD 有 HIP,苹果有 Metal。这些生态如同不同的编程语言,互相不兼容。一个用 CUDA 写成的程序,通常需要开发者脱层皮,大量重写才能在其他平台上运行。
但这次,开发者玩了一把“极限操作”。他们没有选择重新开发一套 Metal 版本,而是搭建了一条奇妙的转换通道:
程序先经过 Clang/HIP 处理,再通过 SPIR-V、Vulkan 和 MoltenVK 等中间层,最终让苹果 Metal GPU 能够理解并高效执行。
最绝的是什么?完全没有添加任何 Metal 专用的粒子 API。 应用层仍保留原有的 CUDA/HIP 风格 kernel 调用,实现了真正的“硬件透明”。也就是说,代码以为自己在跑在英伟达显卡上,但实际上,它在苹果的硅片上狂奔。
AI 介入底层:GPT-5.6 Sol 的 6 小时奇迹
这套复杂的转换管道并非一帆风顺。在这个过程中,GPT-5.6 Sol 发挥了关键作用。
它不仅仅是帮开发者“写几行代码”,而是深度参与了底层系统设计。它帮助完成了设备端内存布局构建,并在关键的 6 个小时内,敏锐地发现了 MoltenVK 和 SPIR-V 中的兼容性问题,并设计出了相应的变通方案。
这标志着 AI 正在从“帮助写代码”走向“参与底层系统设计、优化和跨平台工程调试”的新阶段。
10 倍加速背后的硬核实测
真正考验这项工作的,是一个极其复杂的测试用例 —— 三维 SPH 大坝溃坝模拟。
这个任务需要同时处理扫描、排序与重排、单元格和相邻列表构建、ghost 粒子交换、归约操作以及原子操作等多个复杂模块。任何一个环节出问题,都会导致性能下降或物理结果偏差。
但测试结果出乎预期:
- Metal GPU (M3 Pro): 约 6 秒完成
- CPU 顺序计算: 约 60 秒完成
同一个程序,仅仅更换计算硬件,就获得了约 10 倍的速度提升,且 GPU 利用率接近 100%(表明转换效率极高)。
更重要的是,速度提升并没有牺牲准确性。 开发者检查发现,苹果 GPU 版本和原始计算版本最终得到的物理结果保持一致,包括关键参数和模拟轨迹都高度接近。这意味着,苹果 GPU 不仅跑起来了,而且真正完成了科学计算任务。
“这有什么用?”开发者:因为好玩,也因为好用
当然,这项突破距离改变整个 GPU 产业还有距离。目前苹果 Metal GPU 最大的限制之一,是对高精度浮点计算支持不足,而很多专业科学计算领域依赖双精度运算。因此,在天气预测、航空航天模拟等超级计算场景中,英伟达专业 GPU 仍然占据优势。
也有人质疑这项探索的意义,一位网友表示:
“市面上明明有那么多更合适的系统,在 Mac 上跑这种小仿真,到底有什么用?”
言下之意是,MacBook 的 GPU 再快,也终究不是为科学计算而生的,这件事听起来更像一场炫技。
开发者的回应颇为坦率且接地气:
“最大的用处,就是好玩,以及工作顺手。”
他解释说,团队的大规模仿真本就跑在集群上,而这次能在苹果架构上跑通,恰恰验证了设备抽象层的设计是成立的。更实际的理由藏在日常开发里:
- 本地调试太慢: 跑大仿真之前,总要先用小仿真调试,而本地调试靠 CPU 实在太慢。
- 传输数据痛苦: 仿真结果动辄几个 GB,SSH 根本传不回来,远程桌面又笨重难用,不如直接在本地跑。
- 无缝扩展: 最妙的地方在于,在笔记本上调试通过的那份代码,原封不动地放到 GPU 集群上,就能自动扩展规模。
结语:不再被单一生态绑定的未来
这项探索还证明了:同一套 CUDA/HIP 风格的算法,可以相对透明地运行在 Apple Silicon 等不同硬件后端上。
开发者进一步指出,粒子存储随粒子数 N 线性增长,而邻居搜索等工作量大致为 O(N・k)。目前展示的 10 倍加速是单机后端对比的结果。未来,借助苹果 Thunderbolt 支持的 RDMA 技术,还可以实现多机动态负载均衡,让模拟在多台设备上扩展。
苹果 GPU 这次跨过 CUDA 鸿沟,可能只是一个开始。未来,软件开发者或许真的不再被单一 GPU 生态所绑定。
项目链接: https://github.com/mosaic-group/openfvm/pull/18
参考来源: X (Twitter) @Abhinavsns