对于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];
}
Run Code Online (Sandbox Code Playgroud)