
CUDA 求最小值出错,同样方法最大值却无错...求解答
__global__voidCimaxCalc(intNf,float*input,float*CiMax,float*CiMin){unsignedints=Nf/2;...
__global__ void CimaxCalc(int Nf,float* input,float* CiMax,float* CiMin)
{
unsigned int s=Nf/2;
int tid = blockDim.x*blockIdx.x + threadIdx.x;
if(tid<Nf)
{
CiMin[tid]=input[tid];
CiMax[tid]=input[tid];
__syncthreads();
s=Nf/2;
while(s>0)
{
if(tid<s)
{
if(CiMin[tid]>CiMin[tid+s])
CiMin[tid]=CiMin[tid+s];
if(CiMax[tid]<CiMax[tid+s])
CiMax[tid]=CiMax[tid+s];
__syncthreads();
if((0.5*s-s/2)!=0&&s!=1)
{
s++;
CiMax[s-1]=CiMin[s-1]=0;
}
s>>=1;
}
else
break;
__syncthreads();
}
__syncthreads();
}
__syncthreads();
}
最后CiMax结果正确,CiMin全部是0
为什么啊... 展开
{
unsigned int s=Nf/2;
int tid = blockDim.x*blockIdx.x + threadIdx.x;
if(tid<Nf)
{
CiMin[tid]=input[tid];
CiMax[tid]=input[tid];
__syncthreads();
s=Nf/2;
while(s>0)
{
if(tid<s)
{
if(CiMin[tid]>CiMin[tid+s])
CiMin[tid]=CiMin[tid+s];
if(CiMax[tid]<CiMax[tid+s])
CiMax[tid]=CiMax[tid+s];
__syncthreads();
if((0.5*s-s/2)!=0&&s!=1)
{
s++;
CiMax[s-1]=CiMin[s-1]=0;
}
s>>=1;
}
else
break;
__syncthreads();
}
__syncthreads();
}
__syncthreads();
}
最后CiMax结果正确,CiMin全部是0
为什么啊... 展开
1个回答
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询