Ошибка сегментации при умножении матриц с использованием openMp? - PullRequest
1 голос
/ 27 марта 2010

Код умножения моей матрицы

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;

}

Я предполагаю, что это только из-за матричного объекта, но почему он будет нулевым, даже если он будет передан как параметр ..

Ответы [ 2 ]

1 голос
/ 12 июля 2010

Я столкнулся с той же проблемой при компиляции своего кода под Linux с использованием GCC 4.2. Строка, которая вызывает проблему:

omp_set_num_threads(nthreads);

Вы должны попытаться установить количество потоков, указав его в pragma omp для:

#pragma omp for num_threads(nthreads)

Надеюсь, это поможет!

0 голосов
/ 27 марта 2010

Я предполагаю, что ваша "матрица" - это массив указателей на строки фактической матрицы, что-то вроде:

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

Но если "матрица" определена таким образом

double matrix[NROWS][NCOL];

ваша программа не может работать. Если идентификатор вашей матрицы определен правильно, возможной причиной сбоя может быть неправильный размер ("ld").

Привет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...