你好我为2d矩阵分配内存有问题。我做那样的事情
float *tempMatrix=(float *)malloc(size * size * sizeof (float));
使用这段代码我用i制作2个矩阵后来尝试乘以这个代码:
for (xDim=0;xDim<matrixSize;xDim++){
for(yDim=0;yDim<matrixSize;yDim++){
for (i=0;i<matrixSize;i++){
result+=matrixA[xDim*matrixSize +i]*matrixB[(i)*matrixSize+yDim];
}
resultMatrix[xDim*matrixSize+yDim]=result;
result=0;
}
}
我想在使用OpenMP的许多线程上执行此操作,但问题是当我将矩阵大小设置为大于1000时,程序挂起而根本不执行。我的猜测是因为备忘录分配存在问题,但我不是100%肯定。任何人都可以澄清这里有什么问题或如何改进代码?
提前致谢
修改#1
这是我的OpenMP指令代码:
#pragma omp parallel shared(matrixA,matrixB,resultMatrix,matrixSize) private(i,result,xDim,yDim) \
num_threads(threadNo)
{
#pragma omp single
{
printf("Number of threads %d.\n",omp_get_num_threads());
}
#pragma omp for schedule(guided,1)
for (xDim=0;xDim<matrixSize;xDim++){
for(yDim=0;yDim<matrixSize;yDim++){
for (i=0;i<matrixSize;i++){
result+=matrixA[xDim][i]*matrixB[i]yDim];
}
resultMatrix[xDim][yDim]=result;
result=0;
}
}
}
修改#2 我按照建议将矩阵的初始化更改为单个块