Lecture température processeur

Description

Cette source est l'un des points de départ que j'ai créé pour lire les informations bas niveau du processeur. La source a été testée et validé sur un certains nombres de processeur, au minimum je garanti sur Core 2 + Phenom.

Ce projet est assez vieux (tout comme la lecture de la fréquence processeur), il utilise lui aussi WinRing0 + MSR pour lire une information nommée "Tj" qui est un indicateur fournit par le processeur indiquant la distance entre 100° (ou 75° suivant les processeurs) et sa température actuelle.

Par exemple, on peut obtenir -59°, ce qui indique que le processeur se trouve actuellement à 100 - 59, soit 41°.

Si mes souvenirs sont bon, Tj est apparut sur les premiers Intel Core, et l'équivalent AMD, il est encore d'actualité sur les derniers Core 7/Atom.

Techniquement, ce système est la base utilisé par des programmes comme Real Temp ou CoreTemp.

Source / Exemple :


//Lit les informatins dans les MSR 0x 19C qui contient Tj.
		bool continuer = true;
		do{
			DWORD eax1, edx1, eax2, edx2, eax3, edx3, eax4, edx4;
			RdmsrEx(0x0000019C, &eax1, &edx1, 1);
			RdmsrEx(0x0000019C, &eax2, &edx2, 1 << 1);
			RdmsrEx(0x0000019C, &eax3, &edx3, 1 << 2);
			RdmsrEx(0x0000019C, &eax4, &edx4, 1 << 3);

			eax1 &= 0x007F0000;
			eax2 &= 0x007F0000;
			eax3 &= 0x007F0000;
			eax4 &= 0x007F0000;

			eax1 = eax1 >> 16;
			eax2 = eax2 >> 16;
			eax3 = eax3 >> 16;
			eax4 = eax4 >> 16;

			int temp1 = 100 - ((int)eax1);
			int temp2 = 100 - ((int)eax2);
			int temp3 = 100 - ((int)eax3);
			int temp4 = 100 - ((int)eax4);

			cout << "Msr 19C : " << endl;
			cout << "\teax1 = " << -(int)eax1 << "\teax2 = " << -(int)eax2 << "\teax3 = " << -(int)eax3 << "\teax4 = " << -(int)eax4 << endl;

			cout << "\tTemp core 0 : " << temp1 << " degres" << endl;
			cout << "\tTemp core 1 : " << temp2 << " degres" << endl;
			cout << "\tTemp core 2 : " << temp3 << " degres" << endl;
			cout << "\tTemp core 3 : " << temp4 << " degres" << endl;
			cout << endl << "Continuer ? (O/N)";
			char valid;
			cin >> valid;
			if(valid!=79 && valid!=111)
				continuer=false;
		}while(continuer);

Conclusion :


La compilation se fait sous Windows, avec MinGw 32bits, test réalisés sous Windows XP à l'époque, et encore fonctionnelle sous Windows 7. Je met le code source (puisque ce n'est pas indiqué dedans) sous licence LGPL donc faites en ce que bon vous semble !

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.