为什么英特尔的下一代处理器取消了超线程?
超线程这东西,其实没啥
它从出生那天起,就是拿空闲时间换吞吐。
你回想一下奔腾4那个年代,主频拉得老高,甚至冲到了3.8GHz,也就是那时候,英特尔发现了一件很尴尬的事:CPU跑得太快,数据喂不进去。
CPU内部的执行单元就像个快得要命的厨子,但洗菜切菜的帮工(内存延迟、分支预测失败)太慢了。厨子切完一刀,得等半天下一根黄瓜。这这时候怎么办?英特尔想了个招,给这个厨子再接一个单,让他等待的时候顺手切别人家的菜。
这就是超线程。它本质上是利用了CPU内部『闲着也是闲着』的那些资源。
以前觉得它香,是因为那会儿大家都穷,核心数少。双核模拟四核,看着任务管理器里多了两个框,心里觉得赚到了。
但现在情况变了。
英特尔现在的P-Core(大核)壮得像头牛,单核性能极强。为了支持超线程,大核内部必须保留一套复杂的寄存器状态表和调度逻辑。这就好比为了让厨子偶尔能切两家菜,你得把厨房扩建一圈,还得给他配个更复杂的菜单系统。
但这部分电路本身是要吃电的,而且占地盘。
更有意思的是账面算不过来。根据英特尔现在的架构(比如Lion Cove),把超线程那部分电路砍掉,省下来的芯片面积和功耗预算,甚至够再塞进去一两个E-Core(小核)了。
你想想看,是一个『模拟出来的假核心』强,还是一个『实实在在的物理小核』强?
现在的E-Core(特别是Skymont这一代)早就不是当年的『原子级』弱鸡了,它们的性能甚至能摸到几年前主力大核的屁股。
这时候如果还留着超线程,简直就是占着茅坑不拉屎。
还有一个很多人没注意到的细节:调度。
Windows的任务调度器其实很头大。它面对一堆核心,还得费劲去猜哪个是真核,哪个是虚出来的超线程。要是把游戏这种重负载扔到了超线程那个『虚核』上,和大核原本的任务抢资源,画面马上就开始卡顿掉帧。
以前为了解决这个问题,微软和英特尔没少打补丁,搞什么Thread Director,这其实都是在给超线程这种『原本不完美』的架构擦屁股。
而且,超线程还是安全漏洞的重灾区。那些侧信道攻击(什么Spectre之类的),很多都是盯着超线程共享缓存这块肉下嘴的。为了堵这些洞,最后往往要牺牲性能,这就很搞笑了——为了提升20%的理论多线程性能,结果打完补丁又吐回去10%,还要承担安全风险。
更准确的说法是,超线程已经不再是默认正确。
在核心稀缺的年代,它是救命的。
在大核加小核的时代,它开始变得挑场景。
大核就负责单线程冲锋,要多猛有多猛,不需要为了照顾『分身』而畏手畏脚;多线程的任务,直接扔给那一堆小核去堆数量。
这才是正常的逻辑。
说白了,以前用超线程,是因为造不出那么多真核心,只能想办法压榨单核的剩余价值。现在晶体管数量都多到这种程度了,还去抠那点边角料,没必要。
更准确的说法是,超线程已经不再是默认正确。
在核心稀缺的年代,它是救命的,在大核加小核的时代,它开始变得挑场景。
今天继续留着超线程,没有错;直接砍掉,也说得通。
但它不再是必须供着的东西了,只是工具箱里的一把旧工具,用不用,得看你在修什么。