gpt4 book ai didi

cuda - 如何在cuda中将向量类型值固定到内存

转载 作者:行者123 更新时间:2023-12-02 17:31:54 24 4
gpt4 key购买 nike

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

现在我正在使用 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] >>> (...);
}

但就我而言,我的主机出发内存是由vertor类型设置的。

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

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

最佳答案

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

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

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

关于cuda - 如何在cuda中将向量类型值固定到内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12453691/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com