谈谈显存的使用分析(一)

在基本完成了对nvcc的使用分析解决了实验室的CUDA环境统一问题后,我转向解决存储器传输问题。看起来这个部分没有设计算法那样光纤,但作为实验室GPU组的组长脏活累活得自己干,抱怨一下下!其实也不算是,看起来参考指南上已经说的很清楚了,我主要就是去了解实现细节和测试性能,但是尽信书不如无书,而且没有自己的性能分析数据,就无法确切的知道,这个CUDA程序的“沉没成本”到底有多大!
其实了解CUDA程序设计的,都知道CUDA程序与传统C语言程序在运行时一个较大的区别就是多了一个数据在主机和设备间传输交换的环节,因此我们在设计CUDA并行程序时除了要设计合理的高性能并行算法外,有效利用存储器带宽也是一个重要的性能优化手段!
一、本专题内容简介
CUDA的存储器主要分为片外和片内两大类,片内存储器的带宽优化对程序员来讲主要是考虑如何有效使用share memory,这个内容将在share memory研究专题中给出技术分析;而片外存储器主要有global memory,local memory,constant memory以及texture memory!其中local memory是非常低带宽的存储器,虽然它是编译器分配的,但在设计kernel时可利用一些技巧尽可能的避免使用它,constant memory和texture memory的性能特性分析也将包含在其它技术专题中,本文只会用texture memory和global memory进行一些对比,而不会对其进行深入探讨。
在我们实验室的系统开发中重点考虑的数据传输是host to device的传输时间,那么首先看下两端各有些什么。在device端主要有线性存储器和专为纹理的CUDA array,在host端主要有分页内存和页锁定内存,在CUDA2.2以上页锁定内存还新增3种具有特殊功能的存储器使用方式:用于主机多线程的portable,用于CPU写的write-combined以及零拷贝的mapping,但我们实验室目前的设备不支持mapping所以不会做探讨,另外一个用途就是支持异步传输掩盖延迟。
本专题的内容包括对线性存储器的使用说明和带宽分析,以2D global memory为例的原因在于对齐后的线性存储空间非常易于实现合并访问,这对访存有数量级的提升。显存分配和传输时间的分析包括了主机端分页内存到1D,2D线性存储器和CUDA array以及页锁定到2D线性存储器等类型。在此基础上对比分析了texture memory和global memory的访存性能。最后是研究以异步的方式实现数据传输的延时掩盖。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值