Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1736484
  • 博文数量: 438
  • 博客积分: 9799
  • 博客等级: 中将
  • 技术积分: 6092
  • 用 户 组: 普通用户
  • 注册时间: 2012-03-25 17:25
文章分类

全部博文(438)

文章存档

2019年(1)

2013年(8)

2012年(429)

分类: 服务器与存储

2012-03-26 09:05:54

CPU的基本架构 (Basic CPU Architecture)

 

CPU(Central Processing Units)其实是一个复杂的包含多个子组件的系统.

Compent Use
ALU Arithmetic Logical Unit: Perform integer math and conditionals
FPU Floating Point Unit: floating point operations
Load Reads from memory into register
Store Writes to memory from register
Prefetch/Decoder Instruction prefetch from memory, and decode into micor-ops
Scheduler Schedules instructions on other components

 

ALU处理整型运算和逻辑运算,是CPU里最重要的组件。因为ALU最常被使用,一般CPU里会有两个ALU;

FPU处理浮点数运算。因为更昂贵,所以CPU一般只有一个FPU;

Load从内存中读取数据;

Store向内存中写入数据;

Prefetch/Decoder可以从内存中取指令,并解释为可执行的微指令(micro-ops);

Scheduler负责调度指令,把指令发送给执行该指令的组件。

 

CPU对指令的操作流程为:

Fetch -> Decode -> Execute -> Memory -> Write

 

其实哪怕是单个CPU也存在并行。因为各个组件是独立的,所以每个组件在完成前一指令的“加工”后,可以开始“加工”下一个 指令。比如Fetch从内存中取出指令交给Decode去解析后,就可以开始从内存取出下一条指令。这就是Pipelining,类似于流水线。

 

超线程技术(HyperThreading)

为了解决单个CPU效率低下的问题,有人提出超线程技术的解决方案。其实就是在原有基础上,加入另外的寄存器组。这样的好处是CPU可以同时指行多条指 令。比如FPU使用一组寄存器进行浮点运算而同时ALU使用另一组寄存器进行整型运算。使用超线程技术时也可能同时会相应地增加ALU的数量。

 

尽管这样可以达到一定程度上的并行,但ALU,FPU以及Load/Store这些组件仍然是共用的,仍然可能成为瓶颈。

 

多核技术(Multi Core)

为了达多更大程度的并行,多核技术随之产生。CPU把ALU,FPU,Instruction fetch/decode,Scheduler这些组件看成是一个Core。而多核(Multi Core)就是在同一个CPU里同时存在多组这些组件。各个Core可以并行地执行指令,并拥有各自的一级缓存(L1 Cache),但各个核之间仍然共享二级缓存(L2 Cache)和总线(bus)。

 

优点(相对于多处理器):

共享缓存,所以可以避免从内存中装载同一数据到缓存中数次,从而更高效。而多处理器不能共享缓存;

因为时钟周期一致,所以多核访问缓存的速度更快;

更便宜、且更省电。

 

缺点:

因为共享缓存,别的线程可能会破坏缓存中的数据;

因为共享总线,总线带宽可能会成为瓶颈。

 

多处理器技术(Multi Processor)

这种技术直接使用多个CPU。各个CPU有独立的组件,包括L2缓存和总线,所以它们可以并行地对内存进行操作。不同的CPU还可以有不同的时钟周期(Clock speeds)。

 

多处理器的架构有两种:

Symmetric Multi Process(SMP)——它使用Uniform Memory Architecture(UMA)。在这种架构下,所有的CPU都是等同的,它们可以各自独立地对内存进行操作。

Asymmetric Multi Process(AMP)——它使用Non-Uniform Memory Architecture(NUMA)。在这种架构下,CPU0被视为地位最高的,由它来控制其它CPU的操作。

 

优点(相对于多核):

各处理器完全独立,性能的瓶颈会更少;

独立的缓存,所以整体缓存空间更多;

可扩展。

 

缺点:

因为可以独立存取内存,需要同步。性能为因此受到很大影响;

各CPU需要数据时,即使这个数据存在另一个CPU的缓存中,它仍然不能使用那个缓存中的数据,必须从内存中读取;

更昂贵、且更耗电。

阅读(1840) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~