启动多个内核cuda

时间:2012-11-08 09:43:13

标签: cuda

我想在cuda中启动多个内核函数,因此我声明了两个独立的网格集,块名称和每个集合的值是不同的。 e.g:

    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

1 个答案:

答案 0 :(得分: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...);
    }
}