Wie führt ihr eure Perfomancevergleiche durch?
-
Um den Titel nicht vollständig zu vermüllen, schreibe ich den Rest hier.
Meine Frage ist, wie ihr eurer Perfomance(damit meine ich Zeitvergleiche) durchführt. Also benutzt ihr bestimmte Programm die das Messen oder schreibt ihr es selber um die Zeit zu stoppen und wenn würde es mich brennend interessieren wie so ein Zeitmessungscode für sehr kleine Zeitspannen aussehen könnte?Danke und einen Schönen Morgen
EDIT: Beispielsweise bei der füllung von Arrays im Gegensatz zu Vectoren, wie man da so minimale Zeitmessungen durchführen kann?
-
#include <windows.h> //Winmm.lib verlinken long lStart= timeGetTime(); //DEIN CODERDER DAUERT long lEnd= timeGetTime()-lStart; std::cout < "Zeit: " << lEnd << std:endl;hier ist die kleinste einheit ne millisekunde :p
EDIT: Führ den Vergleich aber im DEBUG udn RELEASE mode aus...
-
ohh man is mir dsa jetzt peinlich, wo finde ich denn bei Code::Blocks das Verzeichnis wo diese .lib drinne ist?
EDIT: hat sich erledigt habe sie gefunden

-
OK. Mal ne andere Frage. Mir scheint so das clock und timeGetTime anscheind die gleichen Werte liefern, was ist nun der siginifkante Unterschied zwischen den beiden? wo haben sie Vor - und Nachteile?
-
weis ich nicht.. hab schon immer mit TimeGetTime() gemacht... bei clock können glaub auch noch die CPU zyklen erechnet werden.. bin mir aber nich sicher!
-
Unter Windows gibt es zur exakteren Messung noch QueryPerformanceCounter / QueryPerformanceFreqenzy aus der WinAPI.
-
ok aber mal ernst, wie müsste ich einen Vergleich bei der Befüllung von arrays im Vergleich zu Vectoren durchführen? Weil ich denke das da timeGetimeTime() und clock() einfach nicht mehr "schnell" genug sind um diese minimalen Zeitdifferenzen darzustellen, oder Irre ich mich?
-
was hast du vor??
long Start = MESSEZETI VEC.push_back(DATA); long End = MESSESEZEIT end-Start= 1200ns??mach ne forschleife und add 10000 stück
-
10000 ist viel zu wenig
-
vector<int> test; int array[1000]; double start = clock(); for(int i = 0;i<1000;i++) { test.push_back(i); } double ende = clock(); double dauer =(ende -start)/CLOCKS_PER_SEC; cout<<"Dauer: "<<dauer<<endl;wenn ich es jedoch so machen, kommt clock nicht mehr hinterher und zeigt mir nicht die genaue differenz an, auch wenn sie minimal ist. Er zeigt mir nur 0 an und das haut ja nicht ganz hin

-
du hast den Beitrag von Joe_M. übersehen
-
Dann mach das 1.000 mal 1.000 mal 1.000 mal, dann kommst in etwa in meßbare Bereiche.

-
du meinst ne milliarde;)
und dann las das mal laufe in RELEASE mode.. wirst dich wundern wie flot so ein PC ist;)
-
Ich hatte mal einen solchen Test im folgenden Thread durchgeführt (inkl Sourcecode):
http://www.c-plusplus.net/forum/viewtopic-var-t-is-207482-and-highlight-is-.html
cu André
-
Im einfachsten Fall einfach man: time(1). Wenn es "genauer" sein soll, dann gibt es auf x86 Plattformen die Assembler Anweisung rdtsc mit der man den Taktzähler auslesen kann.
-
ahh alles klar, Danke für die vielen Informationen.
-
vector<int> test;
int array[1000];
clock_t begin = clock();for( int y = 0; y<1000; y++ )
{
test.push_back(y);
}clock_t ende = clock();
double dauer
double)(ende - begin)/CLOCKS_PER_SEC;
cout << "Dauer: "<< dauer << endl;Wenn du statt den post (y++) den pre-inc (++y) verwendest, wirst dich schon mal wundern.
m.
EDITH:
Strange, da hat mir wohl mein Geist einen Streich gespielt. Dacht grad das es geklappt hätt.
-
m.trix schrieb:
Wenn du statt den post (y++) den pre-inc (++y) verwendest, wirst dich schon mal wundern.
Nicht zwangsweise, kommt aber auf den Compiler und den Typ an (Thema Optimierung). Auch wenn das Preincrement im Zweifel besser ist.
-
m.trix schrieb:
Wenn du statt den post (y++) den pre-inc (++y) verwendest, wirst dich schon mal wundern.
Wundern würdest du dich wohl vermutlich, weil es genau garkeinen Unterschied machen wird.
-
m.trix schrieb:
Wenn du statt den post (y++) den pre-inc (++y) verwendest, wirst dich schon mal wundern.
m.
EDITH:
Strange, da hat mir wohl mein Geist einen Streich gespielt. Dacht grad das es geklappt hätt.man sollte halt normale Addition von Überladenen Operatoren unterscheiden können.
Warum willst du überhaupt Performance vergleichen? Anwendungen bekommt man mit nem Profiler schnell und nicht mit sowas.
-
Ok, dann bei einem int vermutlich nicht...geb mich geschlagen.