Zwei Codes, einer ist schneller, wieso?



  • @DocShoe Ich hätte aber schon gerne Code der zuverlässig ist und selbst wenn ich die kürzeste Runtime nehme war nach 10 test von jedem Code immer noch Code 1 schneller, hatte jetzt nochmal getestet mit den gleichen Ergebnissen

    Schnellste Runtime
    Code 1: 0.14 sec
    Code 2: 0.18 sec



  • @Th69 Das ist super cool danke, wusste garnicht das man auch ohne {} unter eine For function schreiben kann. Wäre ich im Leben nicht drauf gekommen XD. Und ja die "..." werden unterschiedliche Texte sein.



  • @FP-C-Neuling sagte in Zwei Codes, einer ist schneller, wieso?:

    DevC++;

    Ok, DevC++ ist eine Entwicklungsumgebung (IDE), die offenbar MinGW als Compiler verwendet. Da ich DevC++ nicht da habe und noch nie gesehen habe, kann ich dir nicht sagen, wo du Compiler Einstellungen vornimmst.
    Google behauptet, es gibt sowas wie Project Settings -> Compiler mit einem "Parameters" Tab. Du willst wahrscheinlich mit -O2 oder -O3 optimieren.

    Mit Hardware ging es mir um Prozessor und Taktung, aber ich glaube das ist erstmal Zweitrangig. 10 Zeilen Ausgeben und Farbe von der Konsole ändern sollte so schnell gehen, dass du davon nix merkst.



  • Bei nur einer Anweisung (unterhalb einer Schleife) kann man die Blockklammern { und } weglassen, aber das ist ja nicht das entscheidende hier (du kannst sie auch wieder hinschreiben), sondern die Mathematik bezüglich der beiden zusätzlichen Schleifen.
    Du hast quasi selber ein "Loop-Unroll" durchgeführt (also was der Compiler selber vornimmt, wenn eine Schleife optimiert werden kann).



  • @Schlangenmensch Nun ja, DevC++ ist gratis, aber brauchst es ja nicht downloaden. Leider finde ich diesen Parameter-Tab nicht : /, hätte sonst gerne an der Stelle was gesagt



  • @FP-C-Neuling sagte in Zwei Codes, einer ist schneller, wieso?:

    Das ist super cool danke, wusste garnicht das man auch ohne {} unter eine For function schreiben kann.

    Nach einem for (oder auch ìf, else, while, ... weiter nicht aufgeführte Kontrollstrukturen) kannst du eine Anweisung schreiben.
    Du kannst jedoch mehrere Anweisung mittels {} zu einem Block zusammenfassen. Der geht als eine Anweisung durch.



  • @FP-C-Neuling sagte in Zwei Codes, einer ist schneller, wieso?:

    @Schlangenmensch
    Ok das ist doch schonmal hilfreich.

    DevC++;

    Ganz wichtig ist dabei auch die benutzte Version. Vom Compiler und der IDE.



  • @Th69 Hmmmm...ok. Übrigens alles war im Relesebuild 64Bit getestet wenn es um die Zeiten ging, nie ein Debug build



  • @DirkB Alles klar ^^



  • Nächste Frage: was hast du also gemessen? Wie lange die switches dauern? Oder eher: wie lange die couts brauchen? Oder ist es, wie lange das Programm braucht, bis es geladen ist? Wenn du die gesamte Laufzeit misst, misst du alles zusammen und kannst daraus nicht auf einzelne Programmabschnitte schließen. Gerade bei solchen Mini-Differenzen. Warum willst du hier überhaupt Geschwindigkeit messen? Wäre es nicht besser, erst einmal C++ richtig zu lernen?



  • @wob Ich habe getestet bis dieses Programm gelandet ist ja, ich habe es aus dem Hauptprogramm entnommen um damit zu testen. Es ging mir darum welcher von Beiden schneller ist und warum Code 1 schneller als Code 2 ist obwohl Code 1 mehr Switchfunktionen bei gleicher Ausgabemenge und Art hat. (10 couts und 2SetColorTextAttribute) und sie sich nur in der If-Switch Logik unterscheiden



  • @FP-C-Neuling
    Welchen Code misst du, den "vereinfachten" den du hier gepostet hast oder den "echten"?
    Weil: die beiden "vereinfachten" Varianten geben schonmal nicht das selbe aus. Die erste Variante gibt viel öfter "... end" aus als die zweite.
    Es wird also mehr in die Konsole geschrieben. Daher müsste mMn. eher die erste Variante langsamer sein.

    Ich vermute aber mal dass du den "echten" Code misst, und dass im "echten" Code andere Unterschiede existieren, die dann dazu führen dass dort die erste Variante schneller ist.



  • @hustbaer hast du recht, weiß nicht warum da der Fehler unterlaufen ist, in meiner Konsole stand das gleiche bei beiden Programmen, keine Ahnung ob ichs beim Schreiben des Posts noch nicht hatte und dabei den Code geändert hatte, XD. Aber ich habs jetzt im OP überarbeitet



  • @FP-C-Neuling sagte in Zwei Codes, einer ist schneller, wieso?:

    @hustbaer hast du recht, weiß nicht warum da der Fehler unterlaufen ist, in meiner Konsole stand das gleiche bei beiden Programmen, keine Ahnung ob ichs beim Schreiben des Posts noch nicht hatte und dabei den Code geändert hatte, XD.

    Deswegen solltest du immer Code posten indem du ihn 1:1 aus deiner IDE rauskopierst. Dabei fallen dann auch so abscheulichkeiten wie das "case 1 ... 9" weg. Weil das nicht compiliert. Und das Problem dass deine SetColor Returntyp int hat aber dann gar nix zurückgibt hätte es dann wohl auch nicht gegeben.

    Aber ich habs jetzt im OP überarbeitet

    Nur nicht richtig. Case 5 hat immer noch nen Bug drinnen. Bzw. genaugenommen zwei Bugs.

    Daran liegt's aber gar nicht. Ich hab den Code mal aufbereitet und bei mir laufen lassen. Mit nem einfachen Test-Loop der das N mal in Folge ausführt und dann den schnellsten Lauf sowie die durchschnittliche Zeit rausschreibt. Ergebnis: Die sind gleich schnell, wie auch zu erwarten war. Ergebnis geht mal so mal so aus, Messtoleranz. Mit nem aufwendigeren Less-Loop für den ich jetzt zu faul war könnte man die Toleranz noch runterbringen aber blah, Wurst.

    Und: > 95% der Zeit braucht das ganze zum Malen der Buchstaben in der Konsole. Lustigerweise sieht man dabei auch dass es schneller wird wenn der "scroll-back" Bereich der Konsole voll ist. Und zwar massiv. Nicht voll = ca. 70ms, voll = ca. 12ms. Und umgeleitet auf NUL ist es ca. 0.25ms.


Anmelden zum Antworten