超线程CPU是否实现并行性,还是只有并发性(上下文切换)?
我猜测是没有并行性,只有通过上下文切换的并发性。
超线程CPU是否实现并行性,还是只有并发性(上下文切换)?
我猜测是没有并行性,只有通过上下文切换的并发性。
超线程技术(Hyper Threading technology)使单个物理处理器看起来像是多个逻辑处理器。每个逻辑处理器都有一份体系结构状态,这些处理器共享单个物理执行资源。从软件或架构角度来看,这意味着操作系统和用户程序可以将进程或线程调度到逻辑处理器上,就像在多处理器系统中的传统物理处理器上一样。从微架构角度来看,这意味着来自逻辑处理器的指令将持久存在并同时在共享执行资源上执行,这可以极大地提高处理器资源利用率。Netburst 微架构上的超线程技术实现每个物理处理器上拥有两个逻辑处理器。图1展示了具有超线程技术功能的处理器的概念视图。每个逻辑处理器都维护着一套完整的体系结构状态,这些状态包括通用寄存器、控制寄存器、高级可编程中断控制器(APIC)和一些用于机器状态的寄存器。从软件角度来看,重复的体系结构状态使每个物理处理器看起来像是两个处理器。每个逻辑处理器都有自己的中断控制器或 APIC,只处理发送到其特定逻辑处理器的中断。
注意:对于使用超标量核(即每个周期可以发出多个操作)的同时多线程处理,执行过程会有显著不同。
没有超线程硬件,我们可以有并发,只要确实有多个可以同时执行的任务。如何做到?采取可以安全并发执行的进程P1和P2,并取一个核心(称为C)。P1在C上运行1个时间量子,然后P2在C上运行另一个时间量子,接着P1在C上运行下一个时间量子,依此类推。
只有一个核心C - 没有超线程 - 我们就有了P1和P2的并发执行。
没有超线程硬件,我们可以有并行,如果有一个可以并行执行的任务,并且我们有多个核心来确实并行运行该任务。以Mapreduce的映射部分为例。
假设您有两个文本文件要读取,已经启动了两个映射器,并且有两个非超线程物理核心。在这种情况下,您可以(而且可能会)在没有任何超线程的情况下并行运行映射器。每个映射器将从自己的文本文件中读取,将在自己的核心上运行,并生成自己的映射输出。
有2个核心 - 没有超线程 - 我们就有了一个任务的并行执行。
结论:超线程是一种硬件改进,可以成功地与并行和并发分离。
1通过减少需要复制的数据量以有效执行上下文切换。
2 它最初于2002年2月出现在Xeon服务器处理器上,并于2002年11月在Pentium 4台式机CPU上出现。
*一篇关于并行和并发的好回答指出,"并发"就像一个杂耍者在玩许多球。不论看上去怎样,杂耍者每次只能接住/扔出一个球。"并行"是指多个杂耍者同时玩多个球。