Measuring CPU Dual Core Temps

Add Your Comments

Arthur Liberman

This article will discuss Core Temp and why I decided to write this porgram. I hope you’ll enjoy it and learn something new and interesting.

Background

As computer enthusiasts, it is very important to us that our systems are kept in tip-top condition. For this reason we run different kinds of hardware monitoring programs to monitor temperature, voltages and fan RPMs; but one question keeps popping up all the time:

“How accurate are these programs?”

Most currently available programs read from a Super I/O chip located on the motherboard which measures temperatures, voltages and fan RPM values and then uses a formula supplied by the chip’s manufacturer to calculate what each value read from it stands for and reports that to the user. Everyone agrees that the voltages these kinds of sensors report are never accurate.

It is pretty simple and straightforward to take a multimeter and check your voltages, but what do we do about the CPU temperature? Many wonder how accurate their motherboard sensor really is, in regards of CPU temperature. All I can say from my experience is “they are not very accurate”… They are only adequate enough to help diagnose whether a CPU is overheating.

This accuracy problem is caused by the way manufacturers implement their temperature monitoring system. Some motherboards use an external thermal diode, which is placed in the inner part of the CPU socket under the CPU itself. This diode is supposed to touch the bottom of the chip, thus measuring CPU temperature – this is probably the most inaccurate way to do this.

Fortunately for us this method is not being used much, if at all, anymore. This is because most if not all recent P4/Athlon64 motherboards began using the internal thermal diode found in any modern CPU, and these are actually more accurate, but still there’s something that interferes with accurate readings:

That something is all the circuitry and the electric paths that the signal has to travel through until it gets to the Super I/O chip to be sampled – another thing would be the placement of this sensor. In a CPU core there are several parts that produce heat, with some producing more heat than others. If I take a sensor and put it in a spot in the core that does not produce much heat at all, I would get a completely different reading than if I were to place the same sensor in the hottest part of the same chip.

The Innovation

Both Intel and AMD, realizing that the way things were done until now was probably not the best, made up a new way to monitor CPU temperature. This way includes a thermal diode; however, a thermal diode is an analog device and the readings have to be converted to digital data. This is done by an ADC (Analog to Digital Converter).

A thermal diode that is connected to the ADC creates something called DTS (Digital Thermal Sensor). Basically the way it works is very simple – in theory. A circuit in the CPU core samples a reading from the thermal diode and writes the digital value to a specialized register in the CPU, which allows any software to read this value at will. The benefit of this way of measuring temperature is that all this is done internally in the core and converted into digital data instantly – digital data does not lose accuracy when it’s passed from place to place, unlike an analog signal that is prone to interference and attenuation.

Another advantage of this system is that you can integrate several sensors into the same die. Both Intel and AMD integrate such a DTS in each of their processing cores, which means that you can see the temperature of each core in your CPU. If you put, for example, a load on a dual core processor and set affinity to one of the cores, you will see that only one core gets hotter – and fast! Of course, the temperature of the second core will also go up, as they are physically connected and share the same silicon, but not as much as the loaded core.

Both Intel and AMD use the DTS to determine an overheating and protect the CPU from damage by either throttling or completely shutting the system down, depending on the threshold that the temperature has crossed.

The DTS was first officially introduced in the Core Duo (Yonah) processor by Intel and it was carried on into the Core 2 Duo series. AMD officially introduced DTS with the release of Rev F chips – however after some testing, it became apparent that DTS was there since the first Athlon 64 chip!

Intel also claims that their DTS is placed in the hottest part of the core, while AMD doesn’t say exactly where the DTS is placed, but I am certain it’s not one of the coolest parts.

From a lot of testing, I have come to the conclusion that for an Intel CPU, the temperatures reported by the DTS make a lot of sense. Intel’s white papers say that their DTS is calibrated and ready to use when their chips leave the factory.

In Rev F chips from AMD, the reported temperature also seems to be quite accurate, but from different reports and white papers I’ve seen, the CPU leaves the factory without having the DTS properly calibrated. AMD claims it could have an accuracy range of ±14ºC. The only thing I’ve noticed is some older AMD CPUs either have a very large delta between two cores or sometimes give some really low temperature readings. I guess this is understandable as this feature was unofficial in those CPUs.
{mospagebreak}

There are two more important values that have to be taken into account:

  1. TCaseMax: This value stands for the maximum temperature at the dead-center at the top of the processor core or the IHS which will ensure 100% stability and safety.

  2. Tjunction (or TjunctionMax): This value stands for the maximum temperature at the junction between the processor die and the PCB it sits on, this is usually much higher than the TCaseMax value.

It is important not to confuse these two when reading the DTS temperature. If the DTS registers a temperature higher than TCaseMax, that doesn’t mean the CPU is in danger, as the TCaseMax stands for the highest external temperature the CPU can take. On the other hand, when your chip reaches the Tjunction then you should start to worry, as that is a temperature you wouldn’t want your CPU to cross.

It is possible to detect the Tjunction temperature in Intel CPUs and it is possible to detect the TCaseMax of Rev E AMD chips via software; unfortunately, I’ve yet to find the info on how to get TCaseMax for Intel chips or Tjunction for AMD (which is the most important).

What is surprising about the DTS is the ease of use. Traditional Super I/O chips demand you to program for each separate I/O chip, as they have different addresses and different formulas for calculation.

With DTS, all you need to do is read an MSR (in case of Intel) or an NB register (in case of AMD), run it through a simple formula and viola! You have your temperature!
Here are the formulas:

AMD – CoreTemp = DTS_Value – 49

AMD’s DTS has a data field of 8 bits, and can report from -49ºC up to 206ºC in theory.

Intel – CoreTemp = Tjunction – DTS

Intel’s DTS has a data field of 7 bits and can report Tjunction and 126 steps below Tjunction. For example, if the Tjunction is 85ºC then the theoretical limit is -42ºC, although I have yet to see a chip go under 0ºC.
The DTS in these CPUs seems to just stop at some point and doesn’t go below that.

Measuring Core Temps

I started this project after I got a message from a buddy of mine who found an interesting piece of information in an Intel document about Yonah. He had found about this new DTS feature and I decided this was a pretty good idea for a completely new project.

Here’s a short description of Core Temp and its features:

Core Temp lets you see the temperature of each core in every CPU in your system in real time, as long as it’s a K8 (Athlon64, Sempron, Opteron) CPU or Yonah/Conroe based (Core Duo, Core 2 Duo, XEON). You get a simple, clean interface which shows you the processor, Tjunction/TCaseMax and the temperatures.

Core Temp’s main window is divided into two parts:

  • CPU Info Part:
    Here you can see basic information about what processor you have, its CPUID signature, what CPU type, its revision and frequency. You can also see the VID state of the CPU. VID stands for Voltage ID, which is a value the motherboard uses to set a specific core voltage (in short, its not the actual VCore reading).

  • Temperature Part:
    Here you will see one or more frames; each frame shows you a single processor. You can see the Tjunction/TCaseMax, TDP (Thermal Design Power, only in Rev E AMD chips).
    There will be one or more “Core #x” fields, a field for each core in the CPU. Every field is divided into two parts, the left part shows the temperature, and the right part shows the CPU power state (C0/C1/C2/C3).

Here are a few screenshots:

Both Cores Idle

Pic

Both Cores Under Full Load

Pic

Core #0 Under Full Load (notice that Core #1 is a little bit cooler)

Pic

Settings Window

There is also an “Settings” window where you can change some settings on how you want Core Temp to work:

Pic

For one, you can select the interval for the reads, up to 100 reads a second. From what I found out, it seems that the DTS in an Intel CPU updates about 30 times a second – I am not sure about the AMD DTS yet.

It also lets you make a log file with a predefined interval at which it will record the temperatures into the log file. Later you can add the data into a spreadsheet and make an easy graph of the temperatures over time. You can disable the logging if you don’t want it taking up space on your HD.

I wrote Core Temp in Visual C++, and designed it to be compact so as not to suck up much RAM or other system resources while running, unlike some other programs. The program is still in development and I’m still adding features to it – there are some interesting features to be added in the next release.

If you want to try it out, go HERE.

Arthur Liberman OC Forum aka “The Coolest” – Israel

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>