所以,我正在用 CUDA C++编写一个 PDE 求解器。求解器是一个函数,它反过来调用 cuda 内核来求解偏微分方程。现在,我想使用 PDE 参数作为内核的参数。这意味着我必须为那些变量进行malloc,例如cudaMalloc((void **)&Nt_d,size);
,然后cudaMemcpy(&Nt_d,Nt,size,cudaMemcpyHostToDevice);
(Nt 是一个整数),用于指针。我想传递整数和浮点数,即非指针变量,但找不到正确的语法。我不想将参数用作全局常量。我想将它们用作内核的参数。有什么办法吗? 非常感谢您的帮助。
直接传递它们;按值传递。
内核可能有这样的原型:
__global__ void mykernel(int *p1, float *p2, int i1, float f2);
在这种情况下,p1
和p2
是指针参数,而i1
是按值传递的int
参数,f2
是按值传递的float
参数。
这或多或少只是对 C 中的函数调用或对这些类型的参数C++的叙述。 您可以直接在内核代码中使用i1
和f2
等参数,就像使用普通的 C/C++ 函数一样。
正如您已经指出的,指针变量应该指向您已经通过例如在设备上设置的分配cudaMalloc
您可能需要研究一些 CUDA 示例代码,例如vectorAdd
.