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

如何计算调用cuBlas的MPI程序的实际FLOPS?

问题解答

一、手动计算FLOPS的“浮点操作数”说明

你提到的“模型数”其实是实际执行的浮点操作总次数,不是算法的渐近复杂度O(f(N))(比如O(N³)是GEMM的复杂度阶,仅用来描述规模增长趋势,不是具体操作数)。

以GEMM(矩阵乘法)为例:

  • 对于M×K矩阵A与K×N矩阵B相乘得到M×N矩阵C,每个C[i][j]的计算需要K次浮点乘法 + (K-1)次浮点加法,总操作数为 M*N*(K + (K-1)) = M*N*(2K-1)
  • 行业内为了简化计算,通常近似为 2*M*N*K(当K较大时,2K-1与2K的差异可忽略)

你举的4×5与5×6矩阵相乘的例子:

  • 准确总浮点操作数是 4*6*(5+4) = 216
  • 近似值为 2*4*6*5 = 240
  • 若耗时0.5秒,准确FLOPS为 216/0.5 = 432,近似FLOPS为 240/0.5 = 480

注意:cuBLAS的GEMM实现会做分块、向量指令等优化,但手动计算的操作数依然基于标准矩阵乘法逻辑,可用来和工具测得的结果做对比参考。

二、支持MPI+CUDA/cuBLAS程序的性能分析工具

Nsight System和Nsight Compute完全支持分析调用CUDA函数的MPI程序,你可能没掌握正确的使用方式:

1. Nsight System(全局性能分析,覆盖FLOPS、内存使用等)

通过MPI启动器配合Nsight System的profile命令,捕获所有MPI进程的CUDA活动:

mpiexec -n <进程数> nsys profile --stats=true ./你的MPI-cuBLAS程序

运行后生成的.nsys-rep报告文件,可查看:

  • 每个MPI进程中cuBLAS kernel的执行时间、浮点吞吐量(FLOPS)
  • GPU内存使用率、数据传输耗时
  • MPI通信与CUDA计算的重叠情况

2. Nsight Compute(精细化kernel分析,聚焦FLOPS细节)

若需深入分析单个cuBLAS kernel的FLOPS、指令吞吐等细节,可先通过Nsight System定位目标kernel,再针对特定MPI进程启动分析:

# 替换<kernel名称>为实际cuBLAS kernel名,针对第0个MPI进程分析
mpiexec -n <进程数> ncu -k <kernel名称> ./你的MPI-cuBLAS程序

它会输出kernel的浮点操作数、实际执行时间、峰值FLOPS利用率等精准指标,比手动计算更可靠。

其他可选工具

  • nvprof虽官方标记为废弃,但部分CUDA版本仍可使用,启动方式类似:mpiexec -n <进程数> nvprof ./你的MPI-cuBLAS程序,适合快速排查问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 09:51:28