算一串总和,看似每一步都很简单,机器却未必能同时开工:后一轮加法要等前一轮完成,就像只有一支笔,写完上一行才能写下一行。这堂免费的 GPU 内核工程课暂时不写 GPU 代码,而是从 CPU 并行讲起。作者用 sum += a[i] * b[i] 说明“依赖链”——后一步必须等待前一步结果;再把一次累加拆成四个独立累加器,让处理器同时推进四条计算链。作者还提醒,测试时应关闭编译器自动向量化,否则会把两种优化效果混在一起。
这套直觉也解释了 GPU 内核为何可能“更快却不完全一样”。浮点数精度有限,改变加法顺序会改变舍入结果;并行归约——把许多数字分组求和再汇总——因此可能出现细微数值差异。多线程若写入同一缓存行,还会触发“伪共享”:变量不同,缓存却反复同步。至于内存受限循环,瓶颈是搬数据,堆更多计算单元也未必提速。材料来自作者在 Reddit 对课程内容的自述,未提供完整机器配置和可核验的效果数字。