GPU の従来のリダクション アルゴリズムでは、ベクトルのサイズが 2 の累乗であれば完全に機能します。そうでない場合はどうなるでしょうか。ある時点で、要素の奇数の合計を見つける必要があります。それに対処する最善の方法は何ですか?
質問する
3175 次
2 に答える
6
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];
}
于 2013-03-01T16:21:05.573 に答える
0
設定
int i = 1024;
それ以外の
int i=ceil(blockDim.x/2);
つまり、int i は整数^2 > N でなければなりません。
于 2019-02-16T07:56:36.140 に答える