Lösung : Prozessorspeed in MHZ



  • hi,

    !!!NICHT OPTIMIERTER CODE!!!
    Prozessorgeschwindigkeit in MHZ ermitteln (imho ab Pentium[funktioniert bei meinem P1 166MHZ auch! 😮 ]): 😉

    DWORD GetMHZ()
        {
        DWORD value1    = 0;
        DWORD value2    = 0;
        DWORD value3    = 0;
        DWORD value4    = 0;
        __asm
            {
            rdtsc
            mov value1, eax
            mov value2, edx
            }
        Sleep(1000);
        __asm
            {
            rdtsc
            mov value3, eax
            mov value4, edx
            }
        value1          = value3 - value1;
        value2          = value4 - value2;
        double MHZ      = (value1+(value2*(2^32)))/1000/1000;
        return (DWORD)MHZ;
        }
    

    Sollte annähernd die MHZ ausgeben! 🙂
    Könnt ihr das mal testen?
    DANKE!



  • MHz: 849
    MHz: 855
    MHz: 856
    MHz: 855
    MHz: 856
    MHz: 855
    MHz: 856
    MHz: 855
    MHz: 856
    MHz: 856

    Mein Rechner hat 850 MHz, sieht gut aus 🙂



  • Die MHZ sind wegen dem Sleep(1000) etwas ungenau! 😉



  • Cool 4198995 MHZ
    auf nen unübertakteten duron 1 ghz

    MSVC 6 windows 2000

    #include <iostream>
    #include <windows.h>
    #include <conio.h>
    using namespace std;
    
    DWORD GetMHZ()
        {
        DWORD value1    = 0;
        DWORD value2    = 0;
        DWORD value3    = 0;
        DWORD value4    = 0;
        __asm
            {
            rdtsc
            mov value1, eax
            mov value2, edx
            }
        Sleep(1000);
        __asm
            {
            rdtsc
            mov value3, eax
            mov value4, edx
            }
        value1          = value3 - value1;
        value2          = value4 - value2;
        double MHZ      = (value1+(value2*(2^32)))/1000/1000;
        return (DWORD)MHZ;
        }
    
    int main()
    {
        cout << (int)GetMHZ << " MHZ"<<endl;
        getch();
        return 0;
    }
    


  • ich bekomme auch 4198995 MHz auf einem NICHT übertakteten Intel Pentium 4 1.5 GHz.



  • Original erstellt von mynonA:
    **```cpp
    int main()
    {
    cout << (int)GetMHZ << " MHZ"<<endl;
    getch();
    return 0;
    }

    Funktionsaufrufe erfolgen mit Klammern. Der Code gibt nur die Adresse der Funktion aus!
    [cpp]GetMHZ**()**[/cpp]

    lg, phreaking

    [ Dieser Beitrag wurde am 10.09.2002 um 19:49 Uhr von phreaking editiert. ]



  • ah war klar, dass dass so ein einfacher fehler ist 995 MHZ
    funtzt gut
    danke 🙂



  • hehe, und ich hab einfach den Code ohne zu überlegen von mynonA übernommen! Aber jetzt stimmt die Ausgabe, nach der Codeveränderung: 1513 MHz



  • hi,bei mir gehts garnicht? wie habt ihr das gestartet?

    gruss



  • ahhhh...jetzt gehts hatte asm vergessen...wie dumm!! kann jemand den code erklären, oder wär das zu lang??

    DANKE im voraus



  • DWORD value1    = 0;  // variablen init
        DWORD value2    = 0;
        DWORD value3    = 0;
        DWORD value4    = 0;
        __asm
            {
            rdtsc             // time stamp counter lesen, s.u.
            mov value1, eax   // und ergebnis in value2:value1 speichern
            mov value2, edx
            }
        Sleep(1000);          // 1 (vom OS definierte ;) Sekunde warten
        __asm
            {
            rdtsc             // time stamp counter lesen, s.u.
            mov value3, eax   // und ergebnis in value2:value1 speichern
            mov value4, edx
            }
        value1          = value3 - value1;  // differenzen berechnen
        value2          = value4 - value2;
        double MHZ      = (value1+(value2*(2^32)))/1000/1000;     // value2:value1 als Wert nehmen und durch 1M teilen
        return (DWORD)MHZ;
    

    RDTSC liest den sogenannten time stamp counter aus, das ist eine interne Prozessorvariable die jeden Takt einfach erhöht wird. Das Programm fragt also, wieviele Takte gewesen sind, wartet dann eine Sekunde und fragt dann nochmal wieviele Takte gewesen sind. Die Differenz ist logischerweise die Zahl an Takten, die in einer Sekunde vergangen ist. Zur freundlicheren darstellung wird das ganze noch in eine MHz-Zahl gerechnet, so dass man nicht das Ergebnis in Hz ablesen muss 😉



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

    gruss und dank



  • Keine Ahnung, dazu muss man sicherlich irgendeinen port ansprechen oder eine Speicherstelle...gibt halt kein rdptm (read processor temperature meter ;))
    Auf jeden Fall komplett anders als das hier 🙂



  • hallo, danke.....



  • hi,

    ich hab den code con mynonA übernommen, den funktionsaufruf in klammern gesetzt und bei mir kommt folgende fehlermeldung wenn ich das ganze in ein C++ konsoleprogramm packe (mit Borland C++ Builder 5 Enterprise)

    [B][C++ Error] Unit1.cpp(13): E2276 ( expected.

    das ist an der stelle nach dem __asm, wo die { klammer steht.

    __asm
            {                 // <- da will der eine ( klammer haben
            rdtsc
            mov value1, eax
            mov value2, edx
            }
        Sleep(1000);
        __asm
            {                // <- hier auch...
            rdtsc
            mov value3, eax
            mov value4, edx
            }
    

    wenn ich da eine normale klammer hinmache bekomme ich aber immer 0 MHz geliefert...

    btw: wann benutze ich asm, _asm bzw. __asm und wo liegen da die unterschiede?

    danke euch!

    bernd



  • hi, hast den aufruf der funktion mit klammern gemacht ? im main programm? siehe posting weiter oben!!

    gruss



  • Original erstellt von <root2>:
    ...hab den code con mynonA übernommen, den funktionsaufruf in klammern gesetzt und bei mir kommt folgende fehlermeldung wenn ich das ganze in ein C++ konsoleprogramm packe...

    ja, habe ich 😉

    trotzdem 0 MHz.

    includiert habe ich folgende header:
    <stdlib.h>
    <stdio.h>
    <conio.h>
    <iostream.h>
    <windows.h>

    btw: die variable value3 wird bei mir nie benutzt, deswegen bekomm ich auch für die ein warning. etliche warnings wegen nicht ANSI schlüsselwörtern bekomme ich auch aus: tchar.h , new.h , ostream.h und istream.h ... alles etwas seltsam...

    [ Dieser Beitrag wurde am 11.09.2002 um 15:32 Uhr von root2 editiert. ]



  • 1334 MHz
    1332 MHz
    1333 MHz

    - sehr genau -

    Hab AMD Athlon 1,33 GHz.



  • Original erstellt von <root2>:
    **
    [B][C++ Error] Unit1.cpp(13): E2276 ( expected.
    **

    Kann es sien dass der Borland-Compiler ne andere inline-asm-Syntax hat?



  • *---

    Original erstellt von TriPhoenix:
    Kann es sien dass der Borland-Compiler ne andere inline-asm-Syntax hat?

    ---*

    hier mal ein auszug aus der hilfe datei von meinem builder:

    Category

    C++Builder keyword extensions, C++-Specific Keywords

    Syntax

    asm <opcode> <operands> <; or newline>

    _asm <opcode> <operands> <; or newline>

    __asm <opcode> <operands> <; or newline>

    Description

    Use the asm, _asm, or __asm keyword to place assembly language statements in the middle of your C or C++ source code. Any C++ symbols are replaced by the appropriate assembly language equivalents.

    You can group assembly language statements by beginning the block of statements with the asm keyword, then surrounding the statements with braces ({}).

    ---

    Examples

    // This example places a single assembler statement in your code:
    
    asm pop dx
    
    // If you want to include several of asm statements,
    // surround them with braces:
    asm {
      mov ax, 0x0e07
      xor bx, bx
      int 0x10         // makes the system beep
    
    }
    

    so wie ich das lese scheint es die 'übliche' syntax für inline assembler zu sein, oder?
    das beispiel das hier angeführt ist klappt übrigneds auch nicht. zumindest beept da nix (mit win98).
    und um nochmal auf meine frage von vorhin zurückzukommen: warum gibt es 3 unterschiedliche varianten asm einzubauen? darüber schweigt sich die builder hilfe auch aus...

    und zu guter letzt verstehe ich die ganzen warnings auch nicht so ganz... 😕
    kanns sein das meine settings durcheinandergeraten sind?
    bernd

    [ Dieser Beitrag wurde am 11.09.2002 um 18:10 Uhr von root2 editiert. ]


Anmelden zum Antworten