0

我想在 cuda 中启动多个内核函数,所以我声明了两组单独的网格、块名称和每组的值是不同的。例如:

    dim3 gridDim_1(val_1,1);
    dim3 blockDim_1(val_2,val_3);

    dim3 gridDim_2(val_4,1);
    dim3 blockDim_2(val_5,val_6);

    for(i=0;i<somenum;i++)
   {
     kernel_1<<<gridDim_1,blockDim_1>>>(agr1,arg2);
     kernel_2<<<gridDim_2,blockDim_2>>>(agr3,arg4);
   }

但是编译器抛出错误说错误:gridDim_1 是未知的,并且对于块和网格的其他声明类似。那么我如何启动这两个具有不同名称的网格和块的内核呢?我需要在这里提到网格中的块数和块中的线程数以某种方式取决于用户输入。感谢您的帮助。

实际上主要代码真的很大,我也时不时地改变以消除错误。我只在我认为问题所在的地方发布其中的一部分:

int k,sim_step;
int counter_top,counter_bottom;
............
...................

for(k=0;k<=sim_step;k++)
{  

    dim3 gridDim(1,1);
    dim3 blockDim(counter_top,1,1); 

    agent_movement_top<<<gridDim,blockDim>>>(args..)  ;

    dim3 gridDim(1,1);
    dim3 blockDim(counter_bottom,1,1);  

    agent_movement_bot<<<gridDim,blockDim>>>(args...);

} 

我得到的当前错误是:错误 LNK2001:未解析的外部符号 _gridDim 错误 LNK2001:未解析的外部符号 _blockDim

4

1 回答 1

3

您定义了两次相同的变量。例如,您可以通过附加块({...}对)限制每个定义的范围来消除该错误:

int k,sim_step;
int counter_top,counter_bottom;
............
...................

for(k=0;k<=sim_step;k++)
{  
    {
        dim3 gridDim(1,1);
        dim3 blockDim(counter_top,1,1); 

        agent_movement_top<<<gridDim,blockDim>>>(args..)  ;
    }
    {
        dim3 gridDim(1,1);
        dim3 blockDim(counter_bottom,1,1);  

        agent_movement_bot<<<gridDim,blockDim>>>(args...);
    }
}
于 2012-11-08T22:11:09.630 回答