Announcement

Collapse
No announcement yet.

[C++ & OpenMP] Problem bei Parallelisierung FOR Matrix-Multiplikation

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • [C++ & OpenMP] Problem bei Parallelisierung FOR Matrix-Multiplikation

    Hallo,

    ich habe mir mal OpenMP angeschaut und versucht, eine Matrix Multiplikation zu realisieren. Allerdings scheint die Parallelisierung nicht zu klappen, weil die Iterative Variante schneller ist, als OpenMP und eigentlich solle OMP ja schneller sein. Woran kann das liegen? Ich habe die FOR parallelisiert und und mit sheduled(guided) den Indexraum proportional zu der Restarbeit aufgeteilt:

    TID: 0 | Anz. der CPU = 4
    TID: 0 | Anz. Threads = 4

    Code:
    void solveOpenMP_afterFlip(int **A, int **B, int **C, int matrixSize){
        //A & B sind die Matrizen, die multipliziert werden, C das Resultat
    
        B = flipMatrix(B, matrixSize);
            
        #pragma omp parallel shared(A,B,C) num_threads(4)
        {
            #pragma omp parallel for collapse(3) schedule(guided)
            for(int i = 0; i < matrixSize; i++){
                for(int j = 0; j < matrixSize; j++){
                    for(int k = 0; k < matrixSize; k++){
                        C[i][j] = C[i][j] + A[i][k] * B[j][k];
                    }
                }
            }
        }
    }

    Und hier mal geplottet:
    03_Bild.jpg

    Warum das so klein geworden ist liegt wohl am Upload. Eigentlich sind das 1024x768. Naja, x-Achse Größe und y-Achse sind die Sekunden, die er braucht, um die Matrix zu lösen. OpenMP wäre die grüne Linie.
    Zuletzt editiert von creator90; 19.11.2012, 16:08.
    PHP Code:
    <?php
    echo 'http://acs-it-worx.de/';
    echo 
    'http://www.youtube.com/user/ACSITWorx/'// mein YouTube Kanal
    echo '-----------------------------------------------------------------';
    echo 
    'http://www.autoservice-asberg.de/';
    ?>

  • #2
    simpler Fehler:
    In der pragma Direktive ist ein parallel zuviel, also weg damit.

    #pragma omp parallel for
    PHP Code:
    <?php
    echo 'http://acs-it-worx.de/';
    echo 
    'http://www.youtube.com/user/ACSITWorx/'// mein YouTube Kanal
    echo '-----------------------------------------------------------------';
    echo 
    'http://www.autoservice-asberg.de/';
    ?>

    Comment

    Working...
    X