话说在前头,我个人也并不是非常深入了解超线程,不过高级抽象的工作原理我已经明白了,以下是我对于超线程技术的一些个人拙见,对于想要入门的计算机爱好者有一定的参考意义。(实际上,这篇出现的原因是英特尔和超威半导体两家cpu性价比的争论)本人初二,文采不好,理解了意思就行
先了解计算机的底层语言叫二进制操作码,这些操作码叫指令。
首先要了解超线程技术的大概原理,为了讲的通俗一点,我会用非常形象的话来解释。为了实际意义,因此我不仅只谈到超线程,还要提一下流水线和分支预测。
在讨论超线程技术之前,先了解一下cpu流水线,cpu流水线技术出现的很早,早在80年代英特尔就把流水线技术引进了x86架构的cpu。流水线技术,通俗的解释,也就是将程序里的多条指令(可以理解为底层代码)拆分为多步,并且将这些【底层代码】的各部操作重叠,让指令能够并行处理,执行完第一步,就进入下一步,如同工厂自动化加工或拆解一样,因此得名 流水线 技术,拆分的部分越多,流水线就越深,工作频率也就越高。
然后再说说分支预测,在没有分支预测的时代,当流水线碰到了分支指令(如果xxx,那么xxx,如果不是就xxx),他就要停下流水线,判断条件是否达成,然后等到xxx到达流水线的时候才进行操作,这就使得在cpu的执行效率变慢了,在过去那个单核和长制程的时代,频率和效率才是王道,落后的cpu总得被打败。
分支预测就是在遇到分支指令(If then else)的时候,对程序的下一步操作进行预测,从而达到提升性能的目的,我们可以理解为,在一个关闭的岔路口,一名交通人员看到一辆车开过来,如果按照传统的方法,他需要让司机停下,问他开往哪边,然后给司机开相应的路,显然,在司机告诉交通人员方向之前,门不能开。
所以交通人员学聪明了,现在有2条岔路,当交通人员看到车过来的时候,他大胆的开了一个岔路,然后等待车开过来,在这种情况下,有50%的几率猜对,这叫静态分支预测(无脑二选一)。交通人员还有另一个方法,那就是判断,如果开过来的车经常走第x条,那么交通人员又看到这辆车的时候就会给他开x路,这种预测叫动态分支预测。
(相信我这叫静态分支预测)
现代的cpu用的都是动态预测,并且归功于cpu架构的不断升级,因此猜测能力达到大概90%正确率。但是,如果细心的人就会发现,这其实是冒险性的,如果司机的方向和之前突然不同了,那么他开过去就会撞上,然后死掉。 不过在cpu里没有车,所以当预测失败的时候,他就要清空之后的流水线执行结果,然后回到分支的地方选择路线。
接下来就开始讲超线程了,如果不了解分支预测和流水线,那么超线程就不好理解。超线程技术,可以理解为是cpu核心并行处理能力的提升。我们现在通俗的把核心理解为一个高速生产产品的工厂,超线程也就是给工厂多添置了一套设备,让一个工厂同时做n样订单,当一个订单还没下达的时候,工厂就去执行另外一个订单的任务,因此称之为超线程。
现在我们来看看一些叫的很凶的框框党,他们说核心超线程框框数的很爽,在他们那里似乎超线程就是一个核心翻倍成两个核心一般,事实真的如此吗?
还是那个高速工厂,假如来了个订单是加热食物,另外一个订单也是加热食物,那么工厂为了节省成本,当然是不会买两个微波炉的阿,显然是两个订单共同用一个微波炉。 在cpu里体现为:n个线程用同一个计算单元,用同一个缓存。现在有个问题,如果两个订单是同时过来的,为了保证工厂的正常流程,当然是得先加热一个订单的食物,加热完再加热另外一个订单的食物了。
所以,超线程技术≠翻倍核心。但对于下达订单的客户(软件,系统)来说,他并不想了解工厂内部是怎么同时执行两个订单的,因此他把一个工厂当做两个独立工厂看待,因此在windows的任务管理器中,这些线程被称之为逻辑核心。
现在我们来讨论一个严重的问题,如果一个订单下来了,并且在工厂内部流水线中经过各种骚操作后,分支预测失败了怎么办????这就很尴尬了,cpu把流水线停掉,把流水线上正在加工的和流水线输出的丢掉,然后重新老老实实再加工一遍,这就导致了效率的降低,有了超线程后,性能变弱的惩罚更加明显。
来看一些被鞭尸的例子,奔腾4至尊和amd打桩机推土机fx-xxxx,一个用上了30级流水线,一个用上了20级流水线,结果都成了高频低能的典型例子。
根据上面的一系列说明,可以看出现代cpu的处理技术并不是完美的。不同的cpu在一些场景下,以上提到技术可以带来的性能差距也不同,例如并行处理指令的时候,有超线程的cpu会比没有带超线程的cpu强,提升大约在10%-30%之间,绝大多数时候,超线程的提升都无法达到30%。
现在我们回到开头讨论关于AMD比英特尔同价位多出一倍框框的问题,截止至这篇文章发布,amd的cpu即使多了超线程,在一些场景也不如英特尔,虽然有超线程的加持,但zen 和coffee lake架构的差距不止10%,因此,在一些场景下,带超线程的锐龙cpu可能不如 不带超线程的英特尔cpu,显而易见,在大量并行处理任务的场景下,同价位锐龙对酷睿的性能差距绝对是碾压级的,但在大量处理复杂任务,并且用的只是单核的时候,同价位酷睿和锐龙的差距也绝对是碾压的。
其实本来只是要讨论锐龙和酷睿超线程的问题而已,结果涉及的内容太多了哈哈,在这里,我说一些简单的建议。
1.打单核游戏并且对帧数要求高,intel cpu很有必要。(在这个游戏没有优化立场[a黑,i黑]的前提下)
2.多核多线程软件(如Adobe)重度患者(恰饭为生),并且不高强度游戏的前提下,6核/8核以上的锐龙cpu可以考虑(用考虑这个词的原因是因为,锐龙架构和酷睿还有一些差距,在高频率需求的软件下,锐龙相比同价位的酷睿cpu很吃亏,这也是为什么amd开放全民超频[反正你也超不了多少])。 如果是专业人士,并且对综合性能要求严格,并且在预算充裕的情况下,最好上八/九代酷睿i7/i9或最近几年发布的新至强cpu。(E5,E7洋垃圾频率低,在高频并行场景下不如锐龙)
感谢看到这里,请关注,点赞,收藏支持我
BiliBili: MineVader
QQ交流群:671087966
,