Clock-Funktion um die Prozessorzeit zu ermitteln
-
Hallo Leute, ich habe vor herauszufinden wie lange mein Programm braucht um eine Multiplikation durchzufuehren. Allerdings habe ich irgendwo beim Einbau der Clock-Funktion Fehler gemacht, da sie mir immer 0 ausgibt. Irgendwas passt da nicht zusammen.
Ich habe das Programm so geschrieben dass man es aus der Commandozeile mit zwei Parametern starten muss.
Beispiel: Programm 5 4
Erklärung: Die .exe file heisst "Programm" und ich will die Werte 5 und 4 multiplizieren.Hier ist der Quelltext...was mache ich da nur falsch?
#include <stdio.h> #include <conio.h> #include <stdlib.h> #include <string.h> #include <time.h> clock_t start, finish; double duration; int main(int argc, char *argv[]) { if ((argc == 2) && (0 == strcmp(argv[1],"?"))) { system("cls"); printf("Sie muessen 2 Parameter als Zahlen uebergeben\n"); printf("um diese zu multiplizieren.\n\n"); } if (argc >2) { start = clock(); printf("\n%.2f * %.2f = %.2f\n", atof(argv[1]), atof(argv[2]), atof(argv[1]) * atof( argv[2])); finish = clock(); duration = (double)(finish - start); printf( "%.15f seconds\n", duration ); } system("pause"); return(0); }
[ Dieser Beitrag wurde am 21.02.2003 um 09:20 Uhr von Peter Piksa editiert. ]
-
clock hat auf windows eine auflösung von 1/1000 sekunden (offiziell), in wahrheit ist sie viel kleiner.
1/10 oder 1/50 wenn ich nicht irre.
da du windows benutzt, schau dir mal QueryPerformanceCounter an, oder die den asm befehl rdtsc
-
So eine Multiplikation dauert nur einige Nanosekunden, die kannst du mit clock nicht messen. Dazu kommt, dass du 2mal atof und einmal printf dazu mißt, das ist locker soviel, dass die Multiplikation dagegen vernachlässigbar wird.
[ Dieser Beitrag wurde am 21.02.2003 um 09:41 Uhr von Bashar editiert. ]
-
Mal zur Verdeutlichung ... du versuchst die Dicke eines Blatts Papier zu messen, indem du es auf einen Tisch legst und mit einem Zollstock vom Boden aus die Höhe mißt. Selbst wenn du jetzt die Höhe des Tisches ohne Papier (was du nicht tust) abziehen würdest, wär es hochgradig ungenau. Die Dicke von Papier kann man aber messen, indem man einen Stapel von 1000 Seiten nimmt und die Dicke durch 1000 teilt ...
-
hä
-
*lachtsichüberseineigenesvorhabenkaputt*
Aber wäre es denn nicht möglich dass das Programm mir halt einfach einen Wert wie 0.0000000003 Sekunden angibt???
Ausserdem habe ich da etwas von einen Tick-Count gehört.
Das ganze soll genauer/besser sein. Ahnung habe ich davon aber leider nicht.Basicly worum ich bitte ist dass jemand mir Hilfestellung leistet mein Vorhaben dennoch zu realisieren weil es mich wirklich interessiert wie ich bestimmte Vorgänge in einem Programm beschleunigen kann. Just4Fun
dann habe ich noch eine Frage: was ist asm? Assembler?
-
Es gibt keine Funktion, die auf Nanosekunden oder was du das hast genau mißt. Da du dem Beispiel mit dem Papierstapel nicht folgen konntest: Mach 1 Million Multiplikationen und teil das Ergebnis durch eine Million, das wird schon ein wenig besser sein. Am besten mit einer sehr weit ausgerollten Schleife (100 Multiplikationen pro Durchlauf). Naja. Im Endeffekt isses aber sinnlos, sowas zu messen, was willst du denn mit dem Ergebnis anfangen?
Du kannst immer zwei fertige Algorithmen vergleichen, aber nicht pauschal sagen, "Multiplikationen dauern 3 Nanosekunden, dies-und-das aber 4, also multiplizier ich ..."
-
Original erstellt von Peter Piksa:
[QB]
Basicly worum ich bitte ist dass jemand mir Hilfestellung leistet mein Vorhaben dennoch zu realisieren weil es mich wirklich interessiert wie ich bestimmte Vorgänge in einem Programm beschleunigen kann. Just4Fun
[QB]- lies meinen beitrag
- nimm nen profiler