【发布时间】:2021-06-23 13:59:36
【问题描述】:
在我的 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中有一个命令可以将数据从可分页快速复制到固定内存!!!?
提前致谢, 莫因。
【问题讨论】:
标签: matlab memory-management cuda streaming mex