我希望能够得到一些有关CUDA设备内存指针的帮助。基本上,我想将我的CUDA内核代码拆分成多个文件以提高可读性,并且因为这是一个大型程序。因此,我想做的是能够将相同的设备内存指针传递给多个CUDA内核,但不能同时进行。下面是我需要的一个简单示例:
//random.h
class random{
public:
int* dev_pointer_numbers;
};
因此,该对象只需存储指向设备内存的指针。
//random_kernel.cu
__global__ void doSomething(int *values){
//do some processing}
extern "C" init_memory(int *devPtr,int *host_memory,int arraysize)
{
cudaMalloc(&devPtr,arraysize*sizeof(int));
cudaMemcpy(devPtr,host_memory,arraysize*sizeof(int),cudaMemcpyHostToDevice);
}
extern "C" runKernel(int *devPtr){
doSomething<<<1,1>>>(devPtr);
}
以及主文件:
//main.cpp
//ignoring all the details etc
random rnd;
void CUDA(int *hostArray)
{
init_memory(rnd.dev_pointer_numbers,hostArray,10);
runKernel(rnd.dev_pointer_numbers);
}
我理解当我使用对象指针运行内核代码时,它不会映射到设备内存中,这就是为什么内核代码失败的原因。我想知道的是如何在我的主文件中将指针存储到设备内存中的特定块,以便它可以在其他CUDA内核文件中重复使用?