关于页锁定内存分配的问题

斑竹您好:

我在《高性能CUDA应用设计与开发方法与最佳实践》一书中看到这样一段话:

“在带有前端总线的系统中,如果主机内存被分配成页锁定的,主机与设备间的内存拷贝带宽将会更高”。

(1)这是不是意味着,只要是前端带有总线的系统中,用cudahostalloc比用cudaalloc效率更高?
(2)如何判断我的系统是不是有前端总线?
(3)如何选择使用cudahostalloc或者cudaalloc才能获取更高的效率?

谢谢!

LZ您好:

某资料不是NVIDIA的官方资料,在此不对其说法评价、证实或证伪。请与作者和/或译者联系,询问该句的实际内容。

您的三个问题回答如下:

1:我搜索了cuda API Reference Manual(cuda Toolkit Reference Manual),没有cudaalloc这个函数,因此您的所有比较都是无意义的。

2:有cudaHostAlloc()和cudaMalloc()(及其他多个变种)函数,但是谈不上两者效率高低,前者是申请host端内存空间的,后者是申请device端显存空间的。两者干的不是一个活。

3:如何判断您的系统是不是有前端总线,这超出了本版的讨论范围,无法回答。以及相关的诸如前端总线是什么,有前端总线是否影响内存分配速度等一概无法回答。

4:建议根据实际用途选择您所使用的函数。

大致如此,祝您周末愉快~

关于您对第二个问题的回答,您的意思是cudahostalloc其实是在host下面运行的?它分配的空间访问和device之间的数据通信依然是host-device之间的?这样感觉应该是效率更低呢!斑竹能帮我解释一下嘛,这一点我比较疑惑。在此谢过了先

LZ您好:

cudaHostAlloc()是申请host端的memory的,请不要怀疑这一点。

详情请参阅cudaToolkit Reference Manual。

如果非页锁定的话,host端会先将数据拷贝到一块临时内存然后再传输到Device端,页锁定可以省掉这个临时内存这个过程

明白了,谢谢!:slight_smile: