CPU的奥秘到底是什么(计算机)
运行速度的提升是提高CPU性能的最重要途径之一,以英特尔的CPU为例,从1993年的Pentium 60MHz至2002年11月推出的Pentium 4 3。06GHz,在不到10年内运行速度提高了50倍。 除了更高的运行速度和全新的CPU架构,CPU的研发者还在CPU中应用了其他多种能提高CPU性能的技术。英特尔在其Pentium 4 3。06GHz处理器上,就采用了一项全新的能够大幅度提高CPU性能的技术-英特尔超线程技术(Hyper-Threading Technology)。
去年,我们曾经在“专题测试”栏目中介绍过双CPU电脑的强劲性能(本刊,2002年2月,第60页),而...全部
运行速度的提升是提高CPU性能的最重要途径之一,以英特尔的CPU为例,从1993年的Pentium 60MHz至2002年11月推出的Pentium 4 3。06GHz,在不到10年内运行速度提高了50倍。
除了更高的运行速度和全新的CPU架构,CPU的研发者还在CPU中应用了其他多种能提高CPU性能的技术。英特尔在其Pentium 4 3。06GHz处理器上,就采用了一项全新的能够大幅度提高CPU性能的技术-英特尔超线程技术(Hyper-Threading Technology)。
去年,我们曾经在“专题测试”栏目中介绍过双CPU电脑的强劲性能(本刊,2002年2月,第60页),而在本文中我们将看到:英特尔是如何应用超线程技术让一个物理CPU在实际应用中表现为两个逻辑CPU,从而充分利用一个CPU芯片的运算资源大幅度提高CPU性能。
此外,通过对英特尔超线程技术的分析,还将让我们很好地了解应用软件在现代CPU中是如何运行的。
超线程技术与关键词
以下我们先对贯穿本文的一些关键词进行简单的介绍:
并行运算(Concurrency):即电脑同时执行多项结构不同的运算处理。
并行运算可出现在同一个应用中的多任务过程,或多个应用中的多任务过程。例如在同一时刻进行计算、硬盘访问和网络访问。
多处理器(Multi-processor):在一台电脑的系统总线上包含不只一个CPU。
对于多CPU电脑系统,操作系统必须能检测到不只有一个CPU存在,才能发挥多CPU的作用。
线程(Thread):线程是在一个程序中可被独立运算处理的那部分程序,它可以和其他部分程序在同一时刻被运算处理。
一个线程与一个完整的运算处理过程或应用(多线程应用)通常存在着多对一的关系。
英特尔NetBurst微架构:英特尔应用于其Pentium 4的CPU芯片架构。
英特尔超线程技术(Hyper-Threading Technology):在一个CPU中增加电路,让它以两个逻辑CPU的形式出现。
其结果是:物理上的一个CPU,在操作系统和多线程应用中以两个逻辑CPU的形式表现出来,每个逻辑CPU可以执行多线程应用中的一个线程。超线程技术让单个CPU可以如同两个CPU那样并行处理数据指令,而不是如常规单CPU系统那样一次只能处理一条数据指令,超线程设计提高了系统的性能和效率。
线程的执行(Execution of Threads):遇到多线程应用程序,操作系统会将要执行的线程安排给多CPU电脑系统中的每个CPU进行运算处理。如果操作系统检测到电脑中含有超线程技术的CPU,它会将线程安排给每个逻辑CPU和物理CPU。
英特尔超线程技术
运行环境的比较-单CPU电脑
在一个常规的单CPU电脑系统中,尽管多个应用程序可以和操作系统共驻于内存之中,但在每一时刻只有一个应用程序可以利用CPU的运算资源,各个应用
软件中的程序编码排队等待CPU的执行处理。
下图为应用软件的线程编码在常规单CPU电脑上的执行情况的三个示意图。在每个示意图中,左边部分示意了CPU正在
处理(图中彩色部分)和等待CPU处理(图中深灰色部分)的应用,右边的部分示意了线程编码在CPU上的执行情况(彩色部分代表CPU正运算处理的过程)。
运行环境的比较-双普通CPU电脑
对于双CPU电脑,多线程编码可以在两个CPU上同时执行,两个应用程序可以同时应用CPU的运算资源。两条编码可以在两条
并行的路径上同时连续执行,这大大提高了系统总运算处理能力,但专门为个人用户所设计的双CPU电脑系统并不多见。
下
图为应用软件的线程编码在常规双CPU电脑上的执行情况的三个示意图。
运行环境的比较-单个拥有超线程技术CPU的电脑
当一个CPU被检测出是一个拥有超线程技术的CPU的时候,操作系统可以对那些等待运算处理的线程进行调度,将线程安排给每一个逻辑CPU,就如同在双CPU系
统上那样。
对于应用了超线程技术的CPU系统,两个线程的编码可以在同一时刻在一个CPU上被执行处理,这就让多个应用程序可以同时利用CPU资源,因此拥有超
叱碳际CPU的系统的用户不必再添加第二颗CPU就可以获得性能的提升。
下图为应用软件的线程编码在单个拥有超线程技术CPU电脑上的执行情况的三个示意图。
运行环境的比较-单个拥有超线程技术CPU的电脑
当一个CPU被检测出是一个拥有超线程技术的CPU的时候,操作系统可以对那些等待运算处理的线程进行调度,将线程安排给每一个逻辑CPU,就如同在双CPU系
统上那样。
对于应用了超线程技术的CPU系统,两个线程的编码可以在同一时刻在一个CPU上被执行处理,这就让多个应用程序可以同时利用CPU资源,因此拥有超
叱碳际CPU的系统的用户不必再添加第二颗CPU就可以获得性能的提升。
下图为应用软件的线程编码在单个拥有超线程技术CPU电脑上的执行情况的三个示意图。
超线程技术
目前许多操作系统和电脑应用程序(如互动游戏等)是多线程设计的,它们可通过多CPU系统来获得更好的运行性能。
在这些系统中,不同的CPU并行对编码进行处理运算。
在应用了英特尔的超线程技术后,一颗拥有超线程技术的CPU可以同时处理两个线程的编码,提高了多线程编码在单个CPU上的性能。
CPU资源的应用
英特尔的超线程技术提高了多线程应用软件的运行性能,这种提高是通过对具有英特尔NetBurst微架构的芯片资源的有效利用来达到的。
一条基于英特尔IA32常规混合指令集的普通线程编码,通常只能利用了大约35%的英特尔NetBurst微架构处理资源。为了同时控制和调度两条线程编码,通过在CPU芯片上加入必要的逻辑和资源控制器,超线程技术让那些没有充分利用的资源可被用于第二个线程的编码处理,提高了CPU的总运算处理性能和电脑系统的总性能。
超线程技术在一个单芯片封装中提供了第二个逻辑CPU(两个逻辑CPU的运行频率和物理CPU的运行频率相同),以此来提高CPU的运算处理性能。而对于含有多个拥有超线程技术CPU的系统则可以获得更高性能的提升。
超线程技术的工作原理
多线程应用
事实上,所有现代的操作系统(如Microsoft Windows和Linux)将它们的运算处理任务分为进程(processes)和线程(threads),这些进程和线程可被独立地调度和分派给CPU进行运算处理。
许多高性能应用诸如数据库处理引擎、科学计算程序、工程工作站工具、多媒体应用和大型图像处理、网络游戏中的部分运算处理过程,使用CPU内的同一部分运算资源进行运算处理。
为了提高CPU的运算处理性能,软件开发者将这些程序设计成可以在双CPU(DP,dual-processor)或多CPU(MP,multiprocessor)环境下运行。
进程和线程可以在好几个物理CPU中被调度和分派。
对于多线程应用,来源于几个不同线程的指令可被几个CPU同时处理。而对于拥有超线程技术的CPU,一个CPU可以同时执行处理两个线程,超线程技术通过无序调度让CPU中的那些运算功能单元在每个一个运行周期中尽可能多地处于工作状态。
英特尔NetBurst微架构运算处理管线
如果没有应用超线程计算技术,NetBurst微架构在其运算处理管线中只能处理单条线程(右图中,运算处理管线为单一颜色示意只处理一条线程),而基于常规混合指令集的普通线程编码只能利用35%的NetBurst微架构的运算资源。
拥有超线程技术的英特尔NetBurst微架构运算管线
英特尔超线程技术通过复制、划分、共享NetBurst微架构的资源让一个物理CPU中具有两个逻辑CPU。
资源的复制为两条线程提供必要的运算资源,资源的划分将运算资源划分给正在运算的不同线程,资源共享利用相同的资源同时运算处理两个线程。
对于拥有超线程技术的英特尔NetBurst微架构运算管线,每一部分的运算处理资源可以被复制、划分、共享来执行运算处理管线上的两个线程。在左图中,运算处理管线为两种颜色示意同一条运算处理管线可以同时处理两条线程。
英特尔NetBurst微架构管线
当CPU微架构对通过其运算管线的编码进行处理时,CPU中的每个运算处理功能单元在不同的位置对编码进行调度选择。
当每条线程通过运算管线时,CPU处于运算管线不同位置的选择指针(上图中的彩色圆点示意了CPU中的选择指针)决定在下一个管线中将利用哪个逻辑运算处理单元的资源,选择指针选择一个逻辑运算处理单元的运算结果并将其输入到下一步的运算处理管线中。
任务的调度
操作系统将线程编码调度到每个CPU。当一个线程没有被调度时,相关的逻辑CPU处于闲置状态。
当一条线程被调度到一个逻辑CPU(LP0)上时,超线程技术动用必要的CPU资源来执行这条线程。
当第二条线程被调度到另一个逻辑CPU(LP1)上时,运算资源将被复制、划分、共享来处理第二条线程。当每条线程完成后,操作系统将没用的逻辑CPU闲置,释放出运算处理资源。
为了对拥有超线程技术的多CPU系统进行性能优化,操作系统必须在将线程优先调度到不同的实物CPU上,然后再考虑不同的逻辑CPU。
下图通过CPU架构示意图上的颜色示意CPU对线程的运算。超线程技术通过对英特尔NetBurst微架构管线上的运算资源进行复制、划分、共享,在一个物理CPU上提供两个了逻辑CPU。操作系统将线程调度到每个逻辑CPU上,就如同在双CPU或多CPU系统上。
当系统将进程调度和安排到运算管线中时,必要的资源被用于进行两条进程运算处理。CPU中的运算处理功能单元在管线的一定位置对线程进行选择和处理。
。收起