如何使用CUDA实现[1] + a [2],a [3] + a [4],a [5] + a [6] ........

时间:2018-04-01 04:44:21

标签: cuda gpu

我混淆了如何在数组中添加相邻的2个元素,而stride是2。

我不知道如何完成这项任务。 谁能帮我?非常感谢你。

1 个答案:

答案 0 :(得分:1)

这样的事情应该有效:

__global__ void add_pairs(float *in, float *out, size_t npairs){

  for (size_t idx=threadIdx.x+blockDim.x*blockIdx.x; idx < npairs; idx+=blockDim.x*gridDim.x) {
    float2 temp = (reinterpret_cast<float2 *>(in))[idx];
    out[idx] = temp.x+temp.y;}
}

使用网格跨步循环,使用输入的矢量加载

npairs被假定为要生成的结果数 - 要求和的对数

假设in指针是正确的float2对齐指针

如果您将float的每个实例更改为例如doubleint,同样适用于float2,它也适用于其他数据类型。

如果您需要内核代码之外的其他帮助,例如例如,在分配设备变量时,我建议研究一个CUDA示例代码,例如vectorAdd示例代码。