Zeit für Berechnungen
-
hallo,
welchen Befehl muss man angeben, sodass ich sehen kann, wie lang der Computer benötigt, um meine gewünschen Berechnungen ausrechnet. Geht dieses auch nur für einen bestimmten Teil im gesamten Programm? Sodass man es vielleicht alles in eine Schleife packen kann, wofür ich die Zeit gern hätte.
-
suchst Du clock()?
http://www.cplusplus.com/reference/clibrary/ctime/clock/
-
volkard schrieb:
suchst Du clock()?
Oder einen Profiler?
Was möchtest du erreichen? Dann können wir besser antworten.
-
Also, wenn ich Schleifenberechnungen habe und zB zwei Algorithmen miteinander vergleiche, von der Zeit des Berechnungsaufwands, dann würde ich gern die Zeit dafür ausgegeben bekommen. Für manche Algorithmen wird der Rechner sicherlich mehr Zeit brauchen als bei anderen Algorithmen.
Ich hoffe ihr versteht mich jetzt besser.
-
Um zu messen, wie lange er braucht: clock() & Co. Oder ein Betriebssystembefehl wie das Unix-Kommando
time
auf das ganze Programm anwenden (gibt bestimmt auch was ähnliches für Windows), falls das Programm nur einen Algorithmus hat. Oder die Betriebssystembibliotheken zu diesen Kommandos nutzen, wenn du die Messung im Programm haben möchtest (Die Betriebssystemfunktionen sind oft weitaus besser aufgelöst, sowohl was die Zeitauflösung angeht, als auch was die Aufteilung des Zeitverrauchs (User-Space, Kernel-Space, Echtzeit, CPU-Zeit) betrifft).
Wenn du wissen willst, wieso der Algorithmus so lange braucht, wie er braucht und was man verbessern könnte: Profiler. Der macht im Prinzip das was im ersten Absatz beschrieben wird vollautomatisch. Denn du bist, wie du dir sicher denken kannst, nicht der erste mit diesem Problem.
-
Bei
clock()
musst du aber bedenken das der Wert nicht unbedingt um 1 incrementiert wird. Das können auch 200 (oder ...) sein.
-
Mit clock() bist du für Laufzeitmessungen in Programmen gut bedient.
#include <time.h> clock_t begin,end; double zeit,seconds,milliseconds; int i; ... begin = clock(); // Start der Zeitmessung ... for(i=0;i<1000000;i++) // hier ein etwas längerer Berechnungsblock { ... // mach irgendetwas } end = clock(); // Ende der Zeitmessung zeit = end-begin; // zeit in clocks seconds = zeit/CLOCKS_PER_SEC; // zeit in Sekunden // CLOCKS_PER_SEC ist maschinenabhängig // aber ausreichend gross milliseconds = ....; // zeit in Millisekunden --> bitte selbst machen ...
Genaue Syntax bitte nachlesen. Evtl. auch <sys/time.h> möglich oder erforderlich. Dieser Weg ist am besten geeignet zur Laufzeitprüfung verschiedener Algorithmen für ein und dieselbe längere Aufgabe (A oder B besser?). Für das Auffinden, wo unnötig Laufzeit verbraten wird, gibt es vielleicht besseres oder mit fremden Tools einfacheres.
Reicht dir das?