Гауссово исключение в OpenMP - PullRequest
3 голосов
/ 29 апреля 2011

Устранение по Гауссу в OpenMP.Я новичок в openmp и мне интересно, использовал ли я свои прагмы и барьер в правильных местахмои значения х разные каждый раз.Они должны быть одинаковыми ??

#include <stdio.h>

int num;
double mm[6][7];

void gaussElimination();

int main() {
    int i, j;

    int k, s;

  FILE *f = fopen("matrix.in", "r");
    fscanf(f, "%d", &num);
    for (i=0; i<num; ++i)
            for (j=0; j<num+1; ++j)
                    fscanf(f, "%f", &mm[i][j]);
    fclose(f);


    for (i=0; i < num; i++)
            for(j=0; j <num; j++);

    gaussElimination();

    for(k=0; k < num; ++k) {
            for(s = 0; s < num+1; ++s)
                    printf("%3.2f\t", mm[k][s]);
            printf("\n");
 }
                  return 0;
  }
  void gaussElimination() {
         int i, j, k, max;
    double R;
   //      #pragma omp parallel for private (i, j)
    for( i=0; i < num; ++i) {
            max = i;
            for(j= i+1; j < num; ++j)
                    if(mm[j][i] > mm[max][i])
                            max =j;

            for(j=0; j < num+1; ++j) {
                    R = mm[max][j];
                    mm[max][j] = mm[i][j];
                    mm[i][j] = R;
            }

    #pragma omp parallel for private ( i, j)
            for(j=num; j>= i; --j)
                    for(k=i+1; k <num; ++k)
                            mm[k][j] -= mm[k][i]/mm[i][i] * mm[i][j];
           }
            #pragma omp barrier

            for(i = num-1; i >=0; --i) {
            mm[i][num]  = mm[i][num] / mm[i][i];
            mm[i][i] = 1;
            #pragma omp barrier
            for(j= i - 1; j >= 0; --j) {
                    mm[j][num] -= mm[j][i] * mm[i][num];
                    mm[j][i] = 0;
                    }

            #pragma omp barrier

     }
}

1 Ответ

1 голос
/ 29 апреля 2011

Используя текущий код, вы поместили прагаму OpenMP в циклы j и k. Тем не менее, у вас есть private (i, j), который делает переменные i и j приватными (без начальных значений). Это должно быть закрыто (j, k), потому что переменные цикла j и k должны быть приватными, а я должен быть общим (так как это цикл, связанный с циклом j). Барьеры OpenMP ничего не делают.

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