【问题标题】:Nvidia's nvprof outputs for FLOPSNvidia 用于 FLOPS 的 nvprof 输出
【发布时间】:2017-06-06 11:17:58
【问题描述】:

我看到 nvprof 可以分析内核中的 flop 数(使用如下参数)。此外,当我浏览文档时(这里 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)我发现它的总和中不包括 @ 的值987654327@.

你能建议我应该使用什么吗?我应该将此值添加到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

【问题讨论】:

  • 您能否提供各个事件/指标的值?您的命令行对我来说似乎无效,没有像 flops_sp* 这样的指标。

标签: cuda nvprof


【解决方案1】:

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

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

【讨论】:

  • 非常感谢您指出特殊操作并报告错误。但我想知道,因为在我的内核中我没有使用任何这些特殊操作,那么哪些操作可以为“flop_count_sp_special”贡献值“87637”?
  • 我在这里分享了我的代码 (bitbucket.org/rajgurung777/blogqueryproject)。您可以在文件 simplex.cu 中找到内核实现
  • 你能链接到错误页面吗?
  • @einpoklum 抱歉,这是不可能的。
  • 感谢 Thomas 的及时帮助,也很抱歉代码,因为目前它有依赖项(GLPK 和 Boost 库)来编译。但是,现在我看到 flop_count_sp_special 中的值是如何贡献给“87637”的。在我的内核中,我一直在许多地方使用表达式 x/y 和 x/y 也属于特殊函数。我之前没有注意到。
猜你喜欢
  • 2014-11-26
  • 1970-01-01
  • 2019-10-02
  • 2016-04-28
  • 1970-01-01
  • 1970-01-01
  • 2015-01-06
  • 2013-12-01
  • 1970-01-01
相关资源
最近更新 更多