Lösung : Prozessorspeed in MHZ



  • 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(++) bedeutet 🙄

    Ich 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
    😃



  • Das geht solange eax nicht überläuft. der TSC ist ein 64-bit-Wert, der hohe teil landet in edx, der niedrige in eax. Solange also eax nicht überläuft ist alles gut, sobald eax jedoch überläuft kriegst du einen gigantsichen negativen Wert.



  • Ok, gut, dann hab ich das verstanden.

    danke und ciao



  • Ich habe alle Codes die hier in diesem Topic aufgeführt wurden ausgetestet aber keiner davon lies sich compilieren weil immer fehler auftraten... 😞



  • moin

    was man so alles findet wenn man mal auf "suchen" clickt..

    @ kingruedi, falls es noch interessiert.. nach monaten 😉

    aus deinem beispiel..

    __asm__ __volatile__("rdtsc":"=a"(value3),"=d"(value3)::);
    

    wir schauen nochmal genauer hin und machen aus der letzten drei.. eine vier..
    und schon funktionierts.. mal davon abgesehen das die "::" da vielleicht nicht
    stehten sollten 😉
    und entelechie hat wohl auch nur copy&paste benutzt 😃

    [ Dieser Beitrag wurde am 07.05.2003 um 21:18 Uhr von stahl editiert. ]



  • Moin!

    Ja, funktioniert. Hab den Athlon 2000+ und zeigt mir 1657 MHz an.
    Allerdings auch nur, wenn ich die Funktionsklammern hinzufüge, andernfalls die Addresse.

    Ich weiß nur, dass VC++ __asm oder_asm haben will und Borland nur asm.
    Ob es Unterschiede in der Ausführung gibt, weiß ich net. Glaube aber nicht.

    thx.
    bjöRn



  • Hallo!

    Gibt es auch eine Möglichkeit die CPU-Geschwindigkeit OHNE RDTSC herauszufinden?

    Danke im voraus!

    MfG
    486er-User



  • Kann man die Geschwindigkeit der CPU auch herausfinden, ohne sleep(1000); zu verwenden?



  • kann hier jemand mal paar fragen beantworten?



  • Theoretischer Ansatz (ungetestet) :
    Mit RTC oder PIT die Zeit messen, die zum Durchlaufen eines bestimmten Codes gebraucht wird.
    Da waere dann weder RDTSC noch sleep drin.

    Einen Code zu schreiben, der angesichts der zahlreichen Optimierungen in modernen CPU noch verlaessliche Ergebnisse erzeugt, stelle ich mir so jedoch gar nicht mal so trivial vor...

    Momentan habe ich aber weder die Zeit, noch ueberhaupt ein Interesse daran, so einen Code fuer irgendein System zu schreiben.
    Falls ihr also darauf wartet, hier etwas Code zu sehen zu bekommen, muss ich euch wohl leider erstmal entteuschen.



  • devil667 schrieb:

    hi, ahhh ja. wie würde denn selbiges mit der prozessortemperatur funzen??

    gruss und dank

    is völlig abhängig vom prozessor, von daher bleibt dir als einzige möglichkeit ACPI 🙂



  • DEV_c++ will das auch...



  • hi,

    ich wollte das grade auf nem centrino laptop unter bc++b 4 compilieren, aber er meint zu rdtsc: "Illegal instruction for currently selected processor(s)."

    😕



  • Dann musst du wohl in deinen Compiler-Optionen mal rumsuchen und den Prozessortyp auf mindestens 586/Pentium stellen.



  • Hallo!

    Ich weiß, das Topic ist uralt, aber hab da noch mal was zu sagen:
    Ich habe einen AMD Athlon64 3800+. Wenn ich den per Cool'n'Quiet auf 1000 MHz oder 1800 MHz laufen lasse, wird die Geschwindigkeit korrekt angezeigt. Stelle ich ihn aber auf den Normaltakt (2400 MHz) bekomme ich -2147.48 MHz.
    Ist der Code nicht für hohe Geschwindigkeiten geeignet?

    MfG
    Egor



  • Bei mir funktioniert das sogar noch bei 3 GHz



  • und ich bekomms mit dem borland-assembler einfach nicht gebacken:
    http://www.c-plusplus.net/forum/viewtopic-var-p-is-963208.html#963208


Anmelden zum Antworten