本帖最后由 pinx_bu@163.com 于 2013-9-13 22:28 编辑
本人 根据SDK的矩阵乘的例子,进行修改得到简单的对两个矩阵(145*145)做加减运算的程序,wW,wH是矩阵的长和宽,但是发现输出结果不正确,不知道哪里出的问题,希望大家能帮看看。其中的kernel和host程序如下。
__global__ void nvdiCUDA(int *Arr, float *Op, int wW, int wH)
{ int x=threadIdx.x+blockIdx.x*blockDim.x;
int y=threadIdx.y+blockIdx.y*blockDim.y;
float value=0;
if(x<=wW&&y<=wH)
{ value=Arr[59*wW*wH+x*wH+Y]+Arr[27*wW*wH+x*wH+Y];
}
Op[x*wH+y]=value;
}
nvdi(int *arr, float *op, dim3 &dimsA, dim3 &dimsO)
{ int *d_arr;
float *d_op ; (接着分配空间cudamalloc,数值传递cudaMemcpy.....)
threads(blocksize,blocksize);
blocks((dimsA.x+blocksize-1)/blocksize,(dimsA.y+blocksize-1)/blocksize);
nvdiCUDA<<<blocks,threads>>>(d_arr, d_op,dimsA.x,dimsA.y);
cudaFree....
}
其中dimsA(W,H,B); dimsO(W,H,1); W为宽,H为高,B是第几个矩阵数据。blocksize等于16;就是有B个相同大小的矩阵列优先依次存在arr指向的内存空间中,矩阵元素都是非零正整数。现要对第59个矩阵和第27个矩阵进行一下简单运算。但是, 我发现输出结果不正确,查看调用运算后的op[0],op[1]始终都是0.000,同时,查看了参照修改的matrixMul例子 的结果是正确的,请问斑竹是哪的问题呢?
|