CPU的核心温cpu温度60度正常吗吗

读取CPU核心温度 - 北漂_IT_boy - 博客园
最近在搞一个读取CPU温度的驱动,网上翻了好多资料,可发现全是copy的,原稿也就两三篇,可经实践发现其中不乏错误与片面,让人着实走弯路,燃起了我要总结一番的欲望。
这个驱动搞了一个多星期,总算可以运行了,测试了几台Intel和AMD的机器也都测试通过,测试对比用的是CPUID HWMonitor和Core Temp。
Intel和AMD的CPU中都有温度传感器(DTS),每个核心都有一个,温度就是由此获取来的,多核cpu可以使用 SetProcessAffinityMask API 来指定执行的CPU。
首先是利用CPUID来区分是Intel型号还是AMD型号,利用汇编和函数都可实现,考虑到64位系统不支持嵌入汇编,所以还是直接利用API函数就行。
CPUID其实就是对eax执行cpuid指令,返回信息储存在eax,ebx,ecx,edx中,令eax=0,可将CPU厂商信息返回在ebx,ecx,edx中,
    int CPUInfo[4];
    __cpuid(CPUInfo,0);&
Intel信息字符串为GenuineIntel,AMD为AuthenticAMD,只判断前4个字符就可以,只需与CPUInfo[1](ebx)比较就可得出型号。
接下来说如何获取温度,先从简单的说起,Intel实现起来比较简单:
  先以eax=0 执行 cpuid 检测 eax 支持的最大命令数,如果小于6就肯定不支持DTS。然后以eax=6 执行 cpuid,& 然后测试 eax 第一位是否为1,如果为1表示CPU支持DTS。
  &读取DTS:以 ecx=0x1A2 执行 rdmsr 指令, 测试 eax 的第30位是否为 1, 如果为 1 表示温度计算的初始值为 85 度否则表示从100度开始计算,这个值称为 Tjunction.
   eax=__readmsr(0x01A2)
& & & 然后以 ecx=0x19c 执行 rdmsr 指令,& eax 的 16-23 位为表示当前DTS 值,当前温度要以下面公式计算.
&&&&&& 当前cpu温度 = Tjunction - DTS
&&&&&& 注意& signature 为 0x6f1, 0x6f0的 CPU DTS 值直接代表当前温度而不用Tjunction 相减. 而 signature 小于等于 0x6f4 的 Tjunction 一直为100。
AMD就比较恶心了,研究了挺长时间:
  AMD温度存储在NB寄存器中,这是一个热传感寄存器。AMD的CPU分为K8和K10,K8的温度存储在这个寄存器的23-14位,K10的在31-21位。
  要访问这个状态寄存器,需要对PCI进行读写。先介绍俩个PCI用到的寄存器,CF8h和CFChCF8h: 存放配置空间的地址(CONFIG-ADDRESS)CFCh: 保存配置空间的读写数据(CONFIG-DATA)这两个空间对应于PCI桥路的两个寄存器,当桥路看到CPU在局部总线对这两个 I/O空间进行双字操作时,就将该I/O操作转变为PCI总线的配置操作。
温度读取& & & & & & & & & & & & &&
如果是K8的话,可以忽略低俩位,读取23-16就可以了,当然也可以读23-14,然后\4或者&&2;如果是K10的话,那就读取31-21
如何判断K8,K10
__cpuid(CPUInfo,1); //cpuid执行1,取出eax
t=CPUInfo[0];
family=((t&&20)&0xFF) + ((t&&8)&0xF);
model=((t&&12)&0xF0) + ((t&&4)&0xF);
stepping=t&0xF;
如果Family ==0xf 而除了&&&&&&&&&&&&&& (((model == 4) && (stepping == 0)) ||&&&&&&&&&&&&&&&&&&& ((model == 5) && (stepping &= 1)))则为K8如果Family & 0xf,一般是G。那就是K10
温度的计算公式K8 Temp = Value - 49'.&& 49这个值需要修正的:if (model &= 0x69 && model != 0xc1 && model != 0x6c && model != 0x7c) &temp=Value-49+21;K10 Temp = Value / 8'.
IO访问PCI总线设备配置空间配置空间地址寄存器的格式:31&&&&& 24 23&&&&&&&& 16 15&&&&&&&&&&& 11 10&&&&&&&&&&&&& 8 7&&&&&&&&&&&&&& 2 1&& 0| reserve | bus number | device number | function number | register number | 0 | 1/0 |
所以知道 bus number, device number, function number, register number后,可以这么来构造配置空间地址寄存器IOADDR = 0x+bus*0x10000 +(device*8)*0x100 + uFunction&0x07 + register number&~3;为什么需要0x呢,因为当CPU发出对I/O空间CFCh的操作时,PCI桥路将检查配置空间地址寄存器CF8h的31位。如果为1,就在PCI总线上产生一个相应的配置空
间读或写操作,0x就是使配置空间地址寄存器为1。经过上面的讨论后,可以写成#define DeviceSlot(uDevice, uFunction) ((((uDevice)&0x1f)&&3)|((uFunction)&0x07))#define GetDevice(uBus,uSlot,uAddress) (0xL |((uBus&0xff)&&16)|(uSlot&&8)|(uAddress&~3));
这样知道 uBus, uDevice, uFunction, uAddress后就可以通过IO指令来读写了。
对于K8, uAddress为0xE4,对于K10 uAddress为0xA4
怎样获取uBus, uDevice, uFunction从上面知道GetDevice需要 uBus, uDevice, uFunction的。可以扫描PCI总线来获取,对于AMD K8来说,设备ID为0x1103,对于K10来说,设备ID为0x1203。 二者的uFunction都为3.通过扫描PCI总线,匹配设备ID来获取。
BOOL get_bus_dev( int devieid,int *BUS, int *DEV ) //遍历PCI得到bus和dev{
ULONG ULONG ULONG func=3;
//K8 K10 fun为3 unsigned long S PCI_COMMON_CONFIG PciC PCI_SLOT_NUMBER SlotN
for(bus = 0; bus &= 255; ++bus)
for(dev = 0; dev &= 31; ++dev)
SlotNumber.u.AsULONG = 0;
SlotNumber.u.bits.DeviceNumber =
SlotNumber.u.bits.FunctionNumber =
RtlZeroMemory(&PciConfig, sizeof(PCI_COMMON_CONFIG));
Size = HalGetBusData(PCIConfiguration,
SlotNumber.u.AsULONG,
&PciConfig,
PCI_COMMON_HDR_LENGTH); //API函数
if (Size==PCI_COMMON_HDR_LENGTH)
if ( devieid==PciConfig.DeviceID )
DbgPrint("BUS:%d \n",bus);
DbgPrint("DEV:%d \n",dev);
return TRUE;
return FALSE;}
然后进行IO读写就可以获取温度了,K8:
static once =1;
int bus,dev,
if ( !get_bus_dev(0x1103,&bus,&dev) )
DbgPrint("获取BUS、DEV失败! \n");
slot=DeviceSlot(dev,0x3); &//上面定义的宏
IO_ADDRE=GetDevice(bus,slot,0xE4);&&//上面定义的宏
_outpd(0xCF8,IO_ADDRE);//端口读写
CPUTemp=_inpd(0xCFC);//端口读写
CPUTemp=(CPUTemp&&16)&0xFF;
CPUTemp=CPUTemp - g_O//g_Offset为49-21
DbgPrint("CPUTemp: %d \n",CPUTemp);后使用快捷导航没有帐号?
查看: 3144|回复: 8
新换上的cpu,核心2要比核心1温度要高几度,正常不?
该用户从未签到
新换上的cpu,核心2要比核心1温度要高几度,正常不?卖家说是全新的,第一次寄来的CPU右边晶体是有明显磕碰带损伤,右边晶体表面有3倒裂纹。。。。这次换货来的右边的晶体上有一道裂纹,但是不明显。装上机器后。核心2比核心1始终要高6-7度左右,请问是裂纹的问题么?一般不都是核心1比核心2都差个1-2度么??反正我之前的I3 330是这样。之前330的时候是这样
换上460M后是这样
TM截图43.jpg (55.64 KB, 下载次数: 0)
17:44 上传
该用户从未签到
换460M性价比不如单核睿频更高的5系列。如果是C2步进,由于温度较高更无优势。
两核心温度差几度是正常的。不必担心。但是核心有裂纹,如果是我肯定不要的,谁知道哪天就压碎了。
该用户从未签到
jeff2229 发表于
换460M性价比不如单核睿频更高的5系列。如果是C2步进,由于温度较高更无优势。
两核心温度差几度是正常的 ...
TM截图26.jpg (78.13 KB, 下载次数: 0)
18:25 上传
版主你放大应该可以看到的,。有一条细小的类似玻璃的裂纹,(卖家说是擦除硅脂的时候刮出来的)
请问这两个散热晶片,左边的是核心1的?右边的核心2的?还是右边的是集成GPU的散热晶片?
该用户从未签到
boyvox 发表于
版主你放大应该可以看到的,。有一条细小的类似玻璃的裂纹,(卖家说是擦除硅脂的时候刮出来的)
看不出来是裂痕还是划痕。
由于Arrandale的cpu是32nm工艺,而北桥仍然是45nm,所以左边面积大的是北桥。
该用户从未签到
本帖最后由 boyvox 于
19:42 编辑
jeff2229 发表于
看不出来是裂痕还是划痕。
由于Arrandale的cpu是32nm工艺,而北桥仍然是45nm,所以左边面积大的是北桥 ...
那面积小的右边那个是什么?
该用户从未签到
boyvox 发表于
那面积小的右边那个是什么?
该用户从未签到
本帖最后由 boyvox 于
20:01 编辑
jeff2229 发表于
郁闷哦。刚才prime95压力测试10几分钟,最高100度。
用aida64烤机10几分钟。85度左右。。。。。
一般来说核心2应该不会比核心1高啊
该用户从未签到
boyvox 发表于
郁闷哦。刚才prime95压力测试10几分钟,最高100度。
用aida64烤机10几分钟。85度左右。。。。。
一般来 ...
有这说法?
你cpu步进是C2还是K0?
该用户从未签到
jeff2229 发表于
有这说法?
你cpu步进是C2还是K0?
17年3月精华宗师
17年3月精华大师
acer退市笔记本论坛
关注本友会
本友会微信公众号
VR微信公众号
benyouhui2012
Powered byCPU温度问题 核心温度很高
E3 1230 V2 &CPU 开了 一个虚拟机 3个游戏 使用率在40%左右 温度 就到了75度 满载的情况下 85度 是核心温度 但看到的 中央处理器温度 满载是65度 室温有28-30度吧 散热器是&安钛克铜虎c40如果这个温度 长时间开机 CPU是不是很快就坏了?
已有1个回答
内容为广告/垃圾,我要举报!
特聘专家具有协助内容审核的特权
举报后内容将不能在前台展示
错乱举报会导致该权利被剥夺
选择举报原因×
-0-这样的问题不会坏的。。。。。想降温的话。只能加机箱风扇了。推荐正压
留下你的评论
微信公众账号ZOL问答堂
关注微信,随时随地解答您的疑惑
ZOL问答堂官方微博@ZOL问答堂
关注成功!该问题被回答后,将给您发送站内短信。
您也可以通过关注问答堂微信,及时获得您关注问题的回答。
微信关注问题方法“”我想问下电脑cpu核心温度多少是正常的?_电脑网络问题_土巴兔问吧
我想问下电脑cpu核心温度多少是正常的?
报价结果将发送到您的手机
装修顾问-馨馨
4年行业经验,24h可咨询
10秒闪电通过好友
您的装修预算约
*装修管家将回电您,免费提供装修咨询服务
*装修管家将回电您,免费提供装修咨询服务
*因材料品牌及工程量不同,具体报价以量房实测为准
装修顾问 -馨馨
(四年装修行业经验)
微信扫一扫
我想问下电脑cpu核心温度多少是正常的?
提问者:梅睿范|
浏览:3606|
时间: 14:43:28
已有4条答案
回答数:4041|被采纳数:13
所有回答:&4041
笔记本的理想温度是高于环境温度30度左右,所以大家可以根据自己本本的使用环境进行判断。 && && && && && &&尽量把自己的笔记本CPU温度控制在75度以内,不要超过85度,注意:这里指的温度是笔记本CPU核心温度,也就是鲁大师检测 &&出来的CPU温度。
回答数:2800|被采纳数:1
所有回答:&2800
<p class="ask_one_p edit_、一般来说,待机时CPU核芯温度比环境温度高20度左右是正常的。
2、不同品牌和型号的CPU,不同的散热器搭配,导致不同的电脑待机温度会有些差异。并无绝对的标准。
3、大部分CPU设计时能承受长时间工作在90度左右的高温。短时间内极限温度可承受约110度的温度。而正常运行时,能稳定工作在70度左右。
4、待机温度在50度以下都是正常现象(环境温度在20度时)。
回答数:24951|被采纳数:63
所有回答:&24951
您好,保证在温升30度的范围内一般是稳定的。也就是说,cpu的耐收温度为65度,按夏天最高35度来计算,则允许cpu温升为30度。按此类推,如果你的环境温度现在是20度,cpu最好就不要超过50度。温度当然是越低越好。不管你超频到什么程度,都不要使你的cpu高过环境温度30度以上。不过这是台式机。如果是笔记本,在30度的环境里很容易就会超过60度,玩游戏80~90也很常见.
首先要注意的是,台式机和笔记本CPU的测温原理是不同的,一般来说,台式机CPU都是依靠CPU插槽附近的温感探头进行探测的,探测温度与核心实际温度有一定误差,所以,当你看到探测温度80摄氏度,其核心温度很可能就已经达到了90度甚至更高;而笔记本CPU的温度探测是采用热敏电阻完成的,其位置位于CPU封装位置下方,很接近CPU核心部分,其测量误差与台式机测量误差相比要小不少。
回答数:5484|被采纳数:0
单身狗s123_
所有回答:&5484
电脑cpu核心温度我觉得30摄氏度是比较好的,太高的话会出现卡顿,电脑就会很缓慢。所以保持通风是非常必要的,希望我的回答对你有所帮助
已有 3 个回答
已有 3 个回答
已有 4 个回答
已有 4 个回答
已有 3 个回答
位业主已在问吧找到答案
北欧简约、复古美式、大气欧式、清新地中海风,总有一款适合你!
一万套装修案例
下载土巴兔APP
中国装修网}

我要回帖

更多关于 cpu温度60度正常吗 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信