gaussian elimination in openmp. new openmp , wondering if used pragmas , barrier @ correct places. x values different each time. supposed same??
#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); (i=0; i<num; ++i) (j=0; j<num+1; ++j) fscanf(f, "%f", &mm[i][j]); fclose(f); (i=0; < 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 private (i, j) for( i=0; < 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 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; >=0; --i) { mm[i][num] = mm[i][num] / mm[i][i]; mm[i][i] = 1; #pragma omp barrier for(j= - 1; j >= 0; --j) { mm[j][num] -= mm[j][i] * mm[i][num]; mm[j][i] = 0; } #pragma omp barrier } }
with current code, have placed openmp pragam on the j , k loops. however, have private(i,j), makes variables , j private (with no initial values). should private(j,k), because j , k loop variables need private , needs shared (since loop bound j loop). openmp barriers not doing anything.
Comments
Post a Comment