我试图在循环中编写内核。 每次我想改变网格大小和块大小.. 我写过这样的东西..
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
所以...任何人都可以帮助我...... ??
答案 0 :(得分:1)
您尝试重新声明的任何变量都会收到相同的错误消息。
如果您有int
变量,则不会这样做:
int a = 7;
int a = 5;
你这样做:
int a = 7;
a = 5;
您对block
和grid
执行相同操作,但每个组件最多包含三个组件:
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
是变量类型。 block
和grid
只是任意名称,您可以将它们称为任何名称,如下所示:
dim3 foo;
dim3 bar;
foo.x = 5; foo.y = 10;
bar.x = 2; bar.y = 4;
kernel<<<bar, foo>>>();