从目前的情况来看,即使同为45nm的CPU,在相同频率、相同电压下,温度相差都可能十分大。这到底是所谓的“测温bug”还是CPU核心本来就这么热?
下面就从Intel CPU的测温原理来看看温度监测“不正常”的原因。PS:此处只讨论Intel的45nm CPU,由于AMD的测温原理跟Intel有所不同,因此,如果大家需要了解AMD CPU的相关情况,我会考虑重新开帖。
早期的CPU并不具备测温功能,而从Socket插槽开始,主板通常会附带一颗温度探头,位于CPU与主板之间。但这样所测得的温度几乎不具备任何意义,因为真正发热的是CPU Die,于是,从PD开始,Intel引入了一种新的测温机制:digital thermal sensor (DTS),数字温度传感器。
DTS的工作原理是:Absolute Core Temperature = TJMax - DTS(实际温度=TJMax-DTS)。因此,CPU实际测得的数值并不是温度,而是DTS,要监控CPU的实际温度,就必须获得CPU的TJMax值:CPU能承受的最高温度。而Intel官方在TJMax上一直含糊不清,只是在去年的IDF大会上,Intel公布了45nm处理器的TJMax资料,但并不十分准确。因此,目前的CPU测温,可以说是100%不准确的,只能作为一个参考。
这实际上不能算是Bug,因为每颗处理器的核心不可能完全相同,因此TJMax值也肯定完全不同。Intel不可能在每颗CPU出厂之前都进行测试和校正,只能根据ES版CPU来制定一个大概的TJMax值。
另外一个重要参数是Tcase。Intel所建议的Tcase温度测试部位在IHS(Integrated Heat Spreader)中央,也就是通常所说的CPU铜盖中央。由于测试CPU表面的温度要比测试核心温度容易得多,因此,比起核心温度,监测所得的CPU表面温度更有意义。
而Intel在45nm CPU上使用的传感器也存在很多问题,所以单纯对比两个45nm CPU的温度也毫无意义(比如用E5200@4G的温度与E8400@4G的温度进行对比是完全错误的)。首先是前面提到过的TJMax,所有CPU的 TJMax都不相同,Intel也没给出TJmax的误差范围。从CoreTemp作者对45nm CPU所进行的测试来看,即便是相同型号,相同条件下的两个CPU,TJMax的差距也能达到10°C以上。除非能进行大量的校正工作来缩小误差范围,否则要准确测得核心温度非常困难,这并不是制造工艺问题,也不是Bug。
除了TJMax,DTS传感器本身也有很多问题。CPU核心温度越低(也就是距离TJMax越多),传感器的精确度就越差。在待机状态下,这个误差能在 10°C左右。即使是相同生产周期的两个CPU,假设他们的温度都是40度,那么监测所得的温度也可能是:一颗CPU 30度,另一颗是50度。
CoreTemp作者提到,大量收集用户手中CPU的各种温度监控参数,有利于减少误差,但很少有用户愿意反馈这些信息,而少部分反馈回来的信息,也基本无用,因为这些参数受到了太多外界因素的影响。
另外,Intel CPU的传感器在低温状态下会“卡住”。很有可能监测温度是50度,而实际上核心温度已经下降了很多了,但CPU的温度传感器仍然继续报告相同的DTS 值。而如果CPU传感器没有故障,并且TJMax也经过了校准,那么可以发现,Intel的所有45nm CPU之间(包括双核以及四核)的待机温度并不会有太大差距。而对于两颗同为45nm的CPU(比如E5200与E8400),在频率,电压以及散热条件相同的情况下满载,他们之间的温度也不会有很大差距。
这是CoreTemp作者对某颗Q6600传感器的测试结果
但通常情况下,用户所做的温度对比几乎都不能叫公平,因为中间会有散热器差别,机箱温度差别,室温差别以及CPU传感器本身的差别等因素。
因此,CoreTemp作者建议,以及他自己也是这样做的:在CPU超频并满载状态下,如果做好了常规的散热措施,并且系统稳定运行,那么就别去管核心温度了,因为它根本不重要,根本不可能准确。
总结以上,所谓的测温Bug实际上包含了很多因素。首先是TJMax的个体差异。然后是CPU温度传感器会有误差和故障,特别是在待机状态下。并且由于对每颗CPU都进行TJMax和传感器校准会耗费大量资金和精力,因此Intel永远也不可能这样做。而TJMax不能称为Bug,真正有Bug的是传感器。
所以,大家在做好散热措施之后,根本不用去担心待机温度,而不管检测到满载温度是高还是低,都应该做好散热工作,因为实际上,所有45nm的CPU在电压相近,频率相近的条件下,发热量都是基本相等的,完全不存在高温U或者低温U的说法,温度差异就是Bug,并且所有U在超频后都会很热~~