Nvidia为FLOPS提供的nvprof输出

Ami*_*mit 5 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
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

Tom*_*Tom 6

"特殊"操作列在编程指南的算术吞吐量表中,它们是:倒数,recip sqrt,log,exp,sin,cos.请注意,这些不如默认版本精确(但更快),您必须使用内在或编译器标志(-use_fast_math)选择加入.

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