OpenMP Grenzen



  • Annahme ich habe eine einfache parallel-for Region:

    #pragma omp parallel for
        for(int n=0; n<size; ++n)
    

    Kann ich mit Sicherheit bestimmen, welcher Prozessor welche n bearbeitet?



  • Thread pinning kann betrieben werden. Allerdings AFAIK in erster Linie von außerhalb des Programms. Vielleicht ist die Diskussion dort ganz interessant für Dich:

    https://software.intel.com/en-us/forums/intel-c-compiler/topic/707897



  • OpenMP garantiert dir für mehrere gleiche parallele Schleifen, dass die gleichen Prozessoren die gleichen Iterationsranges bearbeiten.



  • Ich möchte eigentlich ein pThread-Programm in OpenMP konvertieren.
    Im pThread-Programm habe ich meine Grenzen selbst berechnet. Jeder Thread kennt die Grenzen start und stop. Im parallenen Bereich benötige ich noch eine Funktion, die alle Komponenten von start bis stop verwendet:

    In etwa so:

    v = f(start, stop);
    for(int i = start, i < stop; i++)
    {
      work(i,v);
    }
    

    Nun würde ich das gerne mit omp machen. Die Schleife könnte ich mit einem parallel for machen, aber wie kriege ich das mit f hin?



  • So ganz ist mir nicht klar was du mit f machen willst, das schaut nicht aus wie ein zu parallesierbarer teil.

    Du kannst angeben in welcher granularitaet die threads arbeiten (vielleicht ist es das was du eigentlich erreichen moechtest?)

    #pragma omp parallel for schedule(static,128)
    

    dadurch teils du die Arbeit in blocke von 128 auf, wodurch du implizit weisst wo start/end ist durch

    start = i&~127;
    end = start+128;
    

Anmelden zum Antworten