developers-forum.de

Normale Version: Geschwindigkeit eines Programms
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Moin,

Wie kann man in C++ rausfinden, wie schnell ein Programm / Funktion / Algo ist?


Beispiel:
Code CPP :
#include <iostream>
#include <ostream>
 
void swap_int(int& z1, int& z2){
    z1 ^= z2;
    z2 ^= z1;
    z1 ^= z2;
}
 
int main(){
    int i = 1;
    int j = 2;
    swap_int(i, j);
    std::cout<<i<<" "<<j<<std::endl;
    std::cin.get();
}


Ist diese Funktion schneller als std::swap(i, j)?



btw: Wie wärs mit einem Monospace-font in den Codetags? Und ein highlightning ohne hellblaue Farbe Smilie
Abend,

mit dem folgenden Code kann man unter Linux die vom Programm verbrauchte Zeit messen. In utime befindet sich die Zeit, die das Programm im User-Space verbracht hat. In stime die Zeit, die es im System-Space, also im Kernel, verbracht hat.

Wenn man eine bessere Auflösung wie Sekunden braucht kann man tv_usec (Mikrosekunden seit der letzten vollen Sekunde) dazu nehmen. Also tv_sec und tv_usec zusammen ergeben die verbrauchte Zeit seit Programmstart.

Zum Zeit messen dann die Differenz von 2 getrusage() Aufrufen verwenden.

Code CPP :
#include <iostream>
#include <sys/time.h>
#include <sys/resource.h>
 
using namespace std;
 
int main()
{
        rusage usage;
        getrusage(RUSAGE_SELF, &usage);
 
        cout << "Usr: " << usage.ru_utime.tv_sec << endl;
        cout << "Sys: " << usage.ru_stime.tv_sec << endl;
}


Für Windows ist mir nur eine Funktion bekannt, die die Zeit auf Milli-Sekunden genau misst. Funktioniert dafür aber unter Windows und unter Linux Smilie

Code CPP :
#include <iostream>
#include <ctime>
 
using namespace std;
 
int main()
{
        clock_t begin=clock();
        // code
        clock_t end=clock();
 
        cout<<"Execution time: "<< 1000*(end - begin)/CLOCKS_PER_SEC <<"ms"<<endl;
 
        return 0;
}



N43

Bzw. ich hab die Schriftart mal auf monospace umgestellt, mir ist aber kein großartiger Unterschied aufgefallen. Das Türkis sollte ich wirklich gegen eine andere Farbe austauschen.
Wunderbar, dankeschön Smilie



Falls es wen interessieren sollte: Beide Funktionen sind in etwa gleich schnell, bei 10.000.000 swaps brauchen beide ca 140ms [auf meinem Rechner], wobei die Zahl leicht nach oben und unten schwankt.


btw: Verdana ist kein Monospace-font, ist mir aber letzens genauso passiert oO

Enigma schrieb:
btw: Verdana ist kein Monospace-font, ist mir aber letzens genauso passiert oO

hab monospace und Courier fuer Code eingetragen. Schau mir das aber Sonntag nochma an.

Bzw. hab grad festgestellt, dass das Forum im IE 6 falsch angezeigt wird.

N43

Wenn ich das Element mit dem Web Dev anschaue hat es die Schriftart Verdana, IE benutze ich garnicht ;D
Referenz-URLs