簡體   English   中英

cuda內核的配置參數

[英]configuration parameters of cuda kernel

我必須使用cuda程序添加兩個N x N平方矩陣。 本書要求為案例編寫內核的配置參數:

(a)每個線程必須只處理1矩陣元素

(b)每個線程產生一個輸出矩陣行

(c)每個線程產生一個輸出矩陣列

我對上述方案的解決方案:

(一種)

dim3 threadPerBlocks(1,1,1);
dim3 numBlocks(N,N,1);

(b)中

dim3 threadPerBlocks(N,1,1);
dim3 numBlocks(1,N,1);

(C)

dim3 threadPerBlocks(1,N,1);
dim3 numBlocks(N,1,1);

我不知道(b)和(c)部分我是對還是錯。 請告訴我這些並給出一個簡短的解釋(如果他們錯了,請糾正我並解釋)。

(a)有點好,但你可以用不同的方式編寫。所有需要的是你需要有N x N線程,所以每個處理一個元素。

(a)的替代方案是

dim3 threadPerBlocks(N,1,1);
dim3 numBlocks(N,1,1);

在內核中你處理為

id = blockIdx.x * blockDim.x + threadIdx.x ;

array[id] = ... ; // process one element.

但是對於(b)它說你需要每個線程產生一個矩陣行,所以你只需要Nnumber of columns數的線程數。 你寫的是你仍然會得到N x N線程。

所以你可以這樣寫。 其中一種可能的方式也有其他方式。

dim3 threadPerBlocks(N,1,1);
dim3 numBlocks(1,1,1);

idx = threadIdx.x ; 

然后使用for loop在每個線程中處理1行。

for (i = 0 ; i < N ; i++)
{
    index = idx * N + i ;
    array [index] = ..... ;   
}

同樣,你可以考慮(c)案例。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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