【问题标题】:launching multiple kernels cuda启动多个内核 cuda
【发布时间】:2012-10-28 11:48:45
【问题描述】:

我想在 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

【问题讨论】:

  • 请贴出实际代码和实际错误信息。
  • 嗨!我编辑了我的帖子并提供了有用的信息。整个代码很大,也分为功能。所以我只发了一部分。我也发布了错误。如果您需要我提供更多信息,请告诉我。谢谢
  • 再次,请发布 实际 代码或其正确简化的版本,以说明问题。您发布的内容甚至无法编译,更不用说可能发生链接错误了。
  • 感谢您的回复。我将发布原始代码。我正在做一些更改,完成后我将编辑我的原始帖子并提供实际代码。但这需要一段时间。请让我知道你是否可以。再次感谢您的所有帮助。

标签: cuda


【解决方案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...);
    }
}

【讨论】:

  • 感谢您的回答。我做了类似的事情并让它发挥作用。再次感谢您的帮助。
猜你喜欢
  • 2013-01-31
  • 1970-01-01
  • 2012-08-30
  • 1970-01-01
  • 2013-07-15
  • 2012-08-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多