如何解释CUDA中的指令重放

如何解释CUDA中的指令重放,cuda,Cuda,有人能总结一下CUDA中不同类型指令重放的定义和原因吗 它们是: 安装回放开销: 共享重播开销: 全局重播开销: 全局缓存重放开销 本地重播开销 原子重放开销 共享加载回放 共享存储回放 全局内存发散回放 全局存储内存发散重放 这个答案适用于计算能力为2.0-3.7的费米开普勒装置 每个周期,每个SM warp调度程序选择一个warp并发出1-2条独立指令 事件inst_executed是完成的扭曲指令的计数。thread_inst_executed是完成指令的线程数 如果SM由于以下原因无法完

有人能总结一下CUDA中不同类型指令重放的定义和原因吗

它们是:

安装回放开销: 共享重播开销: 全局重播开销: 全局缓存重放开销 本地重播开销 原子重放开销 共享加载回放 共享存储回放 全局内存发散回放 全局存储内存发散重放
这个答案适用于计算能力为2.0-3.7的费米开普勒装置

每个周期,每个SM warp调度程序选择一个warp并发出1-2条独立指令

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

如果SM由于以下原因无法完成发出的指令:

指令中引用的立即常数的常数缓存未命中, 解决索引恒定负载中的发散问题, 全局/本地内存加载或存储中的地址差异, 共享内存加载或存储中的银行冲突, 解决原子或还原操作中的冲突, 加载或存储操作要求将数据写入加载存储单元,或从超过读/写总线宽度的单元读取数据,例如128位加载或存储,或 加载缓存未命中重播发生在缓存中的数据准备就绪时提取数据 然后,SM调度程序必须多次发出该指令。这称为指令重播。值inst_issued==inst_issued2*2+inst_issued1是完成的指令数+指令重放

指令重放使用一个指令发出槽,从而降低SM的计算吞吐量

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

NVPROF/CUPTI事件和指标

事件组1-通用指令发出和失效计数

inst_executed:执行的指令数,不包括回放。 inst_issued1:每个周期发出的单个指令数 inst_issued2:每个周期发出的双指令数 inst_issued0:未发出任何指令的周期数,每扭曲增量。 事件组2-上述特定类型事件的计数或重播并非所有事件都有计数

共享加载回放:当两个或多个共享内存加载请求的地址落在同一个内存库中时,或者当没有冲突但所有线程访问的总字数相同时,由于共享加载库冲突而导致的回放 执行该指令的warp中的ads超过了一个周期内可加载的字数256字节。 shared_store_replay:当两个或多个共享内存存储请求的地址落在同一内存库中时,或当没有冲突但所有共享内存存储请求访问的总字数相同时,由于共享存储库冲突而导致的重播 执行该指令的warp中的读取超过了一个周期内可存储的字数。 global_ld_mem_disference_replays:全局内存加载的指令重放次数。如果指令正在访问多个128字节的缓存线,则会重放该指令。对于每个额外的缓存线访问,计数器将递增1。 global_st_mem_Difference_Replay:全局内存存储的指令重放次数。如果指令正在访问多个128字节的缓存线,则会重放该指令。对于每个额外的缓存线访问,计数器将递增1。 公制组-效率的计算

指令重放开销:每条指令的平均重放次数 执行 本地重播开销:由于 执行的每条指令的本地内存访问 atomic_replay_开销:由于原子和 为执行的每条指令减少库冲突 全局重播开销:由于全局重播而导致的平均重播次数 执行的每条指令的内存缓存未命中 shared_replay_开销:由于共享 执行的每个指令的内存冲突 全局\u缓存\u重播\u开销:由于 执行的每条指令的全局内存缓存未命中
计算能力5.x设备Maxwell设备将回放从warp调度程序推送到各个单元。这将减少重播延迟,并释放调度程序来执行数学操作。在这些设备上,inst_发出/inst_执行=inst_回放开销的比率通常接近于0。

这个答案适用于计算能力为2.0-3.7费米开普勒设备

每个周期,每个SM warp调度程序选择一个warp并发出1-2条独立指令

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

如果SM由于以下原因无法完成发出的指令:

即时缓存持续未命中 e说明书中引用的常数, 解决索引恒定负载中的发散问题, 全局/本地内存加载或存储中的地址差异, 共享内存加载或存储中的银行冲突, 解决原子或还原操作中的冲突, 加载或存储操作要求将数据写入加载存储单元,或从超过读/写总线宽度的单元读取数据,例如128位加载或存储,或 加载缓存未命中重播发生在缓存中的数据准备就绪时提取数据 然后,SM调度程序必须多次发出该指令。这称为指令重播。值inst_issued==inst_issued2*2+inst_issued1是完成的指令数+指令重放

指令重放使用一个指令发出槽,从而降低SM的计算吞吐量

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

NVPROF/CUPTI事件和指标

事件组1-通用指令发出和失效计数

inst_executed:执行的指令数,不包括回放。 inst_issued1:每个周期发出的单个指令数 inst_issued2:每个周期发出的双指令数 inst_issued0:未发出任何指令的周期数,每扭曲增量。 事件组2-上述特定类型事件的计数或重播并非所有事件都有计数

共享加载回放:当两个或多个共享内存加载请求的地址落在同一个内存库中时,或者当没有冲突但所有线程访问的总字数相同时,由于共享加载库冲突而导致的回放 执行该指令的warp中的ads超过了一个周期内可加载的字数256字节。 shared_store_replay:当两个或多个共享内存存储请求的地址落在同一内存库中时,或当没有冲突但所有共享内存存储请求访问的总字数相同时,由于共享存储库冲突而导致的重播 执行该指令的warp中的读取超过了一个周期内可存储的字数。 global_ld_mem_disference_replays:全局内存加载的指令重放次数。如果指令正在访问多个128字节的缓存线,则会重放该指令。对于每个额外的缓存线访问,计数器将递增1。 global_st_mem_Difference_Replay:全局内存存储的指令重放次数。如果指令正在访问多个128字节的缓存线,则会重放该指令。对于每个额外的缓存线访问,计数器将递增1。 公制组-效率的计算

指令重放开销:每条指令的平均重放次数 执行 本地重播开销:由于 执行的每条指令的本地内存访问 atomic_replay_开销:由于原子和 为执行的每条指令减少库冲突 全局重播开销:由于全局重播而导致的平均重播次数 执行的每条指令的内存缓存未命中 shared_replay_开销:由于共享 执行的每个指令的内存冲突 全局\u缓存\u重播\u开销:由于 执行的每条指令的全局内存缓存未命中
计算能力5.x设备Maxwell设备将回放从warp调度程序推送到各个单元。这将减少重播延迟,并释放调度程序来执行数学操作。在这些设备上,inst_issued/inst_executed=inst_replay_开销的比率通常接近于0。

这似乎是一个提供有关CUDA探查器报告的replay事件的一些详细信息的请求。探查器基本上会报告硬件计数器的值或从中导出的比率,这些计数器可以连接到GPU硬件中的各种重放机制。我不知道NVIDIA公开了任何此类微体系结构细节。更重要的是,当前形式的问题的硬件焦点使其看起来脱离主题。这似乎是一个提供有关CUDA探查器报告的重播事件的一些详细信息的请求。探查器基本上会报告硬件计数器的值或从中导出的比率,这些计数器可以连接到GPU硬件中的各种重放机制。我不知道NVIDIA公开了任何此类微体系结构细节。更重要的是,当前形式的问题的硬件焦点使其显得离题。感谢您的解释,您能否解释加载或存储操作要求将数据写入加载存储单元或从超过读/写总线宽度的单元读取,例如128位加载或存储,更多一点?感谢您的解释,您能解释一下加载或存储操作要求将数据写入加载存储单元或从中读取吗 m超过读/写总线宽度的单元,例如128位加载或存储,多一点?