目录
在不支持硬件多线程的处理器中,若要进行线程的切换,就需要保存和恢复线程的运行环境(否则会出现数据覆盖引起的错误)。
但在支持硬件多线程的处理器中,设置了多个寄存器组,那么就可以将不同的线程放到不同的寄存器组中。线程1运行时使用线程1寄存器组的信息,线程2运行时使用线程2寄存器组的信息,这样就不需要保存和恢复线程的运行环境这一步骤了。
1.细粒度多线程
(1)细粒度多线程的各个时钟周期会轮流发射多个线程的指令
(2)由于每个时钟周期切换一次线程,线程的切换频率很快,所以称为细粒度多线程。
(3)线程切换代价较低。
(4)细粒度多线程中,指令级并行(多条指令并行执行),但是线程间不并行(同一时刻只有一个线程运行)。
2.粗粒度多线程
(1)连续几个时钟周期,都发射同一线程的指令序列,流水线阻塞时,切换另一个线程。
(2)只有流水线阻塞时才切换一次线程,切换频率较低,所以称为粗粒度多线程。
(3)线程切换代价较高,因为需要重载流水线。
(4)与细粒度多线程相同,指令级并行,但是线程间不并行。
3.同时多线程(SMT)
(1)一个时钟周期内同时发射多个线程的指令。
(2)同时多线程实现了指令级并行以及线程级并行,因为在同一时刻可以处理两个线程各自的指令。所以线程间是并行的,指令的执行也是并行的。
总结: