cuda で複数のカーネル関数を起動したいので、2 つの別々のグリッド セット、ブロック名、および各セットの値が異なることを宣言しています。例えば:
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);
}
しかし、コンパイラは error: gridDim_1 is unknown であり、他のブロックとグリッドの宣言と同様のエラーをスローしています。では、グリッドとブロックの名前が異なるこれら 2 つのカーネルを起動するにはどうすればよいでしょうか? ここで、グリッド内のブロック数とブロック内のスレッド数は、ユーザー入力に何らかの形で依存することに言及する必要があります。助けてくれてありがとう。
実際、メインコードは非常に大きく、エラーを取り除くために時々変更しています.問題があると思われる場所にのみその一部を投稿しています:
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