Я предполагаю, что вы заинтересованы в процессоре IA-32 (архитектура Intel, 32-разрядная версия) и Microsoft Windows.
Регистр для конкретной модели (MSR) IA32_THERM_STATUS
имеет 7 бит, кодирующих «Цифровое считывание».(биты 22:16, RO) - Цифровое считывание температуры в 1 градус Цельсия относительно температуры активации TCC. "(см. «14.5.5.2 Чтение цифрового датчика» в «Архитектура Intel® 64 и IA-32 - Руководство разработчика программного обеспечения - Том 3 (3A и 3B): Руководство по системному программированию» http://www.intel.com/Assets/PDF/manual/325384.pdf).
Итак IA32_THERM_STATUS
не даст вам "температуру процессора", но для нее будет прокси.
Чтобы прочитать регистр IA32_THERM_STATUS
, вы используете инструкцию asm rdmsr
, теперь rdmsr
нельзя вызвать из пространства пользователякод, и поэтому вам нужен некоторый код пространства ядра (может быть, драйвер устройства?).
Вы также можете использовать встроенный __readmsr
(см. http://msdn.microsoft.com/en-us/library/y55zyfdx(v=VS.100).aspx), который в любом случае имеет такое же ограничение: «Эта функциядоступно только в режиме ядра ".
Каждое ядро ЦП имеет свои собственные цифровые термодатчики (DTS), поэтому для получения всех температур требуется еще немного кода (возможно, с маской сродства? см. Win32 API * 1020).*).
Я провел несколько тестов и обнаружил корреляцию между показаниями IA32_THERM_STATUS
DTS и тестом Prime95 «Большие FFT на месте (максимальное нагревание, энергопотребление, некоторое количество протестированной оперативной памяти)». FTP: //mersenne.org/gimps/p95v266.zip
Я не нашел формулы для получения "температуры процессора" (что бы это ни значило) из показаний DTS.
Редактировать:
Цитата из интересного поста TJunction Max?#THERMTRIP?#PROCHOT? от "fgw" (декабрь 2007 г.):
нет способа найти tjmax определенного процессора в любом регистре.таким образом, никакое программное обеспечение не может прочитать это значение.что делают разные разработчики программного обеспечения, они просто принимают определенное соединение для определенного процессора и хранят эту информацию в таблице в программе.кроме того, tjmax даже не является правильным значением, за которым они следуют.на самом деле они ищут температурный порог активации TCC.этот температурный порог используется для расчета текущих абсолютных температур ядра.теоретически вы можете сказать: абсолютная температура ядра = порог температуры активации TCC - DTS Я должен был сказать теоретически, потому что, как указано выше, этот порог температуры активации TCC не может быть считан программным обеспечением и должен приниматься программистом.в большинстве ситуаций (coretemp, everest, ...) они принимают значение 85C или 100C в зависимости от семейства процессоров и версии.так как этот порог температуры активации TCC калибруется во время производства индивидуально для каждого процессора, он может составлять 83 ° C для одного процессора, но может быть 87 ° C для другого.Принимая во внимание то, как эти программы вычисляют температуры ядра, вы можете самостоятельно определить, насколько точны абсолютные температуры ядра!Ни tjmax, ни «наиболее требуемый» температурный порог активации TCC не могут быть найдены ни в одной общедоступной информационной документации.после некоторых обсуждений на форуме разработчиков Intel, Intel не показывает никаких признаков, чтобы сделать эту информацию доступной.