读书时候写的一篇笔记,整理下丢上来。
关键字:super scalar、temporal multithreading、simultaneous multithreading、CMP、super-threading、hyper-threading、SMP、UMA、NUMA、SIMD、SISD、MIMD,MISD,EPIC,VLIW
CPU的并行主要有两种方式:指令级并行(ILP)和线程级并行(TLP)。
指令级并行
指令级并行主要通过Super scalar(超标量)实现。它是一种cpu的结构形式,cpu含有多个运算单元,从而可以在同一时钟周期执行多于一条的指令。
注意:虽然super scalar的处理器通常是pipelined的,但super scalar和pipeline是两种独立的提升cpu性能的技术,理论上可以有super scalar的非pipelined的cpu,反之亦然。另外,super scalar可以使cpu同时执行多条指令,但同时执行多条指令的不一定就是super scalar。pipeline、多处理器、多核结构都能做到这点。
顺便提一下scalar processor,与之对应的是vector processor,前者指一条指令只处理一到两个数据单元,后者则可以一条指令同时处理多个数据单元。Super scalar则是这两者的一种混合。
线程级并行
多线程(multithreading)的实现分为三类:Temporal multithreading(也叫Interleaved multithreading?)、Simultaneous multithreading和Chip-level multiprocessing(CMP)。前两者的区别是在某一个时钟周期,任意给定的流水级上同时执行的线程数量,前者为1,后者大于1。CMP则是在一个芯片中集成两个或以上的super scalar处理器,每个处理器独立执行线程。
Temporal multithreading主要分为两类:coarse-grain(粗粒度)和fine-grain(细粒度),前者指cpu流水线(各级)同时只承载一个线程的运行,由一个算法实现上下文切换,保证效率和公平性等;后者指cpu流水线各级同时承载多个线程运行,在流水级之间有效率地完成上下文切换。看wiki的意思,似乎是说后者的上下文切换比较有效率(不知道为啥),但后者得让各个流水级同时保持不同线程的状态,而且为了保证正在执行的线程的读写稳定,难以对“后台”线程进行优化。
Simultaneous multithreading(即所谓的SMT),为了实现SMT,主要是需要实现一个cycle中fetch多个线程的指令,并且要有足够数量的寄存器保存各线程的状态。因此,实现SMT的CPU一定是super scalar的。
Super-Threading:Intel在Pentium上的一个tempporal multithreading实现。
Hyper-Threading:官方叫法是Hyper-Threading Technology(HTT),是Intel在Pentium4、Xeon "Foster"上面的一个SMT实现。使用了HTT的P4在OS看来就如同一个双处理器系统一样(A Pentium 4 with Hyper-Threading enabled is treated by the operating system as two processors instead of one.)。
参考文献
Hyper-threading、super threading、super scalar、temporal multithreading、simultaneous multithreading、CMP、Xeon的wiki页面
《Introduction to Multithreading, Superthreading and Hyperthreading》