在cuda中同时添加多个向量

问题描述 投票:-1回答:1

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

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

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

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

cuda gpu-programming
1个回答
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行,依此类推。

行维度必须是偶数,显然来自您的问题陈述(成对添加行)。

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

© www.soinside.com 2019 - 2024. All rights reserved.