轻松读懂移动处理器 CPU微架构全解析
假设我们有这样的一段 C 代码:
int x,y ;
int z ;
x = 100 ;
y = x + 1 ;
z = 5 ;
由于 z 的初始化和赋值都是相对对立的,这里也许可以拆成两条 thread(线程):
thread #1:
int x,y ;
x = 100 ;
y = x + 1 ;
和 thread #2:
int z ;
z = 5 ;
如果处理器的微架构具备两种架构状态让操作系统认为有两个处理器的话,上面的两条 thread 就能同时执行了,这就是多线程。
多线程有三种类型,即 SMT、FGMT 和 CGMT,其中最早实现 SMT 的处理器是 Intel 的 Pentium 4,而 FGMT 大都在 in-order(相对于 OoOE)处理器上采用例如 Cell PPU 和所有的 GPU 上。
随着半导体工艺提升以及功率墙壁垒横亘在前面导致超级流水线提升频率和各种指令并行度措施不再灵光后(这些限制其实在 20 多年前就被处理器厂商和科研界预见到,例如 1993 年 DEC 西部研究院 David W.Wall)的论文《LIMITS OF INSTRUCTION-LEVEL PARALLELISM》,1993 年英特尔在路线图中明确提出在 P8(当时还是 P5 或者说 Pentium)时代引入多核处理器)厂商开始在片上实现多个内核,这也就出现了多核处理器。
多核处理器能让支持多线程的程序、操作系统跑得更快,但是目前大部分的应用通常更偏好于单线程性能出色的处理器,因此你会看到单线程性能较强的双核处理器比单线程性能较弱的多核处理器更快的情况发生。
到目前为止我们介绍了指令并行、线程并行的微架构实现,不过除了这两种并行技术外,还有另一种非常常见的并行技术:数据级并行化,通常以 SIMD 向量方式实现。