【发布时间】:2015-06-19 01:28:17
【问题描述】:
我正在使用集成了 gpu 和 cpu 内存的板。我还在使用外部矩阵库(Blitz++)。我希望能够从矩阵对象中获取指向我的数据的指针并将其传递给 cuda 内核。在进行了一些挖掘之后,听起来我想通过调用cudaHostGetDevicePointer 来使用某种形式的零副本。我不确定的是内存的分配。我必须使用cudaHostAlloc 创建指针吗?如果我不需要的话,我不想重写 Blitz++ 来做cudaHostAlloc。
我的代码目前有效,但每次都会复制矩阵数据。这在集成存储卡上是不需要的。
【问题讨论】:
-
你不能让 Blitz++ 在你用 cudaHostAlloc 预分配的内存上工作吗?还是 blitz 本身就负责所有的内存管理?
-
@JorenHeit 这最初可能有效,但在我们的整个代码中,我们都使用了改变大小的函数。这意味着要么重写 blitz++,要么寻找每一个会改变分配的内存地址的函数调用。听起来都不是很有趣......
-
blitz 是否接受像
std::vector这样的 STL 容器?如果是这样,您可以编写一个使用cudaHostAlloc... 的自定义分配器 -
@JorenHeit 这确实值得研究。有计划最终删除 blitz,所以我想我可以将 blitz 包装在某种适配器中,以确保正确分配(正如您的第一条评论所建议的那样。)这将使最终的重构更容易,但这也意味着我必须实现表达式模板...糟糕。
标签: c++ memory-management cuda