SitemapInfoHomeTips und Tricks - Prozessortakt

Homepage

Software,
Download

Software-
entwicklung

  Tips und Tricks

Nachrichten-
technik

Internet

Aktuelles,
Sonstiges

Infos,
Kontakt

Sitemap


Mit der nachfolgenden Funktion können Sie die Taktfrequenz Ihres Prozessors ermitteln.

Als Parameter wird die Meßzeit in ms angegeben. Je länger, um so genauer das Ergebnis. Bei langsamen CPU's (75 MHz) sollte der Wert nicht unter 500 ms liegen.


// GetProcessorSpeed()
//
// Ermittelt die Taktfrequenz der Intel® Pentium® Prozessoren
// durch Auslesen des Time-Stamp Counters (rdtsc-Befehl).
// Der Time-Stamp Counter wird bei jedem Taktzyklus inkrementiert.
// Der rdtsc-Befehl ist nur ab dem Pentium® Chip verfügbar.
// Der Zugriff auf den rdtsc-Befehl kann auf Kernmodus-
// Anwendungen (Ring 0-Schicht) beschränkt werden.
//
#if _MSC_VER < 1100
#define rdtsc __asm _emit 0x0f __asm _emit 0x31
#endif // _MSC_VER < 1100

DWORD GetProcessorSpeed(DWORD dwTime)
{
   DWORD dwTime1, dwTime2;
   ULARGE_INTEGER ulInstruct1, ulInstruct2;

   // Systemzeit in ms abfragen
   dwTime1 = timeGetTime(); // Erster Meßpunkt

   __try
   {
      __asm
      {
         rdtsc
; Time-Stamp Counter auslesen
         mov ulInstruct1.LowPart, eax
         mov ulInstruct1.HighPart, edx
      }
   }
   __except (EXCEPTION_EXECUTE_HANDLER)
   {
      return 0;
   }

   // Meßzeit
   Sleep(dwTime); // Sleep arbeitet nicht unter Win32s

   // Systemzeit in ms abfragen
   dwTime2 = timeGetTime(); // Zweiter Meßpunkt

   __try
   {
      __asm
      {
         rdtsc
; Time-Stamp Counter auslesen
         mov ulInstruct2.LowPart, eax
         mov ulInstruct2.HighPart, edx
      }
   }
   __except (EXCEPTION_EXECUTE_HANDLER)
   {
      return 0;
   }

   // Meßergebnisse überprüfen
   if ((dwTime1 >= dwTime2) || ((dwTime2-dwTime1) < (dwTime/2)) || (ulInstruct1.QuadPart >= ulInstruct2.QuadPart))
      return 0;

   // Aus den Differenzen von Taktzyklen und Meßzeit in ms
   // die Taktfrequenz in MHz berechnen
   return (DWORD)((ulInstruct2.QuadPart-ulInstruct1.QuadPart) / ((dwTime2-dwTime1) * 1000));
}

[ cpuspeed.c ]

[ << Vorheriger ] [ Übersicht ] [ Nächster >> ]

TopHomepage » Softwareentwicklung » Tips und Tricks » CPU-Taktfrequenz