PAYATHON 2026

Ampere 架构中 __reduce_add_sync 的延迟是多少?

数据小许

结论

仅凭题目引用的信息,无法确定 Ampere 架构上 __reduce_add_sync 的具体延迟。CUDA Programming Guide 提到的吞吐量数值 16 不能直接换算为单次操作的延迟;题目引用的 _shfl 讨论也没有提供可回答这个问题的具体数值。

吞吐量不能代替延迟

吞吐量表示单位时间内能处理多少操作,延迟则是一次操作完成所需的时间。知道某条指令的吞吐量,并不能据此确定它的延迟,因为处理器可以在前一条操作完成前发起其他操作。

现有材料只列出了相关表格中的吞吐量,没有给出 __reduce_add_sync 的延迟。因此,不能把表格中的 16 当作周期数,也不能据此推断出一个固定的延迟值。

如何获取目标设备上的延迟

要获得具体数值,需要在实际使用的 GPU 和编译环境中进行测量:

  1. 记录 GPU 型号、计算能力、CUDA Toolkit 版本和编译选项,明确测试对象。
  2. 面向目标架构编译程序,并检查生成的机器码,确认测量代码中包含预期的 reduction 指令。
  3. 设计带数据依赖的重复指令链,避免编译器折叠或删除重复计算。进行多轮测试,并报告测量方法和结果。
  4. 将测得的延迟限定在对应的 GPU、编译器和测试条件下。单台设备上的测量不能直接代表所有 Ampere GPU。

例如,可以检查针对 sm_80 编译的程序生成的 SASS:

nvcc -arch=sm_80 benchmark.cu -o benchmark
cuobjdump --dump-sass benchmark

这两条命令只能检查机器码,不能单独测出指令延迟。延迟需要通过专门设计的基准测试来测量。如果编译结果没有保留预期指令,测试结果就不能代表该指令的延迟。

注意事项

__reduce_add_sync 的实测结果会受测试代码和具体环境影响。报告数值时,应同时说明 GPU 型号、编译目标和测量方法。根据题目提供的材料,目前无法确定 Ampere 架构上的延迟数值。

备注:内容仅供参考。