这个函数最大能申请到多少内存啊?
我这里想申请大一些的内存,然后MAP到GPU空间,GPU直接访问该空间。
但是我这里试验总是申请不到大内存,为什么总是申请失败呢?
我测试过,申请不到2GB,这也太小了吧,能做什么呢?
那位大侠帮帮忙,说说到底怎么回事?
cudaHostAlloc申请的是分页锁定内存即物理内存,所以你想要多大呢?呵呵
想要大的就只能使用cudaMalloc了,分配虚拟内存
这个我知道。
cudaMalloc是在GPU上申请显存空间,这个显然是不够大的。
我是想用cudaHostAlloc申请内存,存放数据,然后用GPU进行处理计算。
这块内存大约需要几十个GB。
如果分页锁定内存只能有不到2个GB大小的话,那就会非常麻烦,我的程序就需要不断的反反复复的来回折腾这些数据。拷贝来拷贝去的,效率也很低了。
我是想用cudaHostAllocMapped方式申请内存,然后映射为GPU空间,GPU直接访问,这种方式。
内存和显存都很少的。
内存可以很大啊,现在很容易就上32GB了,我想用不了多久上百GB的内存应该会很常见了。
普通人玩cuda满足不了那么高的配置,呵呵。
你说你申请不到2GB,那你可以增加内存,可以申请的大一点。
我现在用的机器是8GB内存,内存足够多,但是cudaHostAlloc申请失败。
我用了malloc都是成功的。
有一个问题需要注意一下使用cudaHostAllocMapped来映射CPU内存让GPU处理,最好是非常非常非常小的数据,比如1MB,如果很大的话,效率会非常非常非常低,比你拷贝到GPU内存处理还要非常非常非常慢!
这个我还真不太清楚,只是看书介绍的,如果这些数据只读取一次,应该最好是映射方式效率最高。
那如果非常大非常大的数据真的就不能映射吗?你是经验呢还是如何了解得到的?
我用过这种zerocopy的方式来处理过比较大的数据,结果是非常糟糕的,速度很慢,后来了解到用zerocopy方式数据量不要太大,否则效率会很低。