理解CUDA的零拷贝内存

毕设关键一环是“零拷贝“问题,经过一些学习和论文的阅读之后,现在做出一些总结。

零拷贝内存是一种特殊形式的内存映射,它允许你将主机内存直接映射到GPU内存空间。因此,对GPU上的内存解引用,如果是基于GPU的,那么就获得全局内存的高速带宽;如果GPU代码读取一个主机映射变量,它就会提交一个PCIe读取事务,主机会通过PCIe总线返回数据。

开辟CPU内存空间

cudaHostAlloc((void**)&host_data_to_device, size_in_bytes,cudaHostAllocMapped)
//cudaHostAlloc的标志为:cudaHostAllocMapped,这种内存称为零拷贝内存,可以在CUDAC核函数中直接访问这种类型的主机内存,不需要复制到GPU。

获得GPU端指针

 cudaHostGetDevicePointer(&dev_host_data_to_device, host_data_to_device, 0);

NVIDIA公司没有公布任何零拷贝内存实现的技术细节,只是针对如何使用做了阐述,那么零拷贝内存技术适用于什么情况呢

它适用于计算密集型的程序。如果计算密度够大,足够隐藏PCIe传输延迟,那么线程束延迟隐藏模型同样可以用于PCIe传输。它将计算与数据数据传输操作重叠了,无须显示的执行流管理。
程序一定要能够高效的利用数据。如果程序中多次读取或写入相同的数据,就会创建多个PCIe传输事务。当然,如果在Fermi架构及以上的GPU中执行多次读取或多次写入,速度不会下降的很明显,因为Fermi架构引进了cache缓存技术,会从L1和L2级缓存中读取数据。

它允许GPU以高速缓存线粒度直接访问主机内存。使用零拷贝内存访问,不需要复杂的数据迁移,GPU可以从主机内存中提取小至32字节的数据。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值