【问题标题】:How can the number of instructions executed be greater than the number of instructions issued?执行的指令数怎么会大于发出的指令数?
【发布时间】:2013-02-26 12:33:47
【问题描述】:

如果像几个在线资源,包括this one,有的话,执行的指令数+replays数=发出的指令数,replays数是正数,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 视觉分析器的权限,所以我不确定它是否会给我与上述不同的答案。

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

【问题讨论】:

    标签: optimization cuda profiling


    【解决方案1】:

    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
    

    【讨论】:

      猜你喜欢
      • 2018-01-02
      • 1970-01-01
      • 1970-01-01
      • 2016-03-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-29
      相关资源
      最近更新 更多