Matrixmultiplikation optimieren mittels OpenMP
-
Hallo zusammen,
gleich vorweg meine C-Kenntnisse sind bescheiden da ich mich erst seit kurzem damit befasse. Ich habe eine Matrixmultiplikation Implementiert, auf der Basis von eindimensionalen Arrays. Ich weiss nicht genau wie gut/schlecht mein Algorithmus ist (O(n^3)), ich habe jetzt versucht mittels OpenMP die äußere Schleife aufzurollen und auf 2 bzw 4 Threads zu verteilen, allerdings wird mein Algorithmus dadurch nur noch langsamer. Hat jemand ein paar Tipps für mich und kann mir sagen warum die Aufteilung auf Threads so kontraproduktiv ist?void multiplyCbyColumn(int a[], int b[], int result[], int dim){ int i,j,k; omp_set_num_threads(4); #pragma omp parallel { #pragma omp for private(j,k) for(i=0; i<dim; i++){ for(j=0; j<dim; j++){ for(k=0; k<dim; k++){ result[j+i*dim] += a[k+i*dim] * b[j+k*dim]; } } } } }
mfG