使用malloc

时间:2016-04-26 06:11:17

标签: c malloc openmp

你好我为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 我按照建议将矩阵的初始化更改为单个块

0 个答案:

没有答案