Speed



  • @grovemaster2002
    ein zeichen weniger :p

    return t-2?-1:1;
    


  • Wow, nochmal ein Stück mehr optimiert. 😉



  • bloß einmal messen ist besser, oder?

    Zeit messen ist ehz Voodoo geworden... bei so einer kleinen Sequenz würd' ich es mir sparen, da der Zeitbedarf viel zu stark von der "Umgebung" beeinflußt wird.



  • jo, da zu messen ist eh schwachsinn. Solche Micro "Optimierung" lohnt ja nicht.

    Wenn müsste man aber doch mehrfach messen und den Mittelwert nehmen, da man ja Cache Effekte und ggf. einschreiten des Schedulers berücksichtigen muss.

    Zum messen kann man aber gut rdtsc nehmen, da man damit ja jeden Takt bemerkt.



  • Wenn ich mir Agner Fogs empfohlene Routine für reproduzierbare Zeiten mit RDTSC ansehe... 😮

    Zu Cache und Scheduler kommen noch die Pipelines und Pipeline-Abhängigkeiten dazu, und die drei zusammen sind ja mittlerweile so fett, daß man für Sequenzen kleiner als ein paar dutzend Opcodes gar keine Zeiten mehr zu messen braucht.

    Um den Scheduler "rauszurechnen", kann man auf WinNT-Systemen zu "GetThreadTimes" greifen. Ist immerhin ein Anfang.

    Ansonsten ist RDTSC natürlich hübsch 😉



  • Im C++ Forum war vor einiger Zeit doch ein Thread wo es um die Geschwindigkeit einiger
    verschiedener Bedingungsblöcke ging und da war der Trinäre Operator sogar langsamer
    als das äquvalente if-else.



  • Das muss dann IMHO ein sehr dummer Compiler gewesen sein.



  • argh, warum legen Leute eigentlich auf solche Micro Dinge so viel Wert, wo man fast garantieren kann, dass das bei jedem Compiler unterschiedlich ist, wahrscheinlich sogar bei jeder Compiler Version.



  • kingruedi schrieb:

    argh, warum legen Leute eigentlich auf solche Micro Dinge so viel Wert, wo man fast garantieren kann, dass das bei jedem Compiler unterschiedlich ist, wahrscheinlich sogar bei jeder Compiler Version.

    man stellt dabei auch sachen fest, die über compilerwchsel gleich bleiben.
    übrigens sind neben
    t == 2 ? 1 : -1 //if
    auch mindestens
    t == 2 * 2 - 1 //berechnung
    und
    "\xff\1"[t==2] //tabellengucker
    nachguckenswert.
    natürlich ist es völlig unerheblich, ob man if(t==2) return 1; else return -1; oder return t == 2 ? 1 : -1 schreibt. das sollte auch der dümmste compiler zu gleichem code backen.
    manchmal in die berechnende oder tabellenguckende version zu wechslen kann durchaus gut sein. wir wissen ja alle, was ein falscher sprung kosten kann.



  • manchmal in die berechnende oder tabellenguckende version zu wechslen kann durchaus gut sein. wir wissen ja alle, was ein falscher sprung kosten kann.

    ja natürlich, dass will ich auch gar nicht abstreiten.


Anmelden zum Antworten