我看到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
答案 0 :(得分:6)
“特殊”操作列在Programming Guide的算术吞吐量表中,它们是:reciprocal,recip sqrt,log,exp,sin,cos。请注意,它们不如默认版本精确(但速度快),您必须使用内在或编译器标志(-use_fast_math
)选择加入。
尽管文档说的是,但似乎特殊操作不包含在flop_count_sp总计中。这是当前版本(8.0)中的一个错误,我已经提交了一个错误,因此应该在将来的版本中修复它(所以这个段落在某些时候会过时)。