首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Cuda零拷贝性能

Cuda零拷贝性能
EN

Stack Overflow用户
提问于 2012-12-14 09:38:06
回答 1查看 1.8K关注 0票数 1

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

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

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

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

然而,正常问题大小内核运行和非常大问题大小内核运行的全局加载效率和全局存储效率是相同的。我真的不确定这个指标的组合是什么。

我不确定的主要事情是,NVVP中的哪些统计数据将帮助我了解零复制功能发生了什么。你知道我应该看哪种类型的统计数据吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-12-14 11:08:16

出于多种原因,费米和开普勒GPU需要重放内存指令:

  1. 内存操作用于大小说明符(向量类型),该内存操作需要多个事务才能执行地址差异计算并与L1缓存进行数据通信。
  2. 内存操作具有线程地址差异,需要访问多个缓存线。
  3. 内存事务未命中L1缓存。当未命中值返回给LSU时,L1通知warp调度器重放instruction.
  4. The L1单元资源已满,并且当资源可用时需要重放指令。

延迟到

零拷贝内存是200-400 cycles

  • device

  • (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 (零拷贝内存)访问的数据量。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13871449

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档