2010-03-26 94 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) 

希望它能幫助!