ero*_*gol 1 c++ struct cuda parameter-passing
我想将内核函数的参数作为给定的结构传递
struct kernel_data {
double *A;
double *B;
double *C;
const int *A_dims;
const int *B_dims;
int C_dims[2];
};
Run Code Online (Sandbox Code Playgroud)
为此,我需要使用初始化设备指针,cudaMalloc()
但如何初始化。我打算通过包含这些参数的此函数构造这样的结构。还是我必须分别通过?
只需将结构按值传递给内核,就像使用其他任何参数一样:
struct kernel_data args;
cudaMalloc(&(args.A), sizeof(double)*.....);
cudaMalloc(&(args.B), sizeof(double)*.....);
cudaMalloc(&(args.C), sizeof(double)*.....);
cudaMalloc(&(args.A_dims), sizeof(int)*.....);
cudaMalloc(&(args.B_dims), sizeof(int)*.....);
kernel<<<....>>>(args);
Run Code Online (Sandbox Code Playgroud)
对参数列表的大小有理论上的限制,从256字节到4Kb,取决于您使用的硬件,如果超出了限制,则将args
结构复制到设备分配中并作为指针传递,或复制到常量中内存指针。
要从主机初始化阵列,只需使用标准cudaMemcpy
调用:
cudaMemcpy(args.A, hostA, sizeof(double)*....., cudaMemcpyHostToDevice);
Run Code Online (Sandbox Code Playgroud)
等等