6

我对制作固定记忆有疑问。

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

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

在搜索了一些文本和网页,重叠内存复制和内核启动后,我注意到有必要使用 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] >>> (...);
}

但在我的情况下,我的主机离开内存是由变频器类型设置的。

而且我在任何地方都找不到通过使用 cudaMallocHost 将向量类型主机内存转换为固定内存的方法。

帮助我或提供一些建议来解决这个问题。感谢您阅读我蹩脚的英语。谢谢。

4

1 回答 1

6

直接而言,您不能使用cudaMallocHost.

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

或者,推力模板库(在最新版本的 CUDA 工具包中提供)包括一个实验性固定内存分配器,您可以将其与推力自己的向量类一起使用,它本身就是std::vector.

于 2012-09-17T08:01:18.130 回答