[英]launching multiple kernels cuda
我想在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
您兩次定義相同的變量。 例如,您可以通過附加的塊( {
... }
對)來限制每個定義的范圍,從而消除該錯誤:
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...);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.