冯诺依曼的5个架构:控制器、运算器、存储器、输入设备、输出设备。
Cpu的发展趋势:
1、多核技术出现的原因
因为:“处理器功耗 正比于 电流x 电压 x 电压 x 主频”,“IPC 正比于电流”,所以:“处理器功耗 正比于 IPC“。由单核处理器增加到双核处理器,如果主频不变的话,IPC理论上可以提高一倍,功耗理论上也就最多提高一倍,因为功耗的增加是线性的。而实际情况是,双核处理器性能达到单核处理器同等性能的时候,前者的主频可以更低,因此功耗的下降也是指数方(三次方)下降的。反映到产品中就是双核处理器的起跳主频可以比单核处理器更低,性能更好。由此可见,将来处理器发展的趋势是:为了达到更高的性能,在采用相同微架构的情况下,可以增加处理器的内核数量同时维持较低的主频。这样设计的效果是,更多的并行提高IPC,较低的主频有效地控制了功耗的上升。
2、2个1G的多核和2G的单核处理器
单核CPU也有高频率的,双核CPU也有低频率的。内存则有DDR DDR2和DDR3之分。型号频率不同,自然效果也不同。如果是同时运行多个任务,双核自然是占有优势。在上网,做工作时,高频率的内存则可以加快存取传输的速度如果内存是同一个型号,那么自然是1G内存+双核快一些,内存的大小不直接关系到存取的速度。
3、编程模型:SIMD VS MIMD?(应用场景、架构优缺点)
单指令流多数据流计算机
SIMD计算机有n个相同的处理器,每个都有其自己的本地存储器,可以存储数据。一个由中央控制单元发出的单指令流控制所有处理器的工作。有N个数据流,每1个处理器操作1个数据。所有处理器是同步操作的,在每一步中,处理器对于不同的数据元素执行相同的指令。SIMD计算机比MISD更通用。许多应用问题可以通过SIMD计算机并行算法求解。另一个有趣的特点是,这些计算机算法比较容易设计,分析和实现。局限是只有可被细分为一组相同子问题的那些计算才可以被处理。有很多的计算,不适合这种模式:这种问题通常使用下面的MIMD计算机解决。
多指令流多数据流计算机
MIMD并行计算机是最通用和最强大的。有n个处理器,指令流和数据流。每个处理器拥有其控制单元和其本地存储器,使得它们比SIMD计算机更强大。每个处理器在控制单元发出的指令流控制下运行,执行不同的指令和操作不同的数据流。
并行计算的MIMD模型是最普遍和最强大的,但异步算法很难设计,分析和实现。所以在实践上通常用来作为SIMD模式的补充。
4、虚拟化技术的意义?
在计算机中,虚拟化(英语:Virtualization)是一种资源管理技术,是将计算机的各种实体资源,如服务器、网络、内存及存储等,予以抽象、转换后呈现出来,打破实体结构间的不可切割的障碍,使用户可以比原本的组态更好的方式来应用这些资源。这些资源的新虚拟部份是不受现有资源的架设方式,地域或物理组态所限制。一般所指的虚拟化资源包括计算能力和资料存储。
在实际的生产环境中,虚拟化技术主要用来解决高性能的物理硬件产能过剩和老的旧的硬件产能过低的重组重用,透明化底层物理硬件,从而最大化的利用物理硬件。
主频障碍
(1)过去主频的提高一半靠摩尔定律,一半靠结构优化 (如P3是10级流水线,P4是20级流水线;流水线很难再细分)
(2)随着晶体管尺寸的缩小,连线延迟成为主要延迟(局部线延迟不变(变短了,但也变细了)全局的连线延迟还会不断变长(芯片面积不变))
(3)高主频的复杂设计正在终结 (强调:局部化、流水化、异步、自定时)
复杂度障碍
(1)晶体管数目的指数增加与设计队伍的增加形成剪刀差(设计能力、验证能力)
(2)晶体管越来越难用(串扰问题、片上漂移、可制造性设计)
(3)处理器结构经历了简单、复杂、简单、复杂的螺旋上升过程,最早期的处理器结构由于工艺技术的限制,不可能做得很复杂,一般都是串行执行
随着流水线、动态调度、CACHE、向量机技术等技术的发展,处理器结构变得复杂,如IBM 360系列的机器以及Cray的向量机
RISC技术的提出使处理器结构得到一次较大的简化
随着多发射乱序执行技术的实现,RISC结构越来越复杂,Intel和HP研制的EPIC结构没有从根本上对处理器结构进行简化
未来可能会流行的CPU结构
• 多核 + 向量处理
• 典型:Larrabee (16way ALU/512 bit)
• 向量的位宽:64 / 128 / 256 / 512 / 1024 ……
• 众核:同构的基于分片的多核(tile based)
• 典型:Tile64
• 处理器核的个数:64 / 128 à 512 / 1024
• 带有协处理器的异构多核
• 典型:CELL
• 通用处理器+专用的协处理器(GPU、流处理器)
摩尔定律发展过程中碰到的“墙”
• 1980’s:存储墙
• CPU变快,内存只变大不变快
• 80%的晶体管用于片内高速缓存等
• 2000’s:功耗墙
• 一Intel放弃4GHz的Pentium IV为标志,终止复杂的高主频设计
• 多核设计成为主流
• 未来还有可能碰到的“墙”
• 带宽墙:“茶壶里倒饺子”(性能和带宽1-2FLOPS:1BPS的关系)
• 成本墙:太贵了做不起(目前只剩Intel、IBM、TSMC三家)或用不起(10nm以后单片成本反而增加)
• 应用墙:16核以上的CPU卖给谁?量大面广的应用需要多少核?
• 如果克服不了上述“墙”,通用CPU的摩尔定律到2015年即告终止
带宽障碍
• 摩尔定律的新定义
• 片内处理器核的个数指数增长
• 封装引脚增加缓慢
• 每个核使用的引脚数指数下降
• 茶壶里倒饺子
• 高速信号传输缓解带宽瓶颈
• 目前引脚上的信号频率已经达到GHz
• 很快会出现板上频率高于片内频率的现象
5、影响CPU性能的因素
• 性能的最本质定义
• 完成一个任务(如后天的天气预报)所需的时间
• 以指令为基本单位
word/media/image1.gif
6、Flynn’s分类:
Flynn分类方法是根据指令流、数据流、和多倍性三方面进行分类的。简单介绍下相关概念:
(1)指令流:机器执行的指令序列
(2)数据流:指由指令流调用的数据序列,包括输入数据和中间结果,但不包括输出数据。
(3)多倍性:指在系统性能瓶颈部件上同时处于同一执行阶段的指令或数据的最大可能个数。
单指令流单数据流(SISD):结构:控制部分一个,处理器一个,主存模块一个。典型代表:单处理器系统
单指令流多数据流(SIMD):结构:控制部分一个,处理器多个,主存模块多个。关键特性:各处理器以一步的方式形式处理同一条指令。典型代表:单处理器系统。
多指令流单数据流(MISD)结构:控制部分多个,处理器多个,主存模块多个。关键特性:被证明不切实际。典型代表:没有模型
多指令流多数据流(MIMD)结构:控制部分多个,处理器多个,主存模块多个。关键特性:能够实现作业任务指令等各级全方面进行。典型代表:多处理系统多计算机。
7、技术趋势:
集成电路技术:晶体管密度、晶片尺寸、晶体管数目
DRAM容量、闪存容量、磁盘技术、带宽、网络和存储技术(网络技术、速度、存储接口)
第二章 内存层次设计
8、存储基础
局部性原理:
时间局部性:如果一个存储项被访问,则可能很快会再次被访问。
空间局不性:如果一个存储项被访问,则其邻近的项也可能很快被访问。
存储器层次结构:SRAM、DRAM、DISK、FLASH MEMORY
存储系统:容量相当于最大的那层存储器,速度相当于最快的那层存储器。
CACHE基本原理
Cache的工作原理是基于程序访问的局部性(通俗说就是把经常用到的数据放在一个高速的cache里面)。根据程序的局部性原理,可以在主存和CPU通用寄存器之间设置一个高速的容量相对较小的存储器,把正在执行的指令地址附近的一部分指令或数据从主存调入这个存储器,供CPU在一段时间内使用。这对提高程序的运行速度有很大的作用。这个介于主存和CPU之间的高速小容量存储器称作高速缓冲存储器(Cache)。
问题:(1)如果要访问的数据不在CACHE中怎么办?
如果要访问的数据不在CACHE中,那么它一定在内存中,cpu访问内存,并把这部分的数据从内存调入CACHE(可能先要把CACHE中部分数据调出以便腾出空间),访问结束。
(要访问的数据开始不在CACHE中;访问数据导致缺失;缺失则将需要的数据装入CACHE )
(2)从主存中装入数据时装到CACHE中的什么位置?
全相联映射是指主存中任一块都可以映射到Cache中任一块的方式,也就是说,当主存中的一块需调入Cache时,可根据当时Cache的块占用或分配情况,选择一个块给主存块存储,所选的Cache块可以是Cache中的任意一块
直接映射是只能出现在唯一的位置,映射方法通常是(块地址)MOD(Cache中的组数)
组相联映射是一个块被严格的放到Cache中某组位置里。一个块首先被映射到一个组中,然后它可以被放置到组中的任何一个块中。组通常利用位选择方式确定。每个块有n个位置可放的cache称为n路组相联cache;
(3)从主存中装入数据时一次装入多少数据?
从cache到处理器:以字为单位;从主存到cache:以块为单位;块大小与缺失率有关
(4)如何判断CACHE中对应的位置是否为有效的数据?
有效位设置时表示一个块是有效的
(5)如果CACHE装满了怎么办?
9、替换块的选择:
随机替换策略;为了均匀分布,候选块将被随机选择。一些系统产生伪随机数块号,以获得可重复的行为,当调试硬件时,这种方式及其有用。
最近最少使用替换策略:为了减少替换那些可能不久就要用到信息的概率,需要记录块的访问次数。利用历史信息来预测未来使用情况,被替换的块将是最长时间内没有被访问的Cache块。LRU使用了一个局部性原理的推论:如果一个最近被使用过的块很可能会被再次访问,那么最好替换最近最少使用的块。
先进先出替换策略:由于计算LRU比较复杂,该替换策略将最早进入Cache的块作为替换块。
(6)写CACHE时会有什么问题?
举例1:假设指令cache的缺失率为2%,数据cache的缺失率为4%,处理器的CPI为2(没有存储器阻塞),且每次缺失的代价为100个时钟周期,那么配置一个从不发生缺失的理想的cache,处理器的速度快多少?假定全部LOAD和STORE的频率为36%.
举例2:处理器时钟周期的时间1ns,缺失代价是20个时钟周期,缺失率为每条指令0.05次缺失,cache的访问时间(包括命中判断)为1个时钟周期。假设读操作和写操作的缺失代价相同并且忽略其它写阻塞。请计算AMAT。
举例3:假定处理器基本的CPI为1.0,时钟频率为4GHz。假定主存访问时间为100ns,其中包括缺失处理时间。设一级cache中每条指令缺失率为2%。如果增加一个二级cache,命中或缺失访问的时间都是5ns,而且容量大到必须使访问主存的缺失率减少到0.5%,这时的处理器速率能提高多少?
主存的缺失代价:
100ns/(0.25ns/时钟周期)=400个时钟周期
只有一级cache时:
总的CPI=1.0+2%*400=9
对于两级cache:
二级cache的缺失代价:
5ns/(0.25ns/时钟周期)=20个时钟周期
总的CPI=1+2%*20+0.5%*400=3.4
有二级cache的处理器性能是没有二级cache性能的9.0/3.4=2.6倍
10、层次化存储优化方法
⏹ 6种基本的CACHE优化方法:
⏹ 更大的块
⏹ 强制缺失减少;
⏹ 容量和冲突缺失增加,缺失代价增加;
⏹ 更大的CACHE容量
⏹ 缺失率降低;
⏹ 命中时间,功耗增加;
⏹ 更高的相联度
⏹ 冲突缺失减少;
⏹ 命中时间增加,功耗增加;
⏹ 更多级CACHE
⏹ 内存访问时间减少;
⏹ 读缺失优先级更高
⏹ 缺失代价降低;
⏹ 缓存索引避免地址转换
⏹ 减少命中时间;
第三章 指令级并行
11、Load指令的5个阶段:
IF取指、ID取操作数和译码、EX执行、MEM存储器访问、WB写回
12、流水线的3种冲突/冒险:
Hazards:指流水线遇到无法正确执行后续指令或执行了不该执行的指令
Structural hazards (hardware resource conflicts):
现象:同一个部件同时被不同指令所使用
一个部件每条指令只能使用1次,且只能在特定周期使用
设置多个部件,以避免冲突。如指令存储器IM 和数据存储器DM分开
Data hazards (data dependencies):
现象:后面指令用到前面指令结果时,前面指令结果还没产生
采用转发(Forwarding/Bypassing)技术
Load-use冒险需要一次阻塞(stall)
编译程序优化指令顺序
Control (Branch) hazards (changes in program flow):
现象:转移或异常改变执行流程,顺序执行指令在目标地址产生前已被取出
采用静态或动态分支预测
编译程序优化指令顺序(实行分支延迟)
13、数据冒险的解决方法:
方法1:硬件阻塞(stall)
方法2:软件插入“NOP”指令
方法3:编译优化:调整指令顺序
方法4:合理实现寄存器堆的读/写操作
前半时钟周期写,后半时钟周期读。若同一个时钟内前面指令写入的数据正好是后面指令所读数据,则不会发生数据冒险
方法5:转发(Forwarding或Bypassing 旁路)技术,能解决所有数据冒险吗?
若相关数据是ALU结果,则如何?可通过转发解决
若相关数据是上条指令DM读出内容,则如何?不能通过转发解决,随后指令需被阻塞一个时钟 或 加NOP指令。称为Load-usa数据冒险
14、动态分支预测方法:
简单的静态分支预测方法的预测成功率不高,应考虑动态预测
动态预测基本思想:
• 利用最近转移发生的情况,来预测下一次可能发生的转移
• 预测后,在实际发生时验证并调整预测
• 转移发生的历史情况记录在BHT中(有多个不同的名称)
- 分支历史记录表BHT(Branch History Table)
- 分支预测缓冲BPB(Branch Prediction Buffer)
- 分支目标缓冲BTB(Branch Target Buffer)
• 每个表项由分支指令地址的低位索引,故在IF阶段就可以取到预测位
- 低位地址相同的分支指令共享一个表项,所以,可能取的是其他分支指令的预测位。会不会有问题?
- 由于仅用于预测,所以不影响执行结果
状态图
15、Tomasulo’s算法
⏹ 三步骤:
⏹ 发射
⏹ 从指令队列中获得指令,果RS可用,则发射指令到RS;
⏹ 如果操作数可用,则发送数据至RS;
⏹ 如果操作数不可用,则指令停顿;
⏹ 发射级完成了重命名。
⏹ 执行
⏹ 若有一个或几个操作数未就绪,等待该操作数,并同时监控CDB;
⏹ 当操作数可用,则存储至保留站;当所有的操作数可用,则执行指令;
⏹ 执行级检查了是否存在RAW竞争。
⏹ 写结果
⏹ 将结果写入CDB,并从CDB写入目的寄存器及等待此结果的保留站;
⏹ 连续写同一寄存器时,只有最后一次才能写入;
⏹ 消除了WAW竞争。
16、多线程的好处:
(1)创建一个线程比创建一个进程的代价小。
(2)线程的切换比进程间切换的代价小。
(3)充分利用多处理器。
(4)数据共享。
(5)快速响应特性
17、为什么多核?
第四章 数据集并行
18、SIMD
⏹ SIMD 发掘数据级并行:
⏹ 矩阵运算;
⏹ 图像和声音处理;
⏹ SIMD 比 MIMD能耗效率高:
⏹ 数据操作只需要取一条指令;
⏹ 对PMD具有吸引力;
⏹ SIMD 编程者对并行思维要求较低。
SIMD并行
⏹ 向量体系结构;
⏹ SIMD 扩展;
⏹ 图形处理单元(GPUs)
x86 处理器:
假定每两年增加2个核心;
SIMD 每四年宽度翻一番;
由SIMD并行获得的潜在加速比为MIMD的两倍!
第五章 多处理器与线程级并行
19、单CPU上常见的提高性能的方法和并行计算
⏹ 提高单个处理器的工作频率;
⏹ Locality:L1/L2/L3 Cache;
⏹ 多级流水线(提高CPU频率的利器);
⏹ 超标量执行(多条流水线并同时发送多条指令);
⏹ 乱序执行(指令重排);
⏹ 单指令流多数据流SIMD;
⏹ 超长指令字处理器(依赖于编译器分析)等
20、存储访问模型
⏹ UMA(Uniform Memory Access)模型
物理存储器被所有节点共享;
所有节点访问任意存储单元的访问时间相同;
发生访存竞争时,仲裁策略平等对待每个节点,即每个节点机会均等;
各节点的CPU可带有局部私有高速缓存;
外围I/O设备也可以共享,且每个节点有平等的访问权利。
⏹ NUMA(Non-Uniform Memory Access)模型
物理存储器被所有节点共享,任意节点可以直接访问任意内存模块;
节点访问内存模块的速度不同,访问本地存储模块的速度一般是访问其他节点内存模块的3倍以上;
发生访存竞争时,仲裁策略对节点可能是不平等的;
各节点的CPU可带有局部私有高速缓存cache;
外围I/O设备也可以共享,但对各节点是不平等的。
21、MESI Protocols
⏹ MESI协议包含了描述多核共享数据的状态。 每个Cache line有4个状态,可用2个bit表示
⏹ M(Modified)和E(Exclusive)状态的Cache line,数据是独有的,不同点在于M状态的数据是dirty的(和内存的不一致),E状态的数据是clean的(和内存的一致)。
⏹ 在MESI协议中,每个Cache的Cache控制器不仅知道自己的读写操作,也监听(snoop)其它Cache的读写操作
⏹ 每个Cache line所处的状态根据本核和其它核的读写操作在4个状态间进行迁移。
22、Amdahl定律
23、基准程序
⏹ 衡量一个系统,可通过运行一个或一组真实应用− 应用程序要有代表性,覆盖现实世界中常见的情况− 应用程序负载(workload)也要有代表性,与实际情况比较吻合
⏹ 好的基准程序可以加速计算机的发展− 改进基准程序的性能应该对大多数程序有益
⏹ 好基准程序可以加速计算机的发展进程− 是有益于运行真实程序, 还是销售机器/发表论文?
⏹ 创造真正有益于 真实程序 的基准程序,而不是有益于 基准程序的基准程序
不同类别基准程序
⏹ (玩具Toy) 基准程序 −10-100 行 例如: sieve, puzzle, quicksort
⏹ 合成(Synthetic)基准程序-试图匹配真实工作负载的平均频度−例如, Whetstone, Dhrystone
⏹ 内核(Kernels)程序−时间密集(Time critical excerpts)−例如, Livermore loops,FFT,tree search
⏹ 真实程序(Actual workloads)−例如, gcc, spice
成功的基准程序:SPEC
基准测试程序: TPC
⏹ 事务处理性能委员会( Transaction Processing Performance Council ),由数10家以美、日、西欧的大公司创建的非盈利组织
⏹ 它的功能是制定商务应用基准程序(Benchmark)的标准规范、性能和价格度量,并管理测试结果的发布
⏹ TPC不给出基准程序代码,只给出基准程序标准规范(Standard Specification)。任何厂家或测试者都可根据规范,最优地构造出自己的系统(测试平台和测试程序)
⏹ 为保证测试结果的客观性,被测试者必须提交给TPC一套完整的报告(Full DisclosurReport),包括被测系统的详细配置、分类价格和包含五年维护费用在内的总价格
基准测试程序 LinPACK
⏹ 自20世纪70年代中期以来,国际上曾经开发过一批基于Fortran语言的求解线性代数方程组的子程序,于1979年正式发布了LinPACK包
⏹ 因为线性代数方程组在各个领域中应用甚广,所以该软件包就很自然地称为测试各种机器性能的测试程序
⏹ LinPACK测试的基准是用全精度的64位字长的子程序求解100阶线性方
程组的速度,测试的结果以Mflops(每秒百万次浮点运算)作为单位给出
⏹ 尽管LinPACK作为测试程序现在仍很有生命力,但作为实际求解线性代
数问题的软件包已经开始落伍。1992年推出了代替LinPACK的LAPACK,它使用了数值线性代数中最新,最精确的算法,同时采用了大型矩阵分解成小矩阵的方法从而可有效地使用存储器
面向嵌入式领域的 Benchmarks
⏹ 嵌入式系统由于其所面向领域的多样性和自身结构的多变特征,相应的基准测试程序发展不如PC和server那样清晰
⏹ 嵌入式系统和PC的评价指标不同, 最快的不一定是最好的
⏹ 传统上,嵌入式处理器厂商喜欢采用Dhrystone作为基准测试程序,但Dhrystone过于简单,且访存操作极少,不对存储系统构成任何压力,继续采用Dhrystone作为嵌入式处理器benchmark是非常不合时宜的
⏹ 新一代的嵌入式处理器benchmarks EEMBC,BDTI,MiBench,MediaBench
性能评测方法与工具
experiments经验型、analysis分析型、simulation模拟型、statistic统计型
本文来源:https://www.2haoxitong.net/k/doc/96b18721ce84b9d528ea81c758f5f61fb6362842.html
文档为doc格式