初学CUDA的开发,实现了一个功能,主要是对图像进行运算,对行列值为6560*5792的一个数据进行运算,
改写后的CUDA代码如下,想请楼主帮忙看看为什么与cpu比加速比并不大?希望可以提供点帮助
主代码如下:
int blocksize = 32;
long nx_g=6560,ny_g=5792;
dim3 numthreads(blocksize,blocksize);
dim3 numblocks((nx_g+blocksize-1)/blocksize,(ny_g+blocksize-1)/blocksize);
//循环处理
while(1)
{
*cpustop = 1;
cudaMemcpy(gpustop, cpustop, sizeof(int), cudaMemcpyHostToDevice);
GPUDemDeal<<<numblocks,numthreads>>>(pGpuDemData,pGpuFillData,gpustop,gpunx,gpuny);
cudaMemcpy(cpustop, gpustop, sizeof(int), cudaMemcpyDeviceToHost);
if(*cpustop) break;
}
GPU实现代码
global void GPUDemDeal (float *pDemData,float *pFillData,int *gpuStop,long nx,long ny)
{
int j = blockIdx.yblockDim.y+threadIdx.y;
int i = blockIdx.xblockDim.x+threadIdx.x;
float mindata = 0;
float datpol[8];
long nxvalue = *nx;
long nyvalue = *ny;
if(i<nxvalue && j<nyvalue)
{
if(pFillData[j*nxvalue+i]>pDemData[j*nxvalue+i])
{
//8领域处理
datpol[0]=pFillData[(j-1)*nxvalue+i];
datpol[1]=pFillData[(j-1)*nxvalue+i-1];
datpol[2]=pFillData[j*nxvalue+i-1];
datpol[3]=pFillData[(j+1)*nxvalue+i-1];
datpol[4]=pFillData[(j+1)*nxvalue+i];
datpol[5]=pFillData[(j+1)*nxvalue+i+1];
datpol[6]=pFillData[j*nxvalue+i+1];
datpol[7]=pFillData[(j-1)*nxvalue+i+1];
for(int k=0;k<8;k++)
{
mindata=(pDemData[j*nxvalue+i]-datpol[k])/10;
if(mindata>0)
{
if(pDemData[j*nxvalue+i]>=datpol[k]+mindata)
{
pFillData[j*nxvalue+i]=pDemData[j*nxvalue+i];
*gpuStop=0; break;
}
}
mindata=(pFillData[j*nxvalue+i]-datpol[k])/1000;
if(mindata>0)
{
if(pFillData[j*nxvalue+i]>datpol[k]+mindata)
{
pFillData[j*nxvalue+i]=datpol[k]+mindata;
*gpuStop=0;
}
}
}
}
}
}