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 カーネル ファイル間で再利用できるように、メイン ファイルのデバイス メモリ内の特定のブロックへのポインタを格納する方法です。