CUDA Profiler中的“ flop_count_sp”和“ inst_fp_32”指标的含义

问题描述

根据profiler user guide

flop_count_sp:非预测线程(加,乘和乘累加)执行的单精度浮点操作的数量。每个乘加运算对计数贡献2。该计数不包括特殊操作。

inst_fp_32:非谓词线程(算术,比较等)执行的单精度浮点数指令的数量

我有一个带有探查器输出的内核,可以添加到类似以下内容中:

flop_count_sp = flop_count_sp_add + flop_count_sp_mul + 2 * flop_count_sp_fma
inst_fp_32 = flop_count_sp_add + flop_count_sp_mul + flop_count_sp_fma

鉴于这些指标中的数字,我想知道什么是操作,什么是指令fma似乎是一条指令,但却是两项操作。 addmul是一条指令和一项操作。由于SASS组件由分析器计算。是否有不算作操作的指令?或相反亦然。我只想了解nvprof和nvvp指标的情况。

此外,当我们谈论以TFLOP / s为单位的峰值性能时,这里的OP对应于我猜的操作?如果我想估算类似计算到全局内存访问(CGMA)的内容,是否应该在计算部分中使用flop_count_sp而不是inst_fp_32?预先感谢。

解决方法

我想知道什么是操作,什么是指令? fma似乎是一条指令,但却是两项操作。 addmul是一条指令和一项操作。

是的,正确。融合-乘法-加法指令算作2个操作(一个乘法,再加上一个加法)。乘法或加法指令算作一个操作。

是否有不算作操作的指令?

是的,SM内部不使用单精度(或flop_count_dp等双精度)功能单元的任何指令都不会对这些指标(inst或op)进行任何操作。例如,整数指令或装入或存储指令将不会影响这些指标。我不相信任何可能具有某种浮点性质(例如,到/从浮点的转换)但不包含加法或乘法运算的指令都不会影响运算指标。

此外,当我们谈论TFLOP / s的峰值性能时,这里的OP对应于我猜想的操作?

如果我想估算类似计算到全局内存访问(CGMA)的内容,我应该在计算部分使用flop_count_sp而不是inst_fp_32吗?

我认为这可能是一个见解。我会使用说明。如前所述,一个融合乘加指令算作2个运算,但它不会“加倍”浮点单元的压力。因此,在比较代码以查看全局内存加载/存储活动与计算“压力”之间的平衡时,我将使用指令。再说一次,可能只是见仁见智。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...