cudaHostAlloc替换new导致结果的不同

本人在做关于图像特征提取的项目。基本完工,但是发现一个问题,开始以为是bug,后来觉得是不是cudaHostAlloc(cudaHostAllocPortable)分配的数据(二维float)拷贝到device,再放到texture里浮点的表示方法会改变,导致浮点结果有误差?
具体如下。
//Host端建立一个二维float数组,作为源,数组长宽为width,height(我分别尝试了2种方式,发现结果最后浮点相差大约5%)

  1. cudaHostAlloc((void **)&img, widthheightsizeof(float),cudaHostAllocPortable);
  2. img=new float[widthheight];
    //对img赋值

    //在device建立一块空间用于存放这个数据
    float Src;
    int pitch;
    cudaMallocPitch((void
    *)(&Src), &pitch, width
    sizeof(float), (size_t)height));
    //将源数据拷贝到device
    cudaMemcpy2D(Src,pitch,data,widthsizeof(float),widthsizeof(float), (size_t)height,cudaMemcpyHostToDevice));
    //将Src绑定到纹理
    texture<float, 2, cudaReadModeElementType> TexInt;
    cudaBindTexture2D(0, &TexInt, Src, &channelDesc, width, height , pitch));
    //接着我的程序大量访问纹理做计算(有局部性)

    a =tex2D(TexInt , x1, y1)+tex2D(TexInt , x2, y2)+…
    //最后发现程序只改变1和2,其他都没有改变的情况下,最后的结果有所差异。例如后者找到了599个特征点,前者指找到585个。但除了少掉的几个其他特征点的值都正确。
    我怀疑是不是cudaHostAlloc分配的空间对浮点数产生了影响?有没有人也碰到过类似的情况和经验。
    谢谢