OpenMP - Frage



  • Ich habe einen Quellcode vorliegen, den ich mittel OpenMP parallelisieren möchte.

    Der Quellcode besteht aus einer while-Schleife, in der verschiedene for-Schleifen, welche verschachtelt sein können, ausgeführt werden.

    Einige dieser for-Schleifen bieten sich zur Parallelisierung an.
    Um nicht bei jeder for-Schleife neue Threads zu erzeugen, möchte ich die
    Threads schon vor der While-Schleife kreiieren. Leider ist mein momentanes Zwischenergebnis nicht korrekt.

    Ich habe hier einen minimalen Ausschnitt aus dem Programm:

    int i,j;
    
      #pragma omp parallel private(count)
      while (count < target)
      {
        // Nicht parallelisierbare Schleife
        for (i = 1; i < s; ++i)
        {
          // parallelisierbare Schleife
          #pragma omp for
          for(l = 0; l < N; l++)
          {
            calculate something ...
          }
    ...
    

    Kann man hier schon Fehler feststellen?

    Wenn ich mich recht entsinne, wird die i-Schleife von allen Threads gleichzeitig bearbeitet. Geschieht dann aber die Abarbeitung der l-Schleife parallel mit Datenverteilung, so dass jeder Thread N/num_threads Iterationen durchführt?



  • <Palantir=on>

    shisha schrieb:

    Kann man hier schon Fehler feststellen?

    Dein "calculate Something" ist so nicht parallelisierbar
    <Palantir=off>

    Zeig doch mal mehr Code. So wird Dir hier kaum jemand helfen koennen.



  • Du parallelisierst schon die while-Schleife, was zu Fehlern führt.

    Schreib wirklich nur vor die innerste for-Schleife das pragma omp parallel for. Und wenn du die Threads vor den Schleifen schon erzeugen willst mach das hier:

    #pragma omp parallel
        ;
    
    while ()
    {
        // ...
    }
    

    Aber auch das alles wird hinfällig, wenn deine calculateSomething Funktion nicht parallelisierbar ist.


Anmelden zum Antworten