CPU hyper thread
CPU超线程技术,可以理解为让一个CPU核心在一个时钟周期内可以执行多条指令的技术。
CPU发展的阶段经历了:单核,多核,超线程。
- 单核
CPU只有一个物理核心,此时决定CPU在单位时间内能处理多少条指令的因素是CPU核心的工作频率。工作频率越高,执行指令的速度就越快,CPU的性能就越强。CPU的工作频率从几十兆赫兹不断提高,最后提高到1千兆赫兹左右。 - 多核
CPU工作频率的提升伴随着CPU温度的不断提升。随着CPU工作频率的提升难度越来越大,开始出现了把两个或者多个物理核心封装成一颗CPU,这个就是多核CPU。多核CPU可以在同一时刻处理多条指令,CPU整体的性能就得到了很大提升。 - 超线程
超线程技术,是在多核CPU之后的又一种提升CPU性能的技术。它的实现既有CPU硬件封装技术的变化,也有CPU指令执行调度的改进,使一个CPU的物理核心在同一时刻也可以执行多条指令。
CPU的物理核心可以认为是由读取部分和执行部分组成的,执行部分比较复杂,一个执行部分是由多种运算法则的计算单元组成。常规CPU的读取部分和执行部分是一对一的。
支持超线程技术的CPU一个物理核心里包含执行部分和多个读取部分,读取部分和执行部分是一对多的。
以一个处理的场景来对比下两种CPU的工作方式:
假设有两个线程,线程A和线程B。线程A要执行一条加法的指令,线程B要执行一条减法的指令。
传统CPU先用读取器1读取线程A的指令,然后交给执行器里负责加法运算的计算单元执行,执行完成后再读取线程B的指令,然后交给执行器里负责减法运算的单元执行。
超线程CPU可以在读取器1读取线程A的加法指令交给执行器里的加法计算单元计算的同时用读取器2读取线程B的减法指令交给执行器里的减计算单元计算,也就是在同一时刻执行了线程A和线程B里的指令,同时进行了两个线程的计算。这样就相当于有两个CPU内核在工作。
要是线程A和线程B执行的指令需要用到同样计算单元,或者是线程B的指令需要线程A的指令的计算结果时,即使是超线程CPU也无法同时执行线程A和线程B的指令,只能顺序执行。
通过上面例子可以看出,在多个线程要执行的指令符合超线程的工作条件的前提下,超线程CPU的性能接近于多核,反之,超线程CPU就是单核。
那么,多线程技术的效果实际上取决于对指令的排列顺序。在通常的CPU上这是取决于当前执行的程序,而为了提升CPU的性能以intel为首的CPU巨头使用了一个叫做指令预测和乱序的技术。通过数学逻辑上的优化可以相当程度的重排CPU指令顺序这样就能有效的避免指令2等待指令1的悲剧,性能也就提升了不少。