找回密码
 立即注册
zhuzhenwu 该用户已被删除
发表于 2013-7-17 17:37:39
11172
版主您好        我编写的的程序,修改了很多次,也得不到最后的结果,如果处理一个小常数矩阵,得到其元素最大值能得到正确结果,因为这样只需一个grid就一个block,这样简单。可是如果是对一幅图像,由于数据量很大,必须一个grid有多个block,求出每一个block的最大值,这样编程时我就糊涂了,最糊涂的就是那个mid和那个tid的M_max[mid]=M_src[tid];这么编对不对,楼主帮我指点一下,程序如下
__global__ void MaxMinKernel(float *M_src,int width,int height,float*N_max,float*N_min)
{
        int x=threadIdx.x+blockIdx.x*blockDim.x;
        int y=threadIdx.y+blockIdx.y*blockDim.y;
       
        int tid= y*width+x;

        int mid=threadIdx.x+threadIdx.y*blockDim.x;

    __shared__ float *M_max;
    __shared__ float *M_min;

        memset(M_max,0,blockDim.x*blockDim.y);
        memset(M_min,0,blockDim.x*blockDim.y);

        if(x<width&&y<height)
        {
                ////////////////////////////////求最大最小值//////////////////////////////////
           M_max[mid]=M_src[tid];
           __syncthreads();

           int i=(blockDim.x*blockDim.y)/2;
           while(i !=0)
          {
              if(mid<i)
              {
                     M_max[mid]=M_max[mid]>M_max[mid+i]?M_max[mid]:M_max[mid+i];
                     M_min[mid]=M_max[mid]<M_max[mid+i]?M_max[mid]:M_max[mid+i];
                     __syncthreads();
                     i/=2;
              }
          }
          if(mid=0)
           {
               N_max[blockIdx.x+gridDim.x*blockIdx.y]=M_max[mid];
               N_min[blockIdx.x+gridDim.x*blockIdx.y]=M_min[mid];
           }
        }
}



使用道具 举报 回复
发表于 2013-7-17 18:23:37
LZ您好:

您在1#要求楼主指点,请您火速寻找楼主。


以及您在之前的帖子里面无视我的回复,所以我也将无视您的帖子,尊重是相互的。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
使用道具 举报 回复 支持 反对
发表于 2013-7-17 18:29:55
因为此帖ICE曾经单独在另外的主题下回复过,但是楼主无视了,所以再次发帖将被移动到灌水专区。
使用道具 举报 回复 支持 反对
发新帖
您需要登录后才可以回帖 登录 | 立即注册

zzczczxczxczx