斑竹您好:
我在《高性能CUDA应用设计与开发方法与最佳实践》一书中看到这样一段话:
“在带有前端总线的系统中,如果主机内存被分配成页锁定的,主机与设备间的内存拷贝带宽将会更高”。
(1)这是不是意味着,只要是前端带有总线的系统中,用cudahostalloc比用cudaalloc效率更高?
(2)如何判断我的系统是不是有前端总线?
(3)如何选择使用cudahostalloc或者cudaalloc才能获取更高的效率?
谢谢!
斑竹您好:
我在《高性能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端,页锁定可以省掉这个临时内存这个过程
明白了,谢谢!