一个简单的问题,确实:我有一个内核,它可以运行每个Streaming Multiprocessor(SM)的最大块数,并且想知道理论上可以从中提取多少性能。理想情况下,我想知道空闲的SM周期的百分比,即所有warp在内存访问时被阻止。
我真的只是想找到这个号码。我不寻找的是
答案 0 :(得分:5)
Nsight Visual Studio Edition 2.1和2.2问题效率实验提供您要求的信息。应在CUDA 5.0之后的版本中将这些计数器/指标添加到Visual Profiler中。
问题效率提供有关设备能力的信息 发出内核的指令。报告的数据包括 执行依赖项,符合条件的warp和SM停顿原因。
对于计算能力2.x的设备,多处理器有两个warp 调度。每个warp调度程序最多可管理24个warp 每个多处理器48个warp。内核执行配置可以 减少运行时限制。有关入住率的信息,请参阅 实现了入住实验。第一个调度程序负责 使用奇数ID进行warp,第二个调度程序负责warp 带有偶数ID。
KEPLER UPDATE:对于计算能力3.x,多处理器有四个warp调度程序。每个warp调度程序最多可管理16个warp,每个多处理器总共64个warp。
在每个指令发布时,每个调度程序都会选择一个符合条件的 从其活动warp列表中扭曲并发出指令。经线是 如果已经获取了指令,则执行单元 指令要求可用,指令没有 尚未满足的依赖关系。
调度程序报告以下有关warp的统计信息 多处理器:
活动变形 - 变换从a计划开始时处于活动状态 多处理器,直到它完成最后一条指令。活跃的 每周期扭转计数器增量0-48。每个最大增量 周期由理论占用率定义。
KEPLER UPDATE范围是每周期0-64。
符合条件的Warp - 如果能够发出下一条指令,则有效的warp符合条件。 不符合条件的Warp将报告问题停止原因。这个 计数器将每周期增加0-ActiveWarps。
UPDATE在Fermi上,问题停止原因计数器仅在warp调度程序没有符合条件的warp周期更新。在Kepler上,即使warp调度程序发出指令,问题停止原因计数器也会在每个周期更新。
零符合条件的扭曲 - 如果是,此计数器会将每个循环增加1 调度程序都没有 可以发行的经线。
一个合格的变形 - 此计数器递增 如果两个调度程序中只有一个具有可以的warp,则每个循环1 发行。
KEPLER UPDATE:在Kepler上,计数器是每个调度程序,因此一个符合条件的Warp意味着warp调度程序可以发出指令。在Fermi上,两个调度程序都有一个计数器,所以在Fermi上你想要一个合格的Warp计数器尽可能小。
扭曲问题孔 - 此计数器将每个循环增加 不符合条件的活动warp的数量。这是一样的 主动变形减去合格变形。
长翘曲问题 - 这个 计数器将每个循环增加有活动扭曲的数量 没有资格发出超过32个时钟的指令 周期。长孔表示经线在长延迟时停滞不前 障碍和记忆操作等原因。
发布失速原因 - 每个循环,每个不合格的扭曲将增加一个问题失速 理由柜台。所有发行失败原因计数器的总和是相等的 破坏问题漏洞。不合格的扭曲会增加指令提取 如果还没有下一个汇编指令,则停止原因 牵强。如果输入依赖性是执行依赖停止原因 尚不可用。这可以通过增加数量来减少 独立指示。 数据请求如果请求停止原因 目前无法制作,因为所需的资源不可用, 或者是完全利用的,或者已经有太多这种类型的操作 优秀。如果数据请求构成了很大一部分 失速的原因,你还应该运行内存实验来确定 如果您可以根据请求或需要优化现有交易 重新审视你的算法。如果纹理纹理停止原因 子系统已经充分利用,目前无法接受 进一步的行动如果warp是同步停止原因 在__syncthreads()处被阻止。如果这个原因很大而且是内核 执行配置仅限于少量块 考虑将内核网格划分为更多的线程块。
Visual Profiler没有可以解决您问题的计数器。在添加计数器之前,您可以使用以下计数器:
计算能力的目标和最大IPC是:
Compute Target Max
Capability IPC IPC
2.0 1.7 2.0
2.x 2.3 4.0
3.x 4.4 7.0
目标IPC用于ALU限制计算。内存绑定内核的目标IPC将更少。对于计算能力2.1设备和更高的设备,使用IPC更难,因为每个warp调度程序都可以双重发布。