该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
我对超线程的理解:
cpu里有两种东西:累加器和寄存器,累加器是负责运算的,他没有名字,理论上可以多塞,也可以少塞,寄存器是超快速内存,寄存器数量大小是固定的,每个寄存器都是有名字的,x86大约有80个寄存器左右(记不清了,为表达方便,下文认为就是80个),80个是一个核有80个,四核就是320,cpu还叫x86,那就不能变多,我们把默认一个核的累加器/寄存器比例(以下简称累寄比)当做1
有的程序对累加器需求特别大,也就是它需要累寄比大于1,大到了极致就是显卡
如果程序对寄存器需求特别大,(现在常用软件不会特别大,但基本都会大一点),但是,前面说过,寄存器是有名字的,如果加寄存器,那就成无偿劳动了,老板的花名册里没有你,你拿不到工资
解决方案1,不是单核寄存器不够吗,换双核,但晶体管需要钱啊
解决方案2,出个x87构架,想怎么加就怎么加,很明显不现实
解决方法3,用超线程,每个核里塞两倍寄存器,一倍累加器,然后把一个核模拟成两个核,问题解决了
真的解决了吗,如果一个电脑上运行的程序都是对寄存器需求特别大的,那这方案很好,甚至能达到一个支持超线程的核顶两个不支持的核用
但是,现在人均4核,有多少游戏能喂饱9100f?,确实有的软件需要一份累加器两份寄存器,但是9100f有四份寄存器四份累加器
那不就是浪费了吗,我不差超线程那点钱
更可怕的来了,系统是不会把超线程模拟出来的核区别对待的(技术上能,但微软就是没做),也就是一个四核8线的cpu在系统眼里是一个8核8线的,加入有一个对多线程支持特别不好的软件,他只支持两线程,在一个四核四线的cpu上,他的两个线程被分到任意两个核上,任何时候他都有两份寄存器两份累加器,但在一个四核8线的cpu上,他可能被分到一个核的两个线程上,那他只有一份累加器两份寄存器超线程此时变成了debuff
结论:如果关掉超线程,cpu能跑满大半,那超线程是buff,如果关掉超线程,cpu连一小半都到不了,那超线程基本是debuff
不知道我理解的对不对,欢迎大佬指正