[英]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)它說你需要每個線程產生一個矩陣行,所以你只需要N
或number 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.