cuda - 当大小不是 2 的幂时向量和的减少?

标签 cuda

对于 GPU 上的经典归约算法,如果向量的大小是 2 的幂,它就可以完美运行。如果不是这种情况怎么办?在某些时候,我们将不得不找到奇数个元素的总和。处理这种情况的最佳方法是什么?

最佳答案

您可以计算大小不为 2 的幂的矩阵的总和。看例子:

#include <math.h>
#define N 1022 //total size
__global__ void sum(int *A, int *C)
{
        __shared__ int temp[blockDim.x];
        int idx = threadIdx.x+blockDim.x*blockIdx.x;
        int local_idx = threadIdx.x;
        temp[local_idx] = A[idx];
        int i=ceil(blockDim.x/2);
        __syncthreads();
        while(i!=0)
        {
                 if(idx+i<N && local_idx<i)
                          temp[local_idx] += tmp[local_idx+i];
                 i/=2;
                 __syncthreads();

        }
       if(local_idx == 0)
           C[blockIdx.x] = temp[0]; 
}

关于cuda - 当大小不是 2 的幂时向量和的减少?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15161575/

相关文章:

linux - 了解 cuobjdump 输出

c - 如何在 Cuda 中的简单 if 语句中避免分歧分支

cuda - 通过 CUDA Thrust 逐步减少

cuda - 在 GPU 上查找 FFT 的最快库是什么?

c++ - CUDA:填充列主矩阵

c++ - 使用 Thrust 生成均匀分布的随机数

python - 多数组计算中cupy执行错误

CUDA + 使用 C 计算 int 元素出现次数

c++ - CUDA 示例由于多个重新定义错误而未编译

c++ - 关于CUDA中的固定内存,它有上限吗?