当我们调用核函数时,需要将参数传入核函数。若参数是在Device端申请的数组,直接像C++函数那样传入指针名就行,但是如果是在Host端动态申请的变量,不能把指针作为参数传递进去,而是应该直接将值传递到核函数。下面以一个小例子解释。
//核函数1定义
__global__ kernel1(int *h_a,int h_b,int *d_c,int *d_d)
{
........
}
//核函数2定义
__global__ kernel2(int h_a,int h_b,int *d_c,int *d_d)
{
........
}
//核函数引用
int main()
{
//参数内存空间申请
int *h_a = (int*)malloc(sizeof(int));
int h_b = 10;
int *d_c;
int *d_d;
cudaMalloc((void**)&d_c,10*sizeof(int));
cudaMalloc((void**)&d_c,sizeof(int));
kernel1<<<blcoksize,threadsize>>>(h_a,h_b,d_c,d_d);//错误,因为h_a传入核函数的是一个Host端的地址,该地址在Device端访问不到
kernel2<<<blcoksize,threadsize>>>(*h_a,h_b,d_c,d_d);//正确,*h_a传入的是一个值,而不是指针,可以直接使用
}