CUDA指针,调用内核

CUDA指针,调用内核,c,pointers,cuda,kernel,call,C,Pointers,Cuda,Kernel,Call,如果我在C函数中使用指针,比如: void processCalcNorm(float* a, float* b, float* c, float* d, float* e, float* f) { *a = *a + *b; *c = *c + *d; *e = *e + *f; } for(id = 0; id < 1000; id++) { processCalc

如果我在C函数中使用指针,比如:

void processCalcNorm(float* a, float* b, float* c, float* d, float* e, float* f)
    {
            *a = *a + *b;
            *c = *c + *d;
            *e = *e + *f;
    }

for(id = 0; id < 1000; id++)
    {
            processCalcNorm(&xcord[id],&lvelox[id],&ycord[id],&lveloy[id],&zcord[id],&lveloz[id]);
    }
void processCalcNorm(浮点*a、浮点*b、浮点*c、浮点*d、浮点*e、浮点*f)
{
*a=*a+*b;
*c=*c+*d;
*e=*e+*f;
}
对于(id=0;id<1000;id++)
{
processCalcNorm(&xcord[id]、&lvelox[id]、&ycord[id]、&lveloy[id]、&zcord[id]、&lveloz[id]);
}

执行内核时应该如何调用它?

类似的方法应该可以工作(在浏览器中编写,未经测试):

(并为其他变量创建类似的序列)


请注意,原始C代码中不再需要for循环,因为GPU通过对内核的单个调用有效地处理for循环的每次迭代。

哪个内核?您是否建议您打算创建一个相当于
processCalcNorm
的内核,或者您将从另一个内核调用一个设备版本的
processCalcNorm
,或者其他什么?是的,我正计划创建一个相当于processCalcNorm的内核!但我如何用我想要的变量来称呼它呢?我提供了一个答案,因为我觉得这样做并不困难。然而,为了将来的参考,像这样的问题(“为我写我的CUDA代码”)是不鼓励的。因此:“2.询问代码的问题必须表明对正在解决的问题的最低理解。包括尝试的解决方案、为什么它们不起作用以及预期的结果。”下次我建议你自己尝试一下,并用它描述问题。这样你会学得更好,而且可以消除关于你意图的疑问。谢谢!你是救命恩人!如果我没有定义[id],如何打印它?您可以定义一个
id
变量,然后按自己的意愿打印出来。我不清楚您的问题,因为您最初的问题没有表明您希望如何打印数据。如果您在打印时遇到困难,我建议您发布一个新的SO问题。
__global__ void processCalcNorm_kernel(float* a, float* b, float* c, float* d, float* e, float* f, int len)
    {
       int idx = threadIdx.x + blockDim.x*blockIdx.x;
       if (idx < len){
            a[idx] = a[idx] + b[idx];
            c[idx] = c[idx] + d[idx];
            e[idx] = e[idx] + f[idx];}
    }

#define DATA_LEN 1000
#define nTPB 256
...
processCalcNorm_kernel<<<(DATA_LEN+nTPB-1)/nTPB, nTPB>>>(d_xcord,d_lvelox,d_ycord,d_lveloy,d_zcord,d_lveloz,DATA_LEN);
float *d_xcord;
cudaMalloc((void **)&d_xcord, DATA_LEN*sizeof(float));
cudaMemcpy(d_xcord, xcord, DATA_LEN*sizeof(float), cudaMemcpyHostToDevice);