将变量传递到CUDA内核

时间:2018-07-10 18:28:05

标签: cuda malloc

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

1 个答案:

答案 0 :(得分:3)

您直接通过它们;按值传递。

内核可能具有如下原型:

__global__ void mykernel(int *p1, float *p2, int i1, float f2);

在这种情况下,p1p2是指针参数,而i1是按值传递的int参数,而f2是{{ 1}}参数按值传递。

这或多或少只是您在C或C ++中对这些类型的参数进行函数调用的摘要。您可以像在普通C / C ++函数中那样直接在内核代码中使用诸如floati1之类的参数。

正如您已经指出的那样,指针变量大概应该指向您已经通过以下方式在设备上设置的分配: f2

您可能想学习一些CUDA sample codes,例如cudaMalloc