1

我的矩阵乘法代码是

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;

}

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

4

2 回答 2

1

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

omp_set_num_threads(nthreads);

您应该尝试通过在pragma ompfor 下指定线程数来设置:

#pragma omp for num_threads(nthreads)

希望能帮助到你!

于 2010-07-12T19:49:57.677 回答
0

我假设您的“矩阵”是指向实际矩阵行的指针数组,例如:

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

但是如果“矩阵”是这样定义的

double matrix[NROWS][NCOL];

你的程序无法运行。如果您的矩阵 id 定义正确,崩溃的可能原因是大小不正确(“ld”)。

问候

于 2010-03-27T10:13:34.067 回答