2012-11-08 177 views
0

我想在cuda中啓動多個內核函數,所以我聲明瞭兩個單獨的網格集合,塊名稱和每個集合的值是不同的。 e.g:啓動多個內核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是未知的,塊和電網的其他聲明類似。那我怎麼能用這些不同的網格和塊名來啓動這兩個內核?我需要在這裏提到網格中的塊數和塊中的線程數取決於用戶的輸入。感謝您的幫助。

其實主要的代碼是非常大的,我也改變飄飛擺脫errors.I的我張貼它的一部分只有當我認爲問題在於:

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

+1

請後的實際代碼和實際錯誤消息。 –

+0

嗨!我編輯了我的帖子,並提供了有用的信息。整個代碼很大,也分爲功能。所以我只發佈了一部分。我也發佈了錯誤。請告訴我,如果您需要我更多的信息。感謝 – duttasankha

+4

再次,請張貼*實際*代碼或正確減少它的版本,它說明了問題。你發佈的內容甚至不會編譯,更不用說到鏈接錯誤可能發生的地步。 – talonmies

回答

3

您正在定義兩次相同的變量。你可以例如消除錯誤簡單地通過附加塊({ ...}雙)限制每個定義的範圍:

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...); 
    } 
} 
+0

感謝您的回答。我做了這樣的事情,並做到了這一點。再次感謝你的幫助。 – duttasankha