我想设计一个代码,其中应该从多个 cuda 文件中的内核访问相同的设备内存。下面给出了一个简化示例,其中 main.c 调用了 3 个 .cu 文件:cuda_malloc.cu、cuda_print.cu 和 cuda_free.cu。
Main.c 文件:声明一个指针“d_array”
main()
{
int maxpar = 10;
float* d_array;
cuda_malloc(maxpar, d_array);
cuda_print(maxpar,d_array);
cuda_free(d_array);
}
cuda_malloc.cu 文件:为 d_array 分配设备内存并将值设置为零。
extern "C" void cuda_malloc(int maxpar, float* d_array)
{
CUDA_SAFE_CALL(cudaMalloc((void**)&d_array,sizeof(float)*maxpar));
CUDA_SAFE_CALL(cudaMemset(d_array,'\0',sizeof(float)*maxpar));
}
cuda_print.cu 文件:调用“kernel”从设备内存中打印“d_array”
extern "C"
{
__global__ void kernel(int maxpar, float* d_array)
{
int tid = threadIdx.x;
if (tid >= maxpar) return;
printf("tId = %d, d_array[i] = %f \n",tid,d_array[tid]);
}
void cuda_print(int maxpar, float* d_array)
{
//If I un-comment the following 2 lines, the kernel function prints array values
//otherwise, it does not
//CUDA_SAFE_CALL(cudaMalloc((void**)&d_array,sizeof(float)*maxpar));
//CUDA_SAFE_CALL(cudaMemset(d_array,'\0',sizeof(float)*maxpar));
kernel <<<1, maxpar>>> (maxpar,d_array);
cudaDeviceSynchronize();
cudaGetLastError();
}
cuda_free.cu 文件:释放设备内存
extern "C" void cuda_free(float* d_array)
{
CUDA_SAFE_CALL(cudaFree(d_array));
}
这段代码编译得很好。请注意,我试图在从“cuda_print.cu”文件调用的“内核”函数中打印“d_array”。但是,它不会打印它。也没有错误。如果在“cuda-print.cu”文件中,我再次分配设备内存并将其设置为零,然后内核打印它。
我的问题是:如何从多个 cuda 文件访问相同的设备内存?
谢谢