代码之家  ›  专栏  ›  技术社区  ›  harshit

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

  •  1
  • harshit  · 技术社区  · 16 年前

    我的矩阵乘法代码是

    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 回复  |  直到 16 年前
        1
  •  1
  •   Eonasdan    13 年前

    我在Linux下使用gcc4.2编译代码时遇到了同样的问题。导致故障的线路是:

    omp_set_num_threads(nthreads);
    

    pragma omp 用于:

    #pragma omp for num_threads(nthreads)
    

        2
  •  0
  •   Giuseppe Guerrini    16 年前

    我假设你的“矩阵”是指向实际矩阵行的指针数组,类似于:

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

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

    double matrix[NROWS][NCOL];
    

    你的程序不能工作。 如果矩阵id定义正确,可能导致崩溃的原因是大小不正确(“ld”)。

    当做

    推荐文章