Nvidia为FLOPS提供的nvprof输出

时间:2017-06-06 11:17:59

标签: cuda nvprof

我看到nvprof可以分析内核中的翻牌次数(使用如下参数)。此外,当我浏览文档时(这里http://docs.nvidia.com/cuda ...它说flop_count_sp是“非谓词线程执行的单精度浮点运算的数量(加,乘,乘,累和特殊)。乘法累加运算对计数贡献2。“

然而,当我跑步时,flop_count_sp(应该是flop_count_sp_add + flop_count_sp_mul + flop_count_sp_special + 2 * flop_count_sp_fma)的结果我发现它总和中不包括flop_count_sp_special的值。

你能告诉我我应该用什么吗?我应该将此值添加到flop_count_sp的总和,还是我应该考虑公式不包含flop_count_sp_special的值?

还可以告诉我这些特殊操作是什么?

我正在使用以下命令行:

nvprof --metrics flops_sp --metrics flops_sp_add --metrics flops_sp_mul --metrics flops_sp_fma --metrics flops_sp_special myKernel args

其中myKernel是我的CUDA内核的名称,其中包含args给出的一些输入参数。

我的nvprof输出的一部分如下所示:

 ==20549== Profiling result:
 ==20549== Metric result:
 Invocations                               Metric Name                        Metric Description         Min         Max         Avg
 Device "Tesla K40c (0)"
    Kernel: mykernel(float*, int, int, float*, int, float*, int*)
           2                             flop_count_sp  Floating Point Operations(Single Precisi       70888       70888       70888
           2                         flop_count_sp_add  Floating Point Operations(Single Precisi       14465       14465       14465
           2                         flop_count_sp_mul  Floating Point Operation(Single Precisio       14465       14465       14465
           2                         flop_count_sp_fma  Floating Point Operations(Single Precisi       20979       20979       20979
           2                     flop_count_sp_special  Floating Point Operations(Single Precisi       87637       87637       87637

1 个答案:

答案 0 :(得分:6)

“特殊”操作列在Programming Guide的算术吞吐量表中,它们是:reciprocal,recip sqrt,log,exp,sin,cos。请注意,它们不如默认版本精确(但速度快),您必须使用内在或编译器标志(-use_fast_math)选择加入。

尽管文档说的是,但似乎特殊操作不包含在flop_count_sp总计中。这是当前版本(8.0)中的一个错误,我已经提交了一个错误,因此应该在将来的版本中修复它(所以这个段落在某些时候会过时)。