在cuda中同时添加多个向量

时间:2019-04-12 14:12:54

标签: cuda gpu-programming

我想设计一个内核以同时添加一个矩阵行对,但是我不知道如何实现。

例如,我有一个数据矩阵,大小为(512,1024),并且我想同时添加其行对(row1 + row2,row3 + row4,...,row511 + row512)。

我考虑这样做的原因只是为了节省时间。

能给我一些建议吗? 谢谢!

1 个答案:

答案 0 :(得分:1)

类似的事情可能有用:

const int width = 1024;
const int rows = 512;
template <typename T>
__global__ void row_add(const T * __restrict__ din, T * __restrict__ dout){
  int idx = width*2*blockIdx.x + threadIdx.x;
  if (dout == din)
    dout[idx] += dout[idx+width];
  else
    dout[idx-blockIdx.x*width] = din[idx]+din[idx+width];
}

这取决于宽度尺寸为1024或更小。您将像这样启动它:

row_add<<<rows/2, width>>>(d_in, d_out);

如果将d_ind_out的不同指针传递给它,它将假定您希望将输出连续写入一个单独的数组。如果为d_ind_out传递相同的指针,它将假定您要将行0 + 1的结果写入行0,将行2 + 3的结果写入行2,并且等等。

行维度必须为偶数,显然是从您的问题陈述中得出的(成对添加行)。

在浏览器中编码,未经测试,可能包含错误