用到一个归约求和,参考了书上180页的reduce2的算法,但是结果与单个累加的结果相差一点点,感觉是漏掉了哪些数据没有求和进去一样!
相关代码如下:
#define DataNum 1024 //数据量
device int d_data_cost[DataNum];
……
global void ****()
{
int tid_in_grid = blockDim.x * blockIdx.x + threadIdx.x;
int tid_in_block= threadIdx.x;
int Tcost;
……
__syncthreads();
for(int s=DataNum/2;s>0;s>>=1)
{
if(tid_in_grid<s)
{
d_data_cost[tid_in_grid]+=d_data_cost[tid_in_grid+s];
}
__syncthreads();
}
//__syncthreads();
if(tid_in_block==0)Tcost=d_data_cost[0];
__syncthreads();
结果:
单个累加值:25821
归约求和值:18392
求高手指点!!!!!万分感谢!