optimization - 执行的指令数怎么会大于发出的指令数?

标签 optimization cuda profiling

如果,作为几个在线资源,包括this one ,有吗,执行的指令数+重放的次数=发出的指令数,如果重放的次数是正数,那么一个CUDA内核怎么会有以下属性(来自nvprof)?

Invocations       Avg       Min       Max       Event Name
1                 69161760  69161760  69161760  inst_executed
1                 37263115  37263115  37263115  inst_issued1
1                 19130919  19130919  19130919  inst_issued2

(inst_issued = inst_issued1 + inst_issued2 = 37263115 + 19130919; ratio = inst_executed/inst_issued > 1).


inst_issued = inst_issued1 + inst_issued2 

发出指令总数的正确公式?除了 *issued1 和 *issued2 之外,是否还有内核发布的指令?如果是这样,如何对其进行概要分析?

在网上,我没有看到我的问题的任何明显答案。例如,我的 nvprof --query-events 版本只产生上述三个参数作为 --events 的可能参数。在 CUDA 编程文档、上面的链接或我读过的其他十个左右与 CUDA 指令优化相关的链接中,似乎也没有提到这一点。

附加信息:

0) 我正在运行 CUDA 5.0,并使用 nvcc -m64 -arch=sm_30 进行编译。

1) 我正在运行我的内核的纯数学版本,并且由于它没有寄存器压力,因此全局内存访问的数量可以忽略不计。

2) 我无法访问 nVidia 视觉分析器,所以我不确定它是否会给我与上述不同的答案。

非常感谢,如果这很愚蠢,请提前道歉。

最佳答案

inst_issue2 是发出 2 条指令的发出槽数。

inst_issued1:每个周期发出的单条指令数

inst_issued2:每个周期发出的双指令数

发出指令总数的公式为:

inst_issued = (inst_issued2 * 2) + inst_issued1

使用问题中的数字给出:
inst_issued = (inst_issued2 * 2) + inst_issued1
            = (19130919 * 2) + 37263115
            = 75524953
ratio = inst_executed / inst_issued
      = 69161760 / 75524953
      = .916

关于optimization - 执行的指令数怎么会大于发出的指令数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15336788/

相关文章:

javascript - 测量 JavaScript 函数的内存使用、执行时间和性能

sql-server-2008 - Management Studio 和分析器中的查询执行时间。它测量什么?

c - 快速 float 到整数的转换(截断)

c - 减少 C 程序的大小以适应 qr 代码

c++ - 几个CUDA文件链接错误LNK2005

cuda - thrust::device_reference 不能和 printf 一起使用?

Android ProGuard : Most Aggressive Optimizations

c++ - (x < 0) 或 (x == -1) 哪个更快?

c++ - cudaStreamSynchronize 之后的任何 CUDA 操作都会阻塞,直到所有流都完成

javascript - 为什么 Gaze 消耗大量 CPU?