Lösung : Prozessorspeed in MHZ
-
wenn ich schreibe:
;vergangene millisekunden messen
mov ecx,10000
loop__:
db 90 dup(10000)
dec ecx
jnz loop__:
;nochmal millisekunden messendamit kriege ich doch die ungefähre zeit raus die die CPU für 100MHZ(wenn ihc mich nicht verrechnet habe) raus oder?
Damit könnte man die geschwindigkeit auf die echte Rechenleistung hoch rechnen.
-
So wie ich das sehe, wuerde diese Prozedur zwischen den beiden Messpunkten ziemlich lange dauern... Da kannst Du dir sicher sein, dass Windows in der Zwischenzeit ein paar Interrupts abhandelt und schon ist das Ergebnis unbrauchbar.
-
Original erstellt von Bigor:
damit kriege ich doch die ungefähre zeit raus die die CPU für 100MHZ(wenn ihc mich nicht verrechnet habe) raus oder?
Damit könnte man die geschwindigkeit auf die echte Rechenleistung hoch rechnen.Jein, nicht wenn dein Prozessor parallelisiert und z.B. drei NOPs gelichzetig ausführt
-
unter Windows,aber unter DOS denke ich würde es gehen.
-
Original erstellt von Bigor:
unter Windows,aber unter DOS denke ich würde es gehen.Eine Drei-Pipeline-CPU ist ein drei-Pipeline-CPU und führt so gut es geht drei Befehle parallel aus, ob Windows, DOS, Linux oder sonstiges
-
wie kann es sein, dass das ueberhaupt funktioniert hat? 2^32 ist doch 34, oder? haben das alle verbessert die hier ergebnisse gepostet haben, oder was ist los?
um die ticks von genau einer sekunde zu kommen, koennte man die zeit, die fuer Sleep(1000) benoetigt wird messen, und davon die fuer Sleep(0) abziehen. dann muesste ja der overhead fehlen.
hat ein prozessor echt nicht irgendwas, was man direkt auslesen kann, um auf die mhz zu kommen?
-
Original erstellt von PeterTheMaster:
um die ticks von genau einer sekunde zu kommen, koennte man die zeit, die fuer Sleep(1000) benoetigt wird messen, und davon die fuer Sleep(0) abziehen. dann muesste ja der overhead fehlen.Sleep wartet zufällig lange, je nach dem, welche anderen Prozesse leben.
Hattu keine hochauflösende Uhr, dann mach so:
-mit while(clock()==t) auf nen clocktickbeginn warten (oder andere genaue uhr)
-Sleep(lange);
-mit while(clock()==t) auf nen clocktickbeginn warten (oder andere genaue uhr)
So haste ne genaue Zeitdifferenz. Dat rult.aber warum nicht einfach ungefähr ne sekunde sleepen, davor und danach sowohl mit rdtsc als auch QueryPerformanceCounter messen.
und dann kommt...
obwohl genügend ******* sagen, ohne mathe könne man proggen...
der gewaltigen DREISATZ!!!und schwups habe ich fertig.
[ Dieser Beitrag wurde am 16.11.2002 um 12:42 Uhr von volkard editiert. ]
-
Original erstellt von PeterTheMaster:
wie kann es sein, dass das ueberhaupt funktioniert hat? 2^32 ist doch 34, oder? haben das alle verbessert die hier ergebnisse gepostet haben, oder was ist los?Ähm...2+32=34, ich weiß ja nicht wie man dir Potenzrechnung beigebracht hat, aber bei mir ist 2^32 = 4294967296 != 34.
Um nochmach volkard zu Zitieren
"obwohl genügend ******* sagen, ohne mathe könne man proggen..."
-
2^32==34
-
Original erstellt von Mr. N:
2^32==342^32 != 34
-
Das kommt darauf an,
#define ^ +
mfg
-bg-
-
Ist das die Standarddefinition von ^ ?
-
2^32 == 34
2³² != 34Meint ihr PeterTheMaster ist dumm? Der hat schon recht.
-
Original erstellt von -bg-:
**Das kommt darauf an,#define ^ +
mfg
-bg-**kannst in c++ nur bezeichner definen. also zeichenkette aus buchstaben, unterstrich und ziffern. sogar c++-schlüsselwürter gehen, das der präprozessor ja noch c++-blind ist.
aber auch ganz ohne definen, muß ich wirklich bestätigen, daß 2^32==34.
-
Dann gebe mir bitte mal jemand die exakte mathematische Definition von ^
-
Ich dachte immer ^ bedeutet hoch x?
z.B. 2^8
2*2*2*2*2*2*2*2oder?
-
Ok, ihr habt teilweise recht und ich auch
2^32 == 34 in C, aber nicht in einigen anderen Sprachen
Ich zitiere da ovn kungruedi (wieter oben in diesem Thread):
@TheBigW
in C(++) ist ^ der exklusiv oder Operator, dass liegt nicht am VC++ (auch wenn der viel anders macht). pow (aus der math.h bzw. cmath) benutzt man zum potenzieren. (Warum es keinen ** Operator, wie in FORTRAN gibt, versteh ich auch nicht ganz )[ Dieser Beitrag wurde am 17.11.2002 um 13:53 Uhr von TriPhoenix editiert. ]
-
erschreckend, wieviele in einem c++ board nicht wissen, was ^ in c(++) bedeutet
-
Original erstellt von Mr. N:
erschreckend, wieviele in einem c++ board nicht wissen, was ^ in c(++) bedeutetIch weiß es shcon und benutze es auch ständig, aber das kam so ausm Zusammenhang und da denkt man eher an das übliche
-
Also ich hätte da noch ne Frage, wieso wird in dem Code das Register edx auch benutzt? Also ich hab mal n bissl rumgespielt und hab mir das hier gebastelt:
// includes #include <stdio.h> #include <windows.h> // calc mhz int GetMHZ() { // private DWORD dwValue1; DWORD dwValue2; // calc bars __asm{ rdtsc mov dwValue1, eax } Sleep(1000); __asm{ rdtsc mov dwValue2, eax } // return value return (int)(dwValue2 - dwValue1)/(1000000); } // entry int main() { printf("%d Mhz", GetMHZ()); getchar(); return 0; }
Jetzt meine Frage, ist das korrekt oder ist das totaler Müll, weil ich finde das hier viel verständlicher und es funktionier (bei mir jedenfalls) genauso...
cu para