Zählerschleife - Eure Meinung



  • for (int n=-1,i=0; ++n<51; std::cout<"i:"<<i++%10<<"\tn:"<<n<<std::endl);



  • godlikebot schrieb:

    Ich hab die Programme mal durch nen Benchmark geschickt (500 mal / 4 Versuche pro Programm).

    Du weisst schon, dass dein 'Benchmark" _sehr_ ungenau ist?

    Ich hätte eigentlich erwartet, dass das zweite oder dritte am schnellsten ist, aber am besten gefällt mir das erste, weil es am verständlichsten ist.

    Ich erwarte, dass alle gleich schnell sind.

    EDIT: Ach ja, wenns wichtig ist:
    Compiler: MSVC++ 6 Standard (natürlich im Release mode)
    Prozessor: Athlon XP 2800+

    Du weisst schon, dass der VC++ Standard nicht optimiert, oder?
    Zumindest konnte es meiner nicht...



  • Shade of Mine schrieb:

    Du weisst schon, dass dein 'Benchmark" _sehr_ ungenau ist?

    Klar ist der "Benchmark" ungenau, aber man kann durch ihn ja zumindest eine Tendenz erkennen.

    Shade of Mine schrieb:

    Du weisst schon, dass der VC++ Standard nicht optimiert, oder?

    Ich kenn mich mit dem Thema zwar nicht wirklich gut aus, aber wo sollte der Compiler denn da optimieren? Es ist doch immer nur eine Zeile unterschiedlich in der es nicht wirklich viel Spielraum zur Optimierung gibt.



  • godlikebot schrieb:

    Shade of Mine schrieb:

    Du weisst schon, dass dein 'Benchmark" _sehr_ ungenau ist?

    Klar ist der "Benchmark" ungenau, aber man kann durch ihn ja zumindest eine Tendenz erkennen.

    *lol*
    der unterschied ist _nichts_ zumal GetTickCount() sowieso schon nur auf 54 'ticks' genau ist.

    Shade of Mine schrieb:

    Du weisst schon, dass der VC++ Standard nicht optimiert, oder?

    Ich kenn mich mit dem Thema zwar nicht wirklich gut aus, aber wo sollte der Compiler denn da optimieren? Es ist doch immer nur eine Zeile unterschiedlich in der es nicht wirklich viel Spielraum zur Optimierung gibt.

    Weisst du was ein optimizer ist?
    Weisst du was der Compiler aus einer Schleife fuer unterschiedlichen Code machen kann? Wir haben ifs, wir haben Variablen wir haben Funktion - der kann da optimieren dass einem schlecht wird.

    Ich glaube du solltest dich echt mal mit dem thema befassen 🙄



  • Ja, vielleicht sollte ich... 🤡



  • Moment. Keiner hat ein Kommentar zu dem Code auf Lager:

    ++i = i > 10 ? 1 : i
    

    Wundert mich jetzt aber schon.



  • Rapha schrieb:

    @godlikebot Hm, echt interessant, welchen Benchmark hast du verwendet?
    @SirLant Was hältst du hiervon 😉

    #include <iostream> 
    using namespace std; 
    
    int main (int argc, char *argv[]) 
    { 
          int i = 1; 
          for (int n = 0; n < 51; n++, i++) 
          { 
                if (i > 10) i = 1; 
    
                cout << "i: " << i << "\tn: " << n << endl; 
          } 
          return 0; 
    }
    

    War heute Mittag noch durch die Schule etwas müde, jetzt kommt mal mein Liebling,
    auch vollständig richtig formatiert 🙂

    #include <iostream> 
    using namespace std; 
    
    int main (int argc, char **argv) 
    { 
    
          for (int n = 0, i = 1; n < 51; n++, i++) 
          { 
                if (i > 10) 
                    i = 1; 
    
                cout << "i: " << i << "\tn: " << n << endl; 
          }
    
          return 0; 
    }
    

    So hab ichs am liebsten 🙂



  • @SirLant: Pf, ich programmiere in 1024*768 😉
    @alle: Ich werd die 3 Varianten mal mit gcc kompilieren (sobald ich meinen PC repariert habe aber das ist ot) und ausprobieren, wie stark gcc optimiert.
    @Shade Of Mine: Glaubst du, dass durch die Optimierung jede Version "gleich wird" und daher alle gleich schnell sind? Gerade bei der Betrachtung von i besteht die Modulo-Variante aus einer reinen Rechnung (während die anderen Varianten aus Vergleichen und Sprüngen besteht, oder 😕 ?)

    Grüße Rapha



  • Rapha schrieb:

    @Shade Of Mine: Glaubst du, dass durch die Optimierung jede Version "gleich wird" und daher alle gleich schnell sind? Gerade bei der Betrachtung von i besteht die Modulo-Variante aus einer reinen Rechnung (während die anderen Varianten aus Vergleichen und Sprüngen besteht, oder 😕 ?)

    Natürlich wird der Code etwas anders sein, es sei denn der compiler ist verdammt klug.

    die unterschiede sind nicht messbar - somit ist der für mich "gleich". denn ob er jetzt 10 cycles mehr braucht oder nicht, was macht das für einen unterschied?



  • Keinen. War nur theoretisch. Ich kenn mich mit der Stärke von Optimierungen von Compilern nicht so gut aus.

    Grüße Rapha



  • nur mal so...

    wenn du mehrere millionen schleifen-durchläufe hast (bei einer bildverarbeitung keine seltenheit), dann ist jede überflüssige multiplikation oder division der tot für dein programm.



  • Sunday schrieb:

    nur mal so...

    wenn du mehrere millionen schleifen-durchläufe hast (bei einer bildverarbeitung keine seltenheit), dann ist jede überflüssige multiplikation oder division der tot für dein programm.

    *lol*
    division schon, aber sicher nicht welche schleife verwendet wird.
    multiplikationen sind auch extrem billig.

    ihr geht das einfach falsch an - solche low level optimierungen sind quasi nie nötig.


Anmelden zum Antworten