2010-03-26 111 views
1

我的矩阵乘法代码使用openMp进行矩阵乘法时出现分割错误?

int matMul(int ld, double** matrix) 
{ 

    //local variables initialize 

    omp_set_num_threads(nthreads); 


    \#pragma omp parallel private(tid,diag,ld) shared(i,j,k,matrix) 

    { 
    /* Obtain and print thread id */ 

    tid = omp_get_thread_num(); 

    for (k=0; k<ld; k++) { 
    if (matrix[k][k] == 0.0) { 
     error = 1; 
     return error; 
    } 
    diag = 1.0/matrix[k][k]; 
\#pragma omp for 

    for (i=k+1; i < ld; i++) { 

     matrix[i][k] = diag * matrix[i][k]; 

    } 
    for (j=k+1; j<ld; j++) { 

     for (i=k+1; i<ld; i++) { 

     matrix[i][j] = matrix[i][j] - matrix[i][k] * matrix[k][j]; 

     } 

    } 
    } 

    } 
    return error; 

} 

我认为这是因为矩阵对象的唯一,但它为什么会即使它被作为参数传递空..

+0

告诉我们segv在哪里。告诉我们你正在使用哪种编译器。 – bmargulies 2010-03-27 00:28:48

回答

0

我假设你的“矩阵“是一个指针数组实际矩阵”行,是这样的:

double *matrix[NROWS]; 
for (i = 0; i < NROWS; ++i) { 
    matrix[i] = malloc(sizeof(double)*NCOL); 
} 

但是,如果‘基质’被定义这种方式

double matrix[NROWS][NCOL]; 

你的程序无法工作。 如果您的矩阵ID正确定义,崩溃的可能原因是尺寸不正确(“ld”)。

问候

1

我遇到了同样的问题,在使用GCC编译4.2 Linux下我的代码。导致该问题的行是:

omp_set_num_threads(nthreads); 

你应该尝试通过指定它来设置线程数pragmaomp下:

#pragma omp for num_threads(nthreads) 

希望它能帮助!