如何解释CUDA中的指令重放

时间:2016-02-22 23:47:04

标签: cuda

有没有人可以总结一下CUDA中各种指令重放的定义和原因?

他们是:

  1. inst_replay_overhead:
  2. shared_replay_overhead:
  3. global_replay_overhead:
  4. global_cache_replay_overhead
  5. local_replay_overhead
  6. atomic_replay_overhead
  7. shared_load_replay
  8. shared_store_replay
  9. global_ld_mem_divergence_replays
  10. global_st_mem_divergence_replays

1 个答案:

答案 0 :(得分:7)

这个答案适用于Compute Capability 2.0 - 3.7(Fermi - Kepler)设备。

每个循环,每个SM warp调度程序选择一个warp并发出1-2个独立指令。

事件 inst_executed 是完成的扭曲指令的计数。 thread_inst_executed 是完成指令的线程计数。

如果SM由于

而无法完成发出的指令
  1. 常量高速缓存未命中立即常量(指令中引用的常量),
  2. 在索引常量负载中解决分歧,
  3. 解决全局/本地内存加载或存储中的分歧,
  4. 共享内存加载或存储中的银行冲突,
  5. 解决原子或还原操作中的冲突,
  6. 加载或存储操作要求将数据写入加载存储单元或从超出读/写总线宽度的单元读取(例如128位加载或存储),或
  7. 加载高速缓存未命中(当数据在高速缓存中准备好时,重放发生以获取数据)
  8. 然后SM调度程序必须多次发出指令。这称为指令重放。值inst_issued == inst_issued2 * 2 + inst_issued1 是已完成的指令数+指令重放。

    指令重放使用指令发布槽来降低SM的计算吞吐量。

    下面列出的 _replay_overhead 指标可以帮助您确定导致重播的操作类型。 _replay 事件可以提供量级。

    NVPROF / CUPTI活动和指标

    EVENT GROUP 1 - 通用指令发布和退休计数

    • inst_executed:执行的指令数,不包括重放。
    • inst_issued1:每个周期发出的单指令数
    • inst_issued2:每个周期发出的双指令数
    • inst_issued0:未发出任何指令的周期数,每个warp的增量。

    EVENT GROUP 2 - 计算或重播上面列出的特定类型的事件(并非所有事件都有计数)

    • shared_load_replay:由于共享加载库冲突(当两个或多个共享内存加载请求的地址落在同一个内存库中时)或者没有冲突但由所有三个访问的单词总数而导致的重放 执行该指令的warp中的广告超过了一个周期内可加载的字数(256字节)。
    • shared_store_replay:由于共享存储库冲突导致的重放(当两个或多个共享内存存储请求的地址落在同一个内存库中时)或者没有冲突但是所有访问的字总数时 读取warp执行该指令超过了可以在一个周期内存储的单词数。
    • global_ld_mem_divergence_replays:全局内存加载的指令重放次数。如果指令正在访问多个128字节的高速缓存行,则重放指令。对于每个额外的高速缓存行访问,计数器增加1。
    • global_st_mem_divergence_replays:全局内存存储的指令重放次数。如果指令正在访问多个128字节的高速缓存行,则重放指令。对于每个额外的高速缓存行访问,计数器增加1。

    METRIC GROUP - 效率计算。

    • inst_replay_overhead:每条指令的平均重放次数 执行
    • local_replay_overhead:由于的平均重播次数 执行每条指令的本地内存访问
    • atomic_replay_overhead:原子和原子的平均重放次数 执行每条指令的减少银行冲突
    • global_replay_overhead:全局播放的平均播放次数 内存缓存未命中执行的每条指令
    • shared_replay_overhead:由于共享而产生的平均重放次数 执行每条指令的内存冲突
    • global_cache_replay_overhead:由于的平均重播次数 执行每条指令的全局内存缓存未命中

    计算能力5.x 设备(Maxwell)设备将重放从warp调度程序推送到各个单元。这减少了重放延迟并释放了调度程序以发出数学运算。在这些设备上,inst_issued / inst_executed = inst_replay_overhead的比率通常接近于0.