(OpenMP) Programm wird langsamer



  • Servus,

    ich moechte mein Programm gerne parallelisieren um es schneller zu machen. Das Programm ist wie folgt aufgebaut.

    std::vector myVec;
    ...
    for(int i ...){ // loop 1
    ...
    getData(i, myVec)
    ...
    xyz(myVec)
    ...
    }
    
    getData(i, myVec):
    myVec.resize()
    for(int j...) // loop 2
     {myVec.push_back(HugeArray(i,j))}
    
    xyz(myVec):
    for(int k...) // loop 3
      {Do some quick computation on the vector}
    

    Ich hoffe aus dem Pseudocode wird einigermassen ersichtlich was ich meine. Meine Frage ist, wie parallelisiere ich das am besten. Ich habe veruscht loop 3 mit #pragma omp parallel for schedule(dynamic) zu parallelisieren. Allerdings war das ganze danach langsamer als vorher. Liegt das an der Kuerze des zu parallelisierenden Bereichs?
    Muss man bei Funktionssprungen aus dem parallel for - Bereich auf etwas achten?

    Gruss Michael



  • Wieviel Daten werden denn da so bearbeitet? Und wie komplex sind die Berechnungen?
    Parallelisierung ist nicht kostenlos zu haben, sondern mit hohen Kosten verbunden. Dass ein kleines Programm dadurch langsamer wird ist also nichts ungewöhnliches, besonders, wenn nur ein sehr kleiner Teil des Codes überhaupt parallelisierbar ist.



  • Also der Teil in Loop 3 ist ziemlich kurz.
    Nur 3 Floats in Integer umwandeln ein par kurze = - / Berechnungen und das wars.

    Wenn ich #omp parallel for vor loop 1 setze ist die Parallelisierung in etwas so schnell/langsam wie nur mit einem Thread. Weiter nach oben kann ich leider nicht.

    Also ist es generell sinnvoller viel in einen Thread zu packen als zu wenige kleine Funktionen?

    Gruss Michael


Anmelden zum Antworten