让 Futhark 暂时离开 GPU
来源:futhark-lang.org — 2026-10-02
📋 概述
本文讲述一个真实的工程困境:一个自动微分项目需要先在 CPU 上对图做距离-2 着色(该算法本质串行),再用着色结果在 GPU 上大规模并行计算 Jacobian 矩阵。Futhark 的编译模型把数组统一放在 GPU 内存,导致串行步骤在 GPU 后端上慢上三个数量级,而用 CPU 后端又会让并行步骤也退化为串行。文章讨论了“按数组用途决定内存位置”这一原则性方案,并说明作者最终为何选择了一个 hack。
🔑 核心要点
- 项目分两步:CPU 上图着色 + GPU 上并行算 Jacobian
- 距离-2 着色算法 本质上是串行的,用 GPU 后端会慢约三个数量级
- Futhark 编译模型把 所有数组统一放在 GPU 内存
- 在 CPU 代码中索引 GPU 数组会触发 每次约数微秒的通信开销
- 原则性方案是 按数组实际用途决定放在 CPU 还是 GPU 内存
💡 金句
复制单个数组元素几乎不花时间,但建立通信并阻塞等待复制完成的开销却是毁灭性的——每个数组元素轻易就要几微秒。
👍 0
👎 0
← 返回 Lobsters 首页