Ampere 架构中 __reduce_add_sync 的延迟是多少?
数据小许
结论
仅凭题目引用的信息,无法确定 Ampere 架构上 __reduce_add_sync 的具体延迟。CUDA Programming Guide 提到的吞吐量数值 16 不能直接换算为单次操作的延迟;题目引用的 _shfl 讨论也没有提供可回答这个问题的具体数值。
吞吐量不能代替延迟
吞吐量表示单位时间内能处理多少操作,延迟则是一次操作完成所需的时间。知道某条指令的吞吐量,并不能据此确定它的延迟,因为处理器可以在前一条操作完成前发起其他操作。
现有材料只列出了相关表格中的吞吐量,没有给出 __reduce_add_sync 的延迟。因此,不能把表格中的 16 当作周期数,也不能据此推断出一个固定的延迟值。
如何获取目标设备上的延迟
要获得具体数值,需要在实际使用的 GPU 和编译环境中进行测量:
- 记录 GPU 型号、计算能力、CUDA Toolkit 版本和编译选项,明确测试对象。
- 面向目标架构编译程序,并检查生成的机器码,确认测量代码中包含预期的 reduction 指令。
- 设计带数据依赖的重复指令链,避免编译器折叠或删除重复计算。进行多轮测试,并报告测量方法和结果。
- 将测得的延迟限定在对应的 GPU、编译器和测试条件下。单台设备上的测量不能直接代表所有 Ampere GPU。
例如,可以检查针对 sm_80 编译的程序生成的 SASS:
nvcc -arch=sm_80 benchmark.cu -o benchmark
cuobjdump --dump-sass benchmark
这两条命令只能检查机器码,不能单独测出指令延迟。延迟需要通过专门设计的基准测试来测量。如果编译结果没有保留预期指令,测试结果就不能代表该指令的延迟。
注意事项
__reduce_add_sync 的实测结果会受测试代码和具体环境影响。报告数值时,应同时说明 GPU 型号、编译目标和测量方法。根据题目提供的材料,目前无法确定 Ampere 架构上的延迟数值。
备注:内容仅供参考。
