You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何调用一次cublasSasum,asum_kernel却被nsys检测到执行两次?

cuBLAS cublasSasum 内核两次调用问题解析

我仅从cuBLAS调用一次cublasSasum函数,但通过nsys性能分析工具发现,它实际调用的asum_kernel内核被执行了两次。当前计算4096²个元素的求和操作时,nsys分析结果如下:

Time (%)  Total Time (ns)  Instances   Avg (ns)     Med (ns)    Min (ns)   Max (ns)   StdDev (ns)                              Name                             
 --------  ---------------  ---------  -----------  -----------  ---------  ---------  -----------  -------------------------------------------------------------
     17.9          415,655          2    207,827.5    207,827.5      3,264    412,391    289,296.5  void asum_kernel<int, float, float>(cublasAsumParams<T2, T3>)

问题与解答

  • 问题1:这种两次调用的情况,是否是因为该内核先执行块级归约、保存结果后,再对临时结果执行最终归约导致的?
    是的,cuBLAS的cublasSasum采用两级归约逻辑:第一次内核调用将大规模数据按线程块做局部归约,把每个块的中间结果写入全局内存临时缓冲区;第二次内核对这些临时结果做最终归约,得到总和。这种设计是为了避免单线程处理全量数据的性能瓶颈,保证大尺寸计算的效率。

  • 问题2:尝试仅计算4个元素,使用4个线程和一个网格块,此时asum_kernel仍被调用两次,明明一次就足够处理该场景了?
    这是因为cuBLAS的内核是通用化实现,不会针对极小尺寸输入做特殊分支优化。哪怕只有4个元素,它依然会走默认的两级归约流程——第一次处理原始数据生成临时结果,第二次完成最终归约。为了保持代码实现的一致性、减少分支复杂度,cuBLAS没有为这种极端小场景单独调整逻辑。

内容的提问来源于stack exchange,提问作者SKPS

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 04:35:10