问题是:
共享数组perBlockMsg[i]
保存所有等于 0 的值,但它应该是大于 0 的十进制值,这些值也是如此d_msg[]
。d_msg[]
ia 一个 2D 数组,我已将其展平为 1D 并确保其数据已成功传递到设备中。
__global__ void add( int *d_msg, int *d_checkSumArray) {
int i=threadIdx.x;
int j=blockIdx.x;
extern __shared__ int perBlockMsg[];
if(d_msg[i* gridDim.x + j]<=1)
{
perBlockMsg[i]=d_msg[i* gridDim.x + j];
}
__syncthreads();
if(j==2 && i<=gridDim.x) //here i is the row number
{
d_checkSumArray[i]=perBlockMsg[i];
}
}
内核调用如下(假设)M = 7,R = 4,这两个变量也是动态的
add<<<R,(M+R), (M+R)* sizeof(int)>>>( d_msg, d_checkSumArray );
有人可以指出问题可能出在哪里吗?