我混淆了如何在数组中添加相邻的2个元素,而stride是2。
我不知道如何完成这项任务。 谁能帮我?非常感谢你。
答案 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
的每个实例更改为例如double
或int
,同样适用于float2
,它也适用于其他数据类型。
如果您需要内核代码之外的其他帮助,例如例如,在分配设备变量时,我建议研究一个CUDA示例代码,例如vectorAdd
示例代码。