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