我为每个块选择了64个或更多的线程数(128个块),用于将两个大小为8192的矩阵乘以8192。我得到的只是我矩阵中的0。
你能告诉我它的原因吗?
__global__ void MatrixMulKernel (double* M, double* Q, double* P, int Width) {
int Row = blockIdx.y*blockDim.y+threadIdx.y;
// Calculate the column index of P and N
int Col = blockIdx.x*blockDim.x+threadIdx.x;
if ((Row < Width) && (Col < Width)) {
double Pvalue =0;
for (int k =0; k < Width; ++k) {
Pvalue += M[Row*Width+k]*Q[k*Width+Col];
}
P[Row*Width+Col] = Pvalue;
}
}
问题得到解决。我超过了tesla40c每个线程的块数,即1024.因此问题。通过在x和64 in y中启动64,超出其限制。