【问题标题】:configuration parameters of cuda kernelcuda内核的配置参数
【发布时间】:2014-01-02 04:43:20
【问题描述】:

我必须使用 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) 部分是对还是错。请告诉我这些并简要解释一下(如果有错误,请纠正我并解释)。

【问题讨论】:

    标签: c matrix cuda parallel-processing gpgpu


    【解决方案1】:

    (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) 情况。

    【讨论】:

      猜你喜欢
      • 2016-10-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-06
      • 2019-07-26
      相关资源
      最近更新 更多