谁能总结一下 CUDA 中不同类型的指令重放的定义和原因吗?
他们是:
- inst_replay_overhead:
- 共享重播开销:
- 全局重播开销:
- 全局缓存重播开销
- 本地重播开销
- 原子重播开销
- 共享加载重播
- 共享存储重播
- global_ld_mem_divergence_replays
- global_st_mem_divergence_replays
此答案适用于计算能力 2.0 - 3.7(费米 - 开普勒)设备。
每个周期,每个 SM warp 调度程序都会选择一个 warp 并发出 1-2 个独立指令。
事件安装执行是完成的扭曲指令的计数。线程安装执行是完成指令的线程数。
如果SM由于以下原因无法完成所发出的指令
- 立即常量(指令中引用的常量)上的常量高速缓存未命中,
- 索引常量负载中的地址分歧,
- 全局/本地内存加载或存储中的地址分歧,
- 共享内存加载或存储中的存储体冲突,
- 解决原子或归约操作中的冲突,
- 加载或存储操作需要将数据写入加载存储单元或从超出读/写总线宽度的单元读取(例如128位加载或存储),或者
- 加载缓存未命中(当数据在缓存中准备好时发生重放以获取数据)
那么SM调度器必须多次发出该指令。这称为指令重放。值 inst_issued ==inst_issued2 * 2 + inst_issued1是已完成的指令数 + 指令重放数。
指令重放使用指令发布槽,降低了 SM 的计算吞吐量。
The _重播_开销下面列出的指标可以帮助您确定哪些类型的操作导致重播。这
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)