gpt4 book ai didi

matlab - 如何以异步方式有效地将变量从 Matlab 传递到 GPU?

转载 作者:行者123 更新时间:2023-12-05 04:51:39 29 4
gpt4 key购买 nike

在我的 CUDA 项目中,我可以定义固定内存,将数据从 .txt 文件复制到固定内存,并在内核中进行处理时使用流将数据复制到 GPU。现在,我想制作一个 CUDA MEX 文件并在 Matlab 中将我的数据(称为 RfData)变量传递给它。但是,我注意到没有办法直接将 MATLAB 数组分配为固定 CUDA 内存。所以,我必须按如下方式使用可分页内存:

int* RfData;
RfData = (int *)mxGetPr(prhs[0]);
int* Device_RfData;
int ArrayByteSize_RfData = sizeof(int) * (96* 96* 2048);
cudaMalloc((int**)&Device_RfData, ArrayByteSize_RfData);
cudaMemcpy(Device_RfData, RfData, ArrayByteSize_RfData, cudaMemcpyHostToDevice);

这对我来说很重要,可以通过流复制 RfData 异步。我能想到的唯一方法是先将我的 RfData 复制到固定内存,然后使用流式传输:

 int* RfData_Pinned;
cudaHostAlloc((void**)&RfData_Pinned, ArrayByteSize_RfData, cudaHostAllocWriteCombined);
for (int j = 0; j < (96* 96* 2048); j++)
{
RfData_Pinned[j] = RfData[j];
}

但是,它增加了我的 MEX 函数的整体处理时间。

那么,现在的问题是:如何以异步方式将我的数据从 matlab 传输到 GPU?也许 CUDA 中有一个命令允许将数据从可分页内存快速复制到固定内存!!!?

提前致谢,萌因。

最佳答案

您确实可以使用 cudaHostAlloc 分配固定内存,但如果您已经分配了内存,您可以改为使用 cudaHostRegister 固定它,它需要一个已经分配的主机数组指针(在您的案例中取自 mxGetPr)。

请注意,这将需要时间来固定内存,但可能少于执行 cudaHostAlloc 然后复制它。

关于matlab - 如何以异步方式有效地将变量从 Matlab 传递到 GPU?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66822033/

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