CPU Temperatur auslesen mit c++

Das Problem ist, dass das bei jedem Board unterschiedlich ist, die Tools benutzen da eigene Treiber oder evtl. DLLs die vom Mainboardhersteller zur Verfügung gestellt werden.
Mit einem einfachen Header wird's wohl nicht getan sein.
 
Naja, wenn es um die Temperatur der einzelnen Cores geht, dann kann man diese mit den heutigen CPUs (Athlon 64 und Intel C2D) relativ "hardwareunabhängig" auslesen. Vom Mainboard ist man fast vollkommen unabhängig, nur die unterschiedlichen CPUs müssen extra implementiert werden.
 
Backslash schrieb:
Das Problem ist, dass das bei jedem Board unterschiedlich ist, die Tools benutzen da eigene Treiber oder evtl. DLLs die vom Mainboardhersteller zur Verfügung gestellt werden.
Wen interessiert das Mainboard, wenn die CPU selbst die relevanten Informationen liefert?

Dummerweise muss man allerdings die CPU kennen, deren Temperatur man auslesen möchte. Allgemeine Patentlösungen wirst du allerdings kaum einfach so im Internet finden, wenn man betrachtet, wieviel CPUID sich die Nutzung der eigenen Bibliotheken kosten lässt: http://www.cpuid-pro.com/hwmonitor.php

Wenn du allerdings genau weißt was für einen Prozessor du hast und das Programm eben nur für eine Zwecke funktionieren muss, hast du deutlich größere Chancen auf Erfolg.
 
Jemand der das ganze nicht so CPU-Abhängig machen will... Bei Asus Boards geht das zB mit der ASUS.dll.
 
z.B. http://www.heise.de/kiosk/archiv/ct/07/11/218
dazu noch die Seite: http://www.withopf.com/tools/cputempwatch/

Zudem noch die Quellen-Angabe aus dem c't Artikel:
[1] Intel64 and IA32 Software Development Manual 3a, www.intel.com/design/processor/manuals/253668.pdf

[2] Power and Thermal Management in the Intel Core Duo Processor, www.intel.com/technology/itj/2006/volume10issue02/art03_Power_and_Thermal_Management/vol10_art03.pdf

[3] Intel Core Duo Processor and Intel Core Solo Processor on 65 nm Process Specification Update, ftp://download.intel.com/design/mobile/SPECUPDT/309222.htm

[4] Revision Guide for AMD NPT Family 0Fh Processors, www.amd.com/us-en/assets/content_type/white_papers_and_tech_docs/33610.pdf
 
Zuletzt bearbeitet:
Ich denke mit direkt auslesen wirst du es nicht zum Laufen bekommen. Ich würde einmal nach irgendeinem Tool suchen, das die Temperatur ausliest und ein CLI hast. Dann leitest du die ganze Ausgabe in eine Datei um kannst es dir raussuchen.
 
Hallo,
Danke erstmal für die schnelle und ausführliche Hilfe!

ICh glaube, wenn das so komplex ist, werde ich das doch nicht programmieren.

Das ganze sollte ein kleines Benchmark programm werden, mit dem man die CPU 100% auslastet und dabei die Temperatur lesen kann.

Jetz kanns halt nur 100% auslasten :-)

MfG

M.E.
 
Du brauchst in jedem Fall einen Kernelmode-Treiber für direktes I/O. Such mal nach winio.dll und winio.sys, die sind frei verfügbar. Und dann müsstest du dich noch mt dem SMB (System Management Bus) beschäftigen, daran hängen nämlich die ganzen Mainboardkomponenten wie Lüfter-, Spannung- und Temperaturüberwachung.

Viel Spaß. ;)
 
wie machst du das mti dem benchmark ? ich hätte auch interesse an sowas, aber in einer C# umsetzung
 
Für Core2-CPUs:
Die CPU-Temperatur kannst du aus einem MSR (machine specific register) auslesen. Nummer muß in der CPU-Doku stehen. Wenn das unter Windows passieren soll, mußt du nen kleinen Treiber schreiben, da rdmsr ein privilegierter Befehl ist, den nur der Kernel ausführen darf. ECX bekommt die MSR-Nummer, das Ergebnis (64 bit) landet in EDX:EAX. Etwa so:

#include <ntddk.h>
NTSTATUS DriverEntry(IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING RegistryPath) {
ULONG ulECX = 0x000????; // ???? ist die Registernummer
ULONG ulEAX = 0;
ULONG ulEDX = 0;
_asm{
mov ecx,ulECX
rdmsr
mov ulEAX,eax
mov ulEDX,edx
}
// irgendwas damit tun
return 0xFFFFFFFF;
}

Sollte so funktionieren. Mußt nur noch die MSR-Nummer aussuchen und die Werte irgendwie verarbeiten. Ka, ob das dann schon Grad Celsius sind ... vermutlich nicht. Gibt außerdem 2 Werte in den Core2Duo-CPUs ... Tcase(CPU-Gehäuse) und Tjunction (CPU-Kern) ... google fragen.
 
Zuletzt bearbeitet:
Zurück
Oben