首页 文章

如何在cuda中为vector-memory创建vector-type-value

提问于
浏览
6

我对制作固定内存有疑问 .

现在我正在使用CUDA处理大量数据 .

为了减少运行时间,我发现有必要使内存复制和内核启动重叠 .

在搜索了一些文本和网页,重叠内存复制和内核启动之后,我注意到有必要使用cudaMallocHost来分配主机内存,cudaMallocHost会将主机内存分配给固定内存 .
在主机上使用整数或数组类型的情况下,很容易制作固定内存 .

像这样...

cudaStream_t* streams = (cudaStream_t*)malloc(MAX_num_stream * sizeof(cudaStream_t));
for(i=0; i<MAX_num_stream; i++)
    cudaStreamCreate(&(streams[i]));

cudaMallocHost(&departure, its_size);

for(n=1; ... ; n++){
   cudaMemcpyAsync( ... streams[n]);
   kernel <<< ... , ... , ... , streams[n] >>> (...);
}

但在我的情况下,我的主机离开内存是由vertor类型设置的 .

而且我无法通过使用cudaMallocHost找到将矢量类型主机内存转换为固定内存的方法 .

帮助我或提供一些建议来解决这个问题 . 谢谢你阅读我可怜的英语 . 谢谢 .

1 回答

  • 5

    直接地,您无法使用 cudaMallocHost 为其他任何POD类型分配内存 .

    如果你真的需要一个使用固定内存的 std::vector ,你必须实现自己的 std::allocator 模型,它在内部调用 cudaMallocHost 并使用该自定义分配器实例化你的 std::vector .

    或者,thrust template library(最近发布的CUDA工具包中包含)包含一个实验固定内存分配器,您可以使用推力自己的向量类,它本身就是 std::vector 的模型 .

相关问题