将变量传递给 CUDA 内核

Gal*_*ean 1 malloc cuda

所以,我正在用CUDA C++编写一个 PDE 求解器。求解器是一个函数,它依次调用 cuda 内核来求解 PDE。现在,我想使用 PDE 参数作为内核的参数。这意味着我必须为那些用于指针的变量进行 malloc cudaMalloc((void **)&Nt_d,size);,然后cudaMemcpy(&Nt_d,Nt,size,cudaMemcpyHostToDevice);(Nt 是整数)。我想传递整数和浮点数,即非指针变量,但找不到正确的语法。我不想将参数用作全局常量。我想使用它们作为内核的参数。有什么办法可以做到吗?非常感谢您的帮助。

Rob*_*lla 5

你直接通过他们;按值传递。

内核可能有这样的原型:

__global__ void mykernel(int *p1, float *p2, int i1, float f2);
Run Code Online (Sandbox Code Playgroud)

在这种情况下,p1p2是指针参数,而i1int按值传递的参数,f2float按值传递的参数。

这或多或少只是对 C 或 C++ 中针对这些类型参数的函数调用所做的操作的叙述。您可以直接在内核代码中使用这些参数,就像使用i1f2一样,就像使用普通的 C/C++ 函数一样。

正如您已经指出的,指针变量应该指向您已经通过例如在设备上设置的分配cudaMalloc

您可能想研究一些 CUDA示例代码,例如vectorAdd.