我们可以在CUDA中重新初始化网格大小和块大小

时间:2014-02-24 04:23:57

标签: cuda

我试图在循环中编写内核。 每次我想改变网格大小和块大小.. 我写过这样的东西..

dim3 grid(1,1);
dim3 block(N,N);
kernel<<<grid, block>>>();
while(condition)
{
 //Here I want to change my grid and block size
  kernel<<<grid,block>>>();
}

我不能再使用grid和block来初始化N的不同值。 它显示错误:

error: "grid" has already been declared in the current scope
error: "block" has already been declared in the current scope

所以...任何人都可以帮助我...... ??

1 个答案:

答案 0 :(得分:1)

您尝试重新声明的任何变量都会收到相同的错误消息。

如果您有int变量,则不会这样做:

int a = 7;
int a = 5;

你这样做:

int a = 7;
a = 5;

您对blockgrid执行相同操作,但每个组件最多包含三个组件:

dim3 grid(1,1);
dim3 block(N,N);
kernel<<<grid, block>>>();
while(condition)
{
  grid.x = 2;  grid.y = 2;
  block.x = N/2; block.y = N/2;
  kernel<<<grid,block>>>();
}

dim3是变量类型。 blockgrid只是任意名称,您可以将它们称为任何名称,如下所示:

dim3 foo;
dim3 bar;
foo.x = 5; foo.y = 10;
bar.x = 2; bar.y = 4;
kernel<<<bar, foo>>>();