我最近写了一些 Java 代码来生成曼德布洛特集(分形)的图像。我利用 Java 7 中新的 Fork/Join 功能同时在所有四个内核(2 个真实内核,2 个虚拟内核)上运行单独的线程,并使用大量迭代来提高准确性。问题是,这个过程运行良好大约一分钟,然后就好像有人拔掉了电源插头,电脑就死机了。
我认为一定是 CPU 过热了,所以我运行了 Real Temp 来监控温度。这是英特尔 i3 处理器。我可以看到温度上升到 70 度,然后它似乎在那里稳定下来,又运行了大约 30 秒,然后就死机了。根据 Real Temp,实际温度和 TJ 最大值之间仍有 35 度的差距。我还尝试在 BIOS 中禁用“CPU TM 功能”,但问题仍然存在。
一位同事说可能是电源问题,所以我借了一个更强大的电源(不记得功率是多少,但比我的高,是 500W)。但还是发生了同样的事情。
有人能指出问题可能出在哪里,或者我下一步可以尝试什么吗?
编辑:
感谢大家的回答和评论。正如@Anish A 在下面所建议的那样,我在 BIOS 中找到了更改触发自动关机的温度的设置。该设置被设置为 70 度。我将其增加到 75 度,现在我可以在所有“四个”核心都达到 100% 的情况下愉快地运行我的程序。Real Temp 报告称温度一度高达 73 度,但大部分时间都保持在 70 度左右。所以我猜这个 BIOS 设置与处理器本身以及 Real Temp 报告的 TJ 最大温度完全无关。
答案1
这是冷却风扇的问题。使用更好的冷却风扇,如果可能的话,还可以尝试水冷。
一个带有散热器的良好冷却风扇将解决这个问题。
另外,尝试在 BIOS 中启用 CPU Thermal Throttling 选项。如果温度超过限制,它将降低 CPU 的时钟频率。
另外,尝试从 BIOS 中增加 CPU 温度关机温度。但是,不要增加太多,因为这会缩短处理器的使用寿命。
答案2
实际温度与TJ max之间仍有35度的差距
忽略报告的温度,唯一重要的是“与 TJmax 的距离” - 这是 CPU 报告的内容(DTS),也是 CPU 用来控制热保护机制的内容。
这是我将设置中核心 0 的 TjMax 从 99 更改为 70 后 RealTemp 显示的内容。
在核心 0 的温度显示与其他核心的温度大致相同之前,到 TJ Max 的距离不受此配置更改的影响 - 因此,这令我满意地证明到 Tjmax 的距离是实际温度从 CPU 获取的值,而温度是基于 TjMax 的配置进行猜测。
因此,如果 CPU 认为 DTS 是 35 C,则 CPU 过热没有问题。
就好像有人拔掉了电源插头,电脑就死机了。
这难道不是更能说明 PSU 存在问题吗?
一个旧英特尔文档说
引入了一种新的热保护机制,允许处理器在达到灾难性关机温度之前自动控制处理器温度,但代价是暂时降低处理器性能。当前的 IA-32 处理器使用内部电路定期停止大部分处理器的内部时钟。调制期间的所有中断都会延迟但不会丢失。处理器时间戳计数器即使在处理器调制期间也会继续保持计数。调制持续时间通常为 1 毫秒间隔。在每个间隔结束时,处理器将再次以全频运行。如果温度仍然高于第二个预设温度水平,处理器将再次调制内部时钟。如果温度降至第二个预设水平以下,处理器将继续以其正常时钟频率运行。有效处理器性能约为全性能的 50%。请注意,调制处理器性能的方法不是架构指定的,并且在未来的处理器中可能会发生变化。
当处理器温度监控传感器检测到处理器已达到其最大安全工作温度时,PROCHOT# 变为活动状态。这表明处理器热控制电路已激活(如果已启用)。此信号也可以驱动到处理器以激活热控制电路。此信号没有片上终端,必须在系统板上终止。
因此,核心 i5/i7 仍然具有 TCC 触发(我猜是通过 DTS),方式与旧款英特尔 CPU 设计相同。
我认为“如果启用”意味着 TCC 可以通过 BIOS(或其他)设置禁用。您可以检查 BIOS 设置中的 CPU 热控制。
热跳闸:处理器使用内部热传感器保护自身免遭灾难性过热。该传感器的设置远高于正常工作温度,以确保不会发生误跳闸。当结温超过约 125 °C 时,处理器将停止所有执行。THERMTRIP# 引脚会向系统发出信号。
我认为主板制造商可以使用 CPU 的 #PROCHOT 信号完全关闭系统,但这样做还为时过早。因此,我认为 CPU 逐渐过热的症状首先是 CPU 降速到可以察觉的程度。
总而言之,您所报告的情况与我对 CPU 热关机的预期不一致。首先,DTS > 0,其次,CPU 性能没有明显下降。最后,“就像有人拔掉了插头一样”(如果您的意思是,就像有人真的从墙上的电源插座上拔掉了电源插头一样)。
CPUID 的 HWmonitor 显示的信息比 RealTemp 多,包括 GPU 和 HDD 温度 - 可能有用