Variable in Schleife oder außerhalb definieren?



  • Hallo!

    for(auto it = mFoos.begin(); it != mFoos.end(); ++it) {
       Foo* f = *it;
       f->bar();
    }
    

    2 Fragen zu dem Code:

    Wäre die Schleife performanter, wenn ich die Variable f außerhalb der Schleife definiere?

    Sollte ich das mFoos.end() ebenfalls aus der Schleife ziehen? Nicht das am Ende noch in jedem Durchlauf das end() aufgerufen wird.


  • Mod

    Das läuft alles aufs gleiche raus. Das end() solltest du rausziehen, falls dein Compiler und deine Zielplattform automatische Parallelisierung erlauben.



  • PerformanceFrager schrieb:

    Wäre die Schleife performanter, wenn ich die Variable f außerhalb der Schleife definiere?

    Nein, das ist hier völlig egal.

    Und sonst ist innen meisten besser. Manchmal aber ist außen besser.



  • SeppJ schrieb:

    Das end() solltest du rausziehen, falls dein Compiler und deine Zielplattform automatische Parallelisierung erlauben.

    Öh... das weiß ich ehrlich gesagt nicht. Ich benutze VS2010 auf Win7 64 Bit. Macht der Compiler da solche krassen Sachen? 😃



  • SeppJ schrieb:

    falls dein Compiler und deine Zielplattform automatische Parallelisierung erlauben.

    Gibt es aktuelle Compiler, die das tun? Ohne #pragma omp parallel for ?

    Je nachdem, was f->bar() tut, darf die Reihenfolge der Aufrufe gar nicht verändert werden...


  • Mod

    Nexus schrieb:

    SeppJ schrieb:

    falls dein Compiler und deine Zielplattform automatische Parallelisierung erlauben.

    Gibt es aktuelle Compiler, die das tun? Ohne #pragma omp parallel for ?

    Je nachdem, was f->bar() tut, darf die Reihenfolge der Aufrufe gar nicht verändert werden...

    Der Intelcompiler macht das in der neuesten Version (12) so halbautomatisch, schlägt einem zumindest vor, welche pragmas man einfügen sollte. Und auch den Tipp mit dem end-rausziehen. Ist aber soweit ich weiß der einziger, der das macht.

    Das end im Schleifenkopf kann eventuell auch automatische Vectorisierung verhindern, da müsste ich mal genauer nachforschen ob das etwas ausmacht. Vectorisierung können viele Compiler.


Anmelden zum Antworten