簡體   English   中英

啟動多個內核CUDA

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM