问题描述
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
似乎是一条指令,但却是两项操作。 add
和mul
是一条指令和一项操作。由于SASS组件由分析器计算。是否有不算作操作的指令?或相反亦然。我只想了解nvprof和nvvp指标的情况。
此外,当我们谈论以TFLOP / s为单位的峰值性能时,这里的OP
对应于我猜的操作?如果我想估算类似计算到全局内存访问(CGMA)的内容,是否应该在计算部分中使用flop_count_sp
而不是inst_fp_32
?预先感谢。
解决方法
我想知道什么是操作,什么是指令?
fma
似乎是一条指令,但却是两项操作。add
和mul
是一条指令和一项操作。
是的,正确。融合-乘法-加法指令算作2个操作(一个乘法,再加上一个加法)。乘法或加法指令算作一个操作。
是否有不算作操作的指令?
是的,SM内部不使用单精度(或flop_count_dp
等双精度)功能单元的任何指令都不会对这些指标(inst或op)进行任何操作。例如,整数指令或装入或存储指令将不会影响这些指标。我不相信任何可能具有某种浮点性质(例如,到/从浮点的转换)但不包含加法或乘法运算的指令都不会影响运算指标。
此外,当我们谈论TFLOP / s的峰值性能时,这里的OP对应于我猜想的操作?
是
如果我想估算类似计算到全局内存访问(CGMA)的内容,我应该在计算部分使用flop_count_sp而不是inst_fp_32吗?
我认为这可能是一个见解。我会使用说明。如前所述,一个融合乘加指令算作2个运算,但它不会“加倍”浮点单元的压力。因此,在比较代码以查看全局内存加载/存储活动与计算“压力”之间的平衡时,我将使用指令。再说一次,可能只是见仁见智。