繁体   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