有没有人有分析的使用零拷贝CUDA应用程序(参考这里:性能体验默认锁定的存储Vs的零拷贝内存 )内存模式?
我有一个使用与NVVP零拷贝功能,我看到下面的内核:
运行的平均大小的问题,我得到的0.7%指令重放的开销,所以没有重大的内核。 而这一切都是0.7%,是全球性的记忆重播开销。
当我真的抬高问题的大小,我得到的95.7%,这一切都是由于全球内存重播开销的指令重放的开销。
然而,全球负载效率和全局存储效率一般问题大小内核运行和非常非常大的问题大小内核运行两者是相同的。 我真的不知道做指标的这种组合是什么。
我不知道的主要事情是在NVVP统计信息将帮我看看是怎么回事与零拷贝功能。 什么类型的统计数据我应该看什么想法?
费米和开普勒的GPU需要重播出于多种原因内存的说明:
- 所述存储器操作是对一个尺寸说明符(矢量型),需要以从L1高速缓存执行所述地址发散计算和通信数据到/多个事务。
- 内存操作有需要访问多个缓存线线程地址发散。
- 存储器事务错过了L1缓存。 当未命中值被返回到L1的L1通知warp调度重播指令。
- 该LSU单元资源充分,需要重播的指令时,资源是可用的。
潜伏期
- L2是200-400个循环
- 设备存储器(DRAM)是400-800个循环
- 以上的PCIe零复制存储器是周期的1000个
重播开销由于失误的增加和争夺,由于延迟增加LSU资源增加。
全局负载效率不会提高,因为它是将需要传送该被执行以传送数据的实际量存储器中的指令数据的理想量的比例。 理想的是指所执行的线程访问存储器中的时序元件开始于高速缓存线边界(32位操作为1的高速缓存行,64位操作是2条的高速缓存线,128位的操作4个的高速缓存行)。 访问零拷贝较慢,效率不高,但它不增加或改变传输的数据的量。
Profiler的公开以下计数器:
- gld_throughput
- l1_cache_global_hit_rate
- dram_ {读,写} _throughput
- l2_l1_read_hit_rate
在零拷贝情况下,所有这些指标都应该要低得多。
该Nsight VSE CUDA探查记忆的实验将表明PCIe上访问的数据量(零拷贝内存)。