统一内存的性能调优
【摘要】
原文
为了实现统一内存的良好性能,必须达到以下目标:
应该避免错误:虽然可回放的错误对于启用更简单的编程模型是基本的,但它们可能严重损害应用程序的性能。错误处理可能需要几十微秒,因为它可能涉及 TLB 失效、数据迁移和页表的更新。同时,应用程序的某些部分的执行将被停止,从而可能影响整体性能。
数据应该是访问处理器的本地数据:如...
为了实现统一内存的良好性能,必须达到以下目标:
- 应该避免错误:虽然可回放的错误对于启用更简单的编程模型是基本的,但它们可能严重损害应用程序的性能。错误处理可能需要几十微秒,因为它可能涉及 TLB 失效、数据迁移和页表的更新。同时,应用程序的某些部分的执行将被停止,从而可能影响整体性能。
- 数据应该是访问处理器的本地数据:如前所述,当数据被放置在访问处理器的本地时,内存访问延迟和带宽明显更好。因此,应该适当地迁移数据,以利用较低的延迟和较高的带宽。
- 应该防止内存抖动:如果数据经常被多个处理器访问,并且必须不断迁移才能实现数据局部性,那么迁移的开销可能会超过局部性的好处。应该尽可能地防止内存抖动。如果无法预防,则必须检测并适当地解决。
为了在不使用统一内存的情况下达到尽可能高的性能水平,应用程序必须引导统一内存驱动子系统避免上述缺陷。值得注意的是,统一内存驱动子系统可以检测常见的数据访问模式,并在没有应用程序参与的情况下自动实现其中一些目标。但是,当数据访问模式不明显时,应用程序的显式指导是至关重要的。CUDA 8.0 引入了一些有用的 API,用于向运行时提供内存使用提示(cudaMemAdvise())和显式预取(cudaMemPrefetchAsync())。这些工具支持与显式内存复制和固定 api 相同的功能,而不会回退到显式 GPU 内存分配的限制。
注意: Tegra 设备不支持 cudaMemPrefetchAsync()
文章来源: panda1234lee.blog.csdn.net,作者:panda1234lee,版权归原作者所有,如需转载,请联系作者。
原文链接:panda1234lee.blog.csdn.net/article/details/88935305
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)