本文由giantpoplar发表于csdn,未经允许不得转载。
引言
从大一进入软件工程专业以来,到现在大三,陆续听说了很多关于“计算”的词语,比如并行计算,分布式计算,网格计算,云计算,串行计算,异构计算等等,这些名词大多给我一种不明觉厉的感觉,一直想着了解一下这些概念,恰好在读《云计算与分布式系统——从并行处理到物联网》一书时,看到第一章第一节里提到集中式计算、并行计算、分布式计算、云计算这四种计算范式的区别,书中使用了“计算范式”这个词,感觉这个词恰好能概括各种各样的“计算”,然后阅读了一些有关书籍,尝试着对“计算范式”这一概念进行总结梳理,尝试说清楚“是什么”。
从字面上理解,计算,就是指使用计算机硬件(计算芯片,内存,磁盘等)对输入数据进行处理,获得输出;范式一般指一种风格,具有某种特定的特点,比如编程语言有不同的编程范式,包括过程式,面向对象式,函数式以及逻辑式等等。
所以我理解的计算范式就是和某种 用于执行计算任务的硬件结构相适应的计算风格。
比如按照某一时刻进行计算的计算单元(一个CPU或者一个核)的个数分为串行计算(某一时刻有1个计算单元)和并行计算(某一时刻有多于1个计算单元)
多于1个计算单元时候按照计算单元是否共享存储(内存和磁盘等)分为集中式计算和分布式计算;多于1个计算单元时候按照计算单元结构是否一致分为同构计算和异构计算;
云计算糅合了很多技术,一个云计算平台含有大量计算单元,这些计算单元既可以是集中式也可以是分布式;网格计算也拥有大量计算单元,一般来说是分布式的、异构的,这些计算单元是跨地区的,甚至是跨国家、跨洲的,网格的使用通常是让分布的用户构成虚拟组织(VO),在这样统一的网格基础平台上用虚拟组织形态从不同的自治域访问资源。
计算机进行计算离不开芯片,关于集成电路有一条非常著名的经验定律摩尔定律,是说稠密集成电路中晶体管的数目大约每两年翻一倍(Moore's law is the observation that the number of transistorsin a dense integrated circuit doubles approximately every two years.)
最初由Intel和仙童半导体的联合创始人戈登·摩尔在1965年在一篇文章中指出,他预计这一增长速度能还能维持至少10年,实际上后来的几十年芯片的发展基本都是符合这条规律的。集成电路发展到现在,受材料的原子尺寸的大小,能耗等因素的限制,晶体管数目的增长速度已经放缓。(专业的解读可以参考知乎的一篇回答
CPU 的摩尔定律是不是因为 10纳米的限制已经失效了?10 纳米之后怎么办?https://www.zhihu.com/question/26446061/answer/43725522 )
CMOS电路的缩小使晶体管之间的距离成比例地缩小。距离的缩小和电容电量的减少使得硬件体系结构师可以将电路运行在更高的频率上。在相当长的一段时间里提高频率使得非并行代码的性能获得持续的提升。
另外芯片的面积这么多年大小几乎没有什么变化,所以如摩尔定律所反映的那样,固定面积集成电路上的晶体管的数目大约每两年增长一倍,在满足以前芯片功能的情况下,还有相当的芯片面积(大约是一半?)空闲,这些空闲的晶体管便可以用来改进架构,增加专用的计算处理单元(比如浮点数处理单元),增加控制电路等等用来提升计算性能。
但是在过去的十多年里,由于功耗和散热的限制,继续提高CPU的主频已经不够现实,很多性能提高方案都是在给定时钟周期下增加操作的数量,更多的采用并行的方式。
另外,如果把视野从一个芯片中跳出来,就会发现还有很多使用多个CPU,多台计算机进行计算的方式来解决新的计算任务。
即使一个简单的模型机,其电路都是比较复杂的。举一个例子,我计算机组成原理课的课程设计,一个简陋的模型机: 8位总线;含有ALU,支持8位加减法,乘法,逻辑与,或,异或,增1指令,含有寄存器寻址和寄存器间接寻址以及立即数寻址的MOV指令,使用微指令方式实现;含有R1,R2,PC,IR,MAR 等5个寄存器。它的总体连线图如图所示
图中圈出来的ALU的结构如下:它使用了加法器,乘法器,以及逻辑运算器
ALU中8位加法器的结构如下:
8位加法器又使用了8个1位加法器,结构如下,到了这一层,才出现了基本的逻辑门电路,所以可以感受到一个简陋的模型机的完整电路都是比较复杂的,更不要说那些现代的芯片,
晶体管的数目达到亿级,其复杂程度可想而知。
执行单元
执行单元由一个或多个ALU(运算逻辑单元)构成。
奔腾4有用于处理简单整数操作,复杂整数操作,浮点操作的独立ALU
还有x87 FPU专门用于浮点数的处理
控制单元
IA-32的芯片控制单元架构主要有P6处理器微架构和NetBurst微架构,如图这二者是类似的,现仅以NetBurst为例
NetBurst提供了
快速执行引擎(Rapid Execution Engine)
— ALU运行频率是处理器的两倍
— 基本整数操作可以在1/2个处理器始终周期(clock tick)发射(dispatch)
超流水线技术(Hyper-Pipelined Technology)
— 长流水线
先进的动态执行(乱序执行)
新的Cache子系统 2级cache
超标量技术用于支持并行
扩展硬件寄存器,避免名称冲突
64-byte cache line size (transfers data up to twolines per sector)
NetBurst的流水线(Pipelining)由前端流水线,乱序执行核心以及退役单元组成。流水线技术把一个指令分为几个步骤(微程序),每个步骤在处理器的不同部分执行,这样一个时钟周期(clock)里可以有多条指令的不同步骤在执行,如下图一个5级流水线的示意图
p.s超标量(Superscalar)设计是说一个时钟周期(clock)可以同时处理多个指令(不是多处理器核心的情况),这种情况是处理器核心里面有多个子单元并行处理。超标量技术往往和流水线一起使用
两条指令同时在5级流水线上执行。
现在看流水线结构
流水线前端
执行单元执行速度比读内存速度快很多,经常出现CPU等待读内存的情况,影响效率,为了解决这个问题引入了预取(fetch)的概念,在执行单元需要指令/数据之前预取它们,这需要一个高速的存储区域-Cache来存储(Cache比较昂贵,所以一般容量很小,而且使用硬件完成cache和内存的映射关系,替换策略以及Cache一致性等复杂问题,这里暂且不做讨论)
这一模块的功能包括:
-预取prefetch可能被执行的指令
-取指fetch还没有预取的指令
-解码指令为微操作序列
-从执行跟踪cache(executeiontrace cache)分发(deliver)已经解码的指令
-使用先进算法预测分支
具体流程如下:
translation engine(Fetch/ Decode逻辑的一部分)持续的取指/解码目标指令,将指令解码为微操作序列(trace)
在任何时刻,trace cache中保存着多个trace(代表了预取的分支)。从trace cache 中搜索
活跃分支后面的指令,如果这个指令恰好是一个已被预取的分支的第一条指令,从内存层次(内存、缓存)取指/解码操作结束并且这个预取的分支成为新的指令来源。
trace cache和translationengine与分支预测硬件协同工作。分支目标的预测基于线性地址,使BTB(branch target buffer)并被尽可能快的取指
乱序执行核心
乱序执行核心的设计是为了方便并行执行,它允许处理器重新排序指令顺序而不影响最终执行结果。乱序执行引擎分析指令的依赖关系,找到那些在程序的其他部分需要他们之前随时可以执行的独立指令,然后把这写指令分派到不同的执行单元执行。
一个简单的举例,一条指令包含目的操作数和源操作数,在一个线性的指令流中,如果前面的指令的目的操作数出现在后面指令的源操作数中,这两条指令就存在依赖,相对顺序无法改变,可以根据这一点把线性指令流抽象为一个有向无环图,从图里面逐次取出没有前驱的指令,每次取出的指令便是可以同时执行的指令,可以据此调度指令的执行,具体见下图
(此处有疑问,乱序执行并行的粒度,是并行 指令还是指令的微操作)
乱序执行引擎的结构示意图如下
分为分配器(Allocator),寄存器重命名(Register Renaming),微操作调度器(Miro-operation scheduler)3部分
分配器确保缓冲区空间被适当的分配给乱序引擎正在处理的每条指令。如果所需资源不可用,分配器会停止对指令的处理并把资源分配给能够完成处理的另一条指令。
寄存器重命名部分分配逻辑寄存器去处理需要访问寄存器的指令。这一部分不使用IA-32的8个通用寄存器,而是包含128个逻辑寄存器,它使用寄存器分配表(RAT)把指令的寄存器请求映射到某个逻辑寄存器上,以便于多条指令对相同寄存器同时进行访问
微操作调度器检查微操作需要的输入元素,确定何时准备好处理微操作。他的工作是把准备好处理的位操作发送给退役单元,同时仍然维持程序相关性。微操作调度器使用两个队列,一个用于需要内存访问的微操作,一个用于不需要的并绑定到分派端口,分派端口把微操作发送给退役单元。
乱序执行引擎每个周期(cycle)最多可以分派(dispatch)6个微操作(比trace cache和退役微操作retirement micro-op的带宽要高),绝大多数流水线每个周期(cycle)可以开始执行一个新的微操作,因此每个流水线一次可以有多个指令在执行(several instructions can bein flight at a time for each pipeline.)。有些ALU指令每周期(cycle)开始两次;许多浮点指令每两个周期(cycle)开始一次。乱序执行引擎使用了几个buffer来smoothing微指令流
退役单元
退役单元按照乱序执行引发来的微操作顺序发送给执行单元执行,然后处理结果,把执行结果重新调整使得符合最开始的程序顺序。
当一个微操作执行完成并且写回了结果,它就退役了,从退役单元中删除,一个周期(cycle)最多3个微操作退役。ROB(Reorder Buffer)是处理器用来缓存完成执行的微操作,按序更新架构状态以及管理异常的顺序的单元(the unit in the processor which buffers completed micro-ops, updatesthe architectural state in order, and manages the ordering of exceptions)。退役部分更新分支预测单元的信息,确保其知道哪些分支已经被采用了
分支预测
引入了统计学算法和分析,用来确定指令码中最可能执行的路径。这条指令上的指令码被预取并且加载到Cache中
分支预测使用了3种技术
深度分支预测使用统计学方法预测分支方向,使得处理器能够穿越分支进行指令解码,可能会出错
动态数据流分析进行实时的数据流分析确定指令的依赖关系检测乱序执行的机会,获得在多个执行单元上最有的执行序列同时保持数据的完整性
推理性执行指的是执行一个位于一个尚未预测方向(resolved)的条件分支之中的指令(思想是在资源空闲的时候先执行一个有可能执行的指令,最后发现确实需要执行这个指令就采用结果,否则就丢弃执行的结果,以提高效率),并最终提交结果符合最初的指令流的顺序的能力。为了实现可能采用指令的调度执行与结果的提交分离的设计,乱序执行引擎使用动态数据流分析来执行指令池中可以执行的指令并把结果存在临时寄存器。退役单元线性搜索指令池中那些不再有数据依赖其他指令或者未预测(unresolved)的分支的完成了的指令(completed instruction),按照最初的顺序提交这种指令的执行结果并从指令池中退役该指令。
SIMD即单指令多数据流,一个指令同时操作多个数据,打包(packed)的整数/浮点数,处理器使用64bit或128bit的寄存器处理这些打包的整数/浮点数。这在概念上与短向量的操作类似,向量计算则是将这一概念推广到了长向量中。
Intel处理器最早出现SIMD是在奔腾II处理器,开始称为IntelMMX技术,后来对SIMD不断扩展,有了SSE,SSE2等等扩展
在Intel Sandy Bridge微架构处理器里加入了Intel AVX(Intel Advanced Vector Extensions)技术,支持256bit浮点指令集。
这些指令适合3D几何,3D渲染,视频编解码这种本身具有良好并行性的操作,可以大大提升性能。
Intel HT Technology,是一种硬件支持多线程的技术,是在一个处理器核心里面有多个逻辑处理器,这些逻辑处理器共享执行资源。这样一个处理器(核心)并发可以执行两个或多个分离的指令流(线程)。用来提升多线程操作系统或者多任务应用的性能
具体来说支持Intel HT Technology的IA-32处理器可能有两个或多个逻辑处理器(核),每个逻辑处理器(核)有自己的IA-32架构状态(architectural state):完整的IA-32数据寄存器集合,
段寄存器,控制寄存器 ,调试寄存器去 , 大部分MSR(状态寄存器). 每个逻辑处理器都有自己的APIC(advanced programmable interrupt controller).他们共享物理处理器的核心资源包括执行引擎(execution engine)和系统总线接口。
和多处理器的比较如下图
多核技术是另一种硬件多线程技术。在一个处理器(physical package)里面有多个执行核心(core),每个核心和以前的处理器是类似的,每个核心可能使用多线程技术。核心数目的增加/超线程技术必然需要消耗大量的芯片面积,如果不是工艺的提高,这样的结构是无法实现的
几种使用多核技术的处理器如下所示
双核4线程
4核4线程
4核8线程
Intel® Virtualization Technology虚拟化技术是提供指令扩展,用以从硬件上支持虚拟化技术。一个拥有VMX(Virtual MachineExtensions) 的Intel64/IA-32平台可以运转多个虚拟系统/虚拟机,每个虚拟机独立运行操作系统和应用。p.s.虚拟化技术是云计算的基础
VMX还为VMM(Virtual Machine Monitor,新的系统软件层次,运行在硬件层之上,多个操作系统可以运行在VMM层之上)提供编程接口,用于管理虚拟机
I7处理器增强了Intel® Virtualization Technology
使用VPID(Virtual processor ID)降低VMM的事务管理成本
使用EPT(Extended page table)降低VMM管理内存虚拟化的事务数量
降低了VM事务的延迟
GPU设计之初是为了图形处理,图形处理任务具有高度的并行度,有大量的独立任务,因此GPU倾向于通过复杂硬件管理大量的线程,而不是像CPU那样使用复杂的机制管理任务队列或者硬件处理隐藏SIMD指令的执行细节,是一种简单的多线程处理器,其设计目标是高效的处理大量像素点。
GPU现在也被用来处理一些并行任务,不一定是图形处理任务。
如下是AMD Radeon HD6970芯片的示意图
硬件架构具有16 SIMD通道(16 SIMD lanes),使用向量流水线,在4个周期内执行长度为64的向量
编程上采用lanewide SIMD模型的中间语言,即一条指令代表了SIMD单元上的一条通路。这样每个SIMD单元都是程序员可见的,与x86 SSE或AVX等向量宽度的指令不同。
程序计数器由每个SIMD向量进行管理,所以硬件线程实际上是一个宽向量。
通过使用一些硬件向量化的技术,将单路的程序组合到一起,可以更有效的管理分支,支持预测执行等。
为了支持指令级并行,AMD架构通过底层中间语言的shader编译器,在每一条路上执行VLIW指令流。
另外AMD还提出了APU,结合了CPU和GPU。其实intel的很多芯片也有所谓“核显”也是类似的结构
下面说一下各种计算范式
串行就是按照程序里指令流的顺序线性执行下来,而且只有这一个指令流。这是最简单的一种情况。
首先说一下并发和并行的区别,并发说的是一个时间段内多个指令流在执行,在这个时间段内可能每个指令流只执行了部分时间;并行说的是在一个时间点有多个指令流在执行。
本文开始时候提到某一时刻进行计算的计算单元多于一个时就是并行计算,其实并不是非常准确,在不同的层次上都能体现并行性。
在指令层次,流水线技术(以及与之密切相关的乱序执行,超标量技术),就是实现多条指令同时执行(这种同时执可能是同一个指令流中的,在硬件中发生了并行,而程序并未察觉),这就是一种并行;SIMD技术以及向量处理指令,在一个指令中同时处理多组数据,这也是一种并行,是数据并行
CPU层次 在一个多核的处理器里面,多个核心同时执行指令流;或者使用超线程的一个核心里面,多个逻辑核心同时执行指令流;又或者一台机器上多个CPU,同时执行指令流
机器层次,当计算任务一台机器无法承担的时候,比如瞬时高并发,海量数据处理等等,这种任务一台机器无法处理,这时会将许多机器通过局域网连接起来,共同处理计算任务。
如果是多台自治的计算机(不共享内存)系统协同处理计算任务,这些自治的机器可能分布在不同的地域,也可能位置上比较紧密比如集群,不同的机器通过网络连接起来,在局域网中使用千兆以太网/万兆以太网可以保证数据存取的效率。
分布式计算一个基本问题是如何将高效地计算任务分派给多台机器,又如何将多台机器上处理的结果收集整合,一个典型的做法就是MapReduce。分布式系统中一般都有一台机器作为master节点,负责协调其他worker节点,比如Hadoop就是采用了类似的做法。
下面简要介绍MapReduce的流程
1. 数据分区:MapReduce库将已存入GFS的输入数据(文件)分割成M部分,M是映射任务的数量。
2. 计算分区:用户必须实现Map和Reduce函数,MapReduce库只生成用户程序的多个复制,他们包含了Map和Reduce函数,然后再多个可用的计算引擎上分配并启动他们。
3. 决定主服务器master和服务器worker:主服务器负责挑选空闲的服务器,并分配Map和Reduce任务给他们。
4. 读取输入数据(数据分发):先分割输入数据,每一个映射服务器读取其输入的相应部分,然后输入至其Map函数。虽然一个映射服务器可能运行多个map函数,这意味着它分到了不止一个输入数据分割。
5. Map函数:每个Map函数以(key,value) 对集合的形式收到分割的输入数据,处理并产生中间(key, value)对。
6. Combiner函数:是映射服务器一个可选的本地函数,适用于中间(key, value)对。用户可以在用户程序里调用Combiner函数。Combiner函数(和Reduce函数的代码相同)合并每个映射服务器的本地数据,然后送到网络传输,以减少通信成本。
7. Partitioing函数:在MapReduce中数据流中,具有相同键值的中间(key, value) 对被分组到一起,每个组里的值都应只由一个Reduce函数处理。然而实际中有M的Map任务和R个Reduce任务,M≠R是可能的,不同的Map任务可能产生了相同key的中间key-value对。采用的方法是每个Map产生的中间key-val对划分为R个区域,分块由Partitioing函数进行划分,保证具有相同key的key-val对都能存储在同一区域(多个Map结果的同一区域)。Reduce服务器i,收集所有Map服务器中区域i中的中间key-val对。
8. 同步:当所有Map任务完成时,Map服务器和Reduce服务器的通信开始。
9. 通信:Reduce服务器i已经知道所有Map服务器中各自的区域i的位置,使用远程过程调用来从所有映射服务器的各个区域中读取数据。
10. 排序和分组:Reduce服务器完成读取输入数据的过程时,数据首先在Reduce服务器的本地磁盘中缓冲。然后Reduce服务器根据key将数据排序来对key-val对进行分组,之后对出现的所有相同key进行分组。
11. Reduce函数:Reduce服务器在已经分组的key-cal对上进行迭代。对于每一个唯一的key,它把key和对应的value发送给Reduce函数。然后这个函数处理输入数据,并将最后输出结果存入用户程序已经指定的文件中。
数据流
控制流
另外还涉及到分布式存储(将海量数据存储到多台机器),容灾(master、worker节点出问题如何处理)等。
云计算有很多种说法,它糅合了很多技术,从他的用途来说可以描述为:云计算是一个资源池,可以按需要的资源量(包括CPU,内存,网络带宽,存储等)提供相应资源。
云计算要想做到按用户需要提供相应的CPU,内存,网络带宽需要,并且要有足够的灵活性,而且要自动化管理,如果用户打电话申请服务,工作人员使用人工拼凑机器,然后安装环境配置供用户使用的方式,恐怕就不会有云计算了。
云计算基于一种称为虚拟化的技术(云计算中使用的是虚拟化中的硬件虚拟化这种,因为效率比较高),硬件虚拟化是在物理硬件之上运行一层系统软件,称为VMM(virtual machine monitor),它负责虚拟出一个硬件环境,在这层VMM软件之上,可以运行多个操作系统,每个操作系统可以运行应用程序,而每个操作系统是感觉不到这层VMM的存在,操作系统以为自己就是运行在一台物理机器上(实际上操作系统还可能需要稍作修改),这种硬件虚拟化的实现有Xen,KVM等(p.s.Intel VT技术的支持为虚拟化的实现提供了便利)。
使用这些软件便能控制创建多大配置的虚拟机。使用VMM可以对虚拟机动态创建,销毁,动态迁移(在不同物理机器上迁移虚拟机,而使用户察觉不到)等,云计算的按需提供服务正是基于此。
云计算在虚拟化技术的基础上,形成了一个非常复杂的系统。云计算一般部署在数据中心中,里面有成千上万台物理机器,使用虚拟化技术可以根据用户需求动态创建虚拟机供用户使用。云负责对这些机器进行管理,需要管理虚拟机,进行物理机器的负载均衡,在系统内部信息传递,虚拟网络的管理,存储的管理,以及用户的管理等等一系列复杂的问题。
云计算一般分为IaaS,SaaS,PaaS三种,如下图所示
用户可以选用IaaS平台申请一台机器使用,也可以申请一批机器,组成一个虚拟集群,可以在集群之上运行分布式程序,以获得强大的计算能力;也可以使用PaaS搭建自己的tomcat web服务器;也可以使用SaaS,比如提供一个已经搭建好Wordpress的机器,提供博客服务。而这一切都是按需提供,并且由云负责审计你的使用量据此付费。
云计算的优势在于对于用户来说不用自己购买机器,维护机器,确实能够降低成本,而云又通过规模效益获取利润,双方都能获利。云计算方面很多厂家都在做,亚马逊aws,微软asure,google gae应用程序引擎,阿里云等,做虚拟化的公司VMWare也在云计算方面不断跟进,开源的云平台openStack试图做云时代的linux与亚马逊的aws抗衡等等。
普适计算
是说人们能够在任何时间、任何地点、以任何方式进行信息的获取与处理,这需要大量的传感器(这和物联网的联系非常密切)以及大量的计算所以普适计算往往还要借助云计算的计算能力。又或许在将来会出现新的芯片,用于物联网中的设备,增强传感器的计算能力,也许就能实现普适计算了。
异构计算
从广义上来说,使用了不同结构的处理器进行计算就算异构计算,比如分布式系统里面一台机器是intel的x86芯片,另一个是x64的芯片,还有一台机器是AMD的芯片这就算是异构计算。
另外一种情形是CPU和GPU一起用于计算,这也是一种异构计算,CPU更适合处理复杂控制逻辑,GPU则更擅长处理并行任务。很多时候可以采取在程序性能的瓶颈部分,并且具有高度并行化特点的部分使用GPU加速,这涉及GPU的使用以及和CPU的协调。芯片厂家为这种异构计算提供了编程接口,Nvidia提供了cuda(类似于C语言语法),AMD则力推openCL(open computing language开放计算语言)提供C,C++语言的编程接口,它规定了一个标准,可以把并行任务映射到同构或者异构的体系结构上。
这二者的区别也很明显,一个针对特定厂家的芯片,不具备通用性,效率也更高;
另一个是跨硬件体系结构的标准,通用性好,不必为各种硬件学相应编程接口,但是硬件的多样性并不容易抽取一个高效的通用模型,因此性能会受影响,而且实际上opencl程序性能的优化也依赖于程序员对芯片体系结构的理解。
http://www.zhetao.com/content201
http://www.intel.com/content/www/us/en/processors/architectures-software-developer-manuals.html
计算机组成原理唐朔飞
Wikipedia
云计算与分布式系统-----从并行处理到物联网
Opencl 异构计算
Openstack设计与实现
汇编语言程序设计
Statckoverflow
http://stackoverflow.com/questions/1656608/what-is-difference-between-superscaling-and-pipelining
IA-32产品线
1978年发布16bit处理器8086/8088为IA-32引入了分段
1982年发布Intel® 286 Processor 为IA-32引入了保护模式
1985年发布 Intel386™Processor第一个IA-32处理器
32bit寄存器,并且兼容之前的16位寄存器
虚拟8086模式,执行为8086/8088处理器创建的程序时可以更快
32bit地址总线,支持最大4G物理内存,支持分段
支持分页用于虚拟存储
支持parallel stages
1989年发布Intel486™Processor
扩展了Intel386的解码执行单元到5级流水线,每个周期执行两条指令
增加了8KB的一级片上cache,提高了每个时钟周期能执行的指令的数目
添加了集成的x87 FPU(floating-pointunit)把专用于浮点计算的芯片80287/80387集成到了80486中
节能和系统管理的能力
1993年发布 Intel® Pentium® Processor
两个流水线,超标量技术
一级片上Cache加倍,8KB用于指令,8KB用于数据
数据cache使用MESI协议,支持除了80486使用的写通Cache之外的更高效的写回Cache(写通就是CPU把数据写到缓存时也写到内存中相应位置,写回则是CPU把数据写到缓存,Cache被替换出时,才把数据写到内存相应位置)
分支预测使用了一个片上的分支预测表以提升循环结构的性能
更高效的virtual-8086 mode扩展
内部数据128bits,256bits路径
突发的64bits外部数据总线
APIC支持多处理器的系统
双处理器模式支持无缝双处理器系统(glueless two processor systems)
奔腾家族处理器随后引入了Intel MMX技术,使用SIMD执行模型对64bit寄存器里的打包的整数进行并行计算
1995-1999发布 P6 Family
基于一种超标量(superscalar)微架构(microarchitecture)确定了新的性能标准,这种微架构称为P6 family microarchitecture
Intel Pentium Pro processor 3级超标量(3-way superscalar),增加量Cache,有2级cache
Intel Pentium II processor 增加了Intel MMX技术
Pentium II Xeon processor 结合了奔腾处理器和之前处理器的特点
Intel Celeron processor (赛扬处理器)专注于家用PC市场
Intel Pentium IIIprocessor引入了Streaming SIMD Extention(SSE)
Pentium IIIXeon processor 使用full-speed,on-die, Advanced Transfer Cache提升IA-32处理器性能
2000-2006发布 Intel®Pentium®4 Processor Family
使用Intel NetBurst微架构
引入了 Streaming SIMD Extensions 2(SSE2)
引入了Hyper-Threading Technology超线程技术
引入了Streaming SIMD Extensions 3(SSE3)
672 and 662版本中引入了虚拟化技术Intel® VirtualizationTechnology(Intel® VT))
2001-2007发布 Intel® Xeon® Processor(至强处理器)
使用Intel NetBurstmicroarchitecture,双核处理器,用于多处理器服务器和高性能的工作站
串行计算
IntelXeon processor MP引入了超线程技术
64-bit Intel Xeon processor3.60 GHz引入了Intel 64架构
Dual-Core Intel Xeon processor引入了双核心技术
Intel Xeon processor 70xx包含了虚拟化技术
Intel Xeon processor 5100系列使用了低功耗高性能的Intel Core microarchitecture,是Intel64架构,包含双核技术,虚拟化技术
Intel Xeon processor 3000 系列 也是Intel Core microarchitecture
Intel Xeon processor 5300 系列也是Intel Core microarchitecture,并且有4个物理处理器核
2003-2006发布 Intel®Pentium®M Processor
给之前的IA-32 Intel mobile processors微架构加强了,性能更高,能耗更低
支持具有Dynamic Execution的英特尔架构
使用Intel高级处理工艺的铜连接的高性能第功耗核心
On-die(片上)32K指令cache,32K写回数据Cache
具有Advanced Transfer Cache Architecture的2级On-die Cache(最大2MB)
高级的分支预测和数据预取逻辑
支持MMX技术,支持Streaming SIMD指令和SSE2
400MHZ/500MHZ的源同步处理器系统总线Source-Synchronous ProcessorSystem Bus
使用Enhanced Intel SpeedStep® 技术进行先进的能耗管理