Cuda零拷贝性能

时间:2012-12-14 01:38:06

标签: c++ cuda zero-copy nvvp

有没有人有使用零拷贝(参考此处:Default Pinned Memory Vs Zero-Copy Memory)内存模型分析CUDA应用程序性能的经验?

我有一个使用零拷贝功能的内核和NVVP我看到以下内容:

以平均问题大小运行内核我的指令重放开销为0.7%,所以没什么大不了的。所有这0.7%都是全局内存重放开销。

当我真正提升问题大小时,我得到95.7%的指令重放开销,所有这都是由于全局内存重放开销。

但是,正常问题规模内核运行和非常大的问题大小内核运行的全局负载效率和全局存储效率是相同的。我不确定如何将这些指标组合起来。

我不确定的主要问题是NVVP中的哪些统计信息可以帮助我了解零复制功能的用途。我应该关注哪种统计数据的想法?

1 个答案:

答案 0 :(得分:5)

Fermi和Kepler GPU需要重播内存指令有多种原因:

  1. 内存操作是针对大小说明符(向量类型),需要多个事务才能执行地址差异计算并与L1缓存进行数据通信。
  2. 内存操作有线程地址分歧,需要访问多个缓存行。
  3. 内存事务错过了L1缓存。当未命中值返回到L1时,L1通知warp调度程序重放指令。
  4. LSU单元资源已满,当资源可用时需要重播指令。
  5. 延迟

    • L2为200-400个循环
    • 设备内存(dram)为400-800个周期
    • PCIe上的零拷贝内存是1000秒的周期

    由于延迟增加导致LSU资源的未命中和争用增加,重播开销增加。

    全局负载效率不会增加,因为它是需要为执行的内存指令传输的理想数据量与实际传输的数据量之比。理想意味着执行的线程从高速缓存行边界开始访问存储器中的顺序元素(32位操作是1个高速缓存行,64位操作是2个高速缓存行,128位操作是4个高速缓存行)。访问零拷贝速度较慢且效率较低,但不会增加或更改传输的数据量。

    分析器公开以下计数器:

    • gld_throughput
    • l1_cache_global_hit_rate
    • dram_ {read,write} _throughput
    • l2_l1_read_hit_rate

    在零拷贝情况下,所有这些指标都应该低得多。

    Nsight VSE CUDA Profiler内存实验将显示通过PCIe(零拷贝内存)访问的数据量。