内存墙,指的是内存性能严重限制CPU性能发挥的现象。
在过去的20多年中,处理器的性能以每年大约55%速度快速提升,而内存性能的提升速度则只有每年10%左右。长期累积下来,不均衡的发展速度造成了当前内存的存取速度严重滞后于处理器的计算速度,内存瓶颈导致高性能处理器难以发挥出应有的功效,这对日益增长的高性能计算(High Performance Computing,HPC)形成了极大的制约。事实上,早在1994年就有科学家分析和预测了这一问题,并将这种严重阻碍处理器性能发挥的内存瓶颈命名为"内存墙"(Memorya Wall)。
网络名称 | 网络规模 | 节点度 | 网络直径 | 对剖宽度 | 对称 | 链路数 |
---|---|---|---|---|---|---|
线性阵列 | N N N | 2 2 2 | N − 1 N-1 N−1 | 1 1 1 | 非 | N − 1 N-1 N−1 |
环形 | N N N | 2 2 2 | N − 1 ( 单 向 ) ⌊ N / 2 ⌋ ( 双 向 ) N-1(单向)\\\lfloor{N}/2\rfloor(双向) N−1(单向)⌊N/2⌋(双向) | 2 2 2 | 是 | N N N |
2-D网孔 | ( N × N ) (\sqrt{N}\times\sqrt{N}) (N×N) | 4 4 4 | 2 ( N − 1 ) 2(\sqrt{N}-1) 2(N−1) | N \sqrt{N} N | 非 | 2 ( N − N ) 2(N-\sqrt{N}) 2(N−N) |
Illiac网孔 | ( N × N ) (\sqrt{N}\times\sqrt{N}) (N×N) | 4 4 4 | N − 1 \sqrt{N}-1 N−1 | 2 N 2\sqrt{N} 2N | 非 | 2 N 2N 2N |
2-D环绕 | ( N × N ) (\sqrt{N}\times\sqrt{N}) (N×N) | 4 4 4 | 2 ( ⌊ N / 2 ⌋ ) 2(\lfloor\sqrt{N}/2\rfloor) 2(⌊N/2⌋) | 2 N 2\sqrt{N} 2N | 是 | 2 N 2N 2N |
二叉树 | N N N | 3 3 3 | 2 ⌈ log N ⌉ − 1 2\lceil\log{N}\rceil-1 2⌈logN⌉−1 | 1 1 1 | 非 | N − 1 N-1 N−1 |
星形 | N N N | N − 1 N-1 N−1 | 2 2 2 | ⌊ N / 2 ⌋ \lfloor{N/2}\rfloor ⌊N/2⌋ | 非 | N − 1 N-1 N−1 |
超立方 | N = 2 n N=2^n N=2n | n n n | n n n | N / 2 N/2 N/2 | 是 | n N / 2 nN/2 nN/2 |
立方环 | N = k × 2 k N=k\times2^k N=k×2k | 3 3 3 | 2 k − 1 + ⌊ k / 2 ⌋ 2k-1+\lfloor{k/2}\rfloor 2k−1+⌊k/2⌋ | N / ( 2 k ) N/{(2k)} N/(2k) | 是 | 3 N / 2 3N/2 3N/2 |
完美嵌入(膨胀系数=1)
不完美嵌入(膨胀系数=2)
动态网络:用交换开关构成的,可按应用程序的要求动态地改变连接组态;典型的动态网络包括总线、交叉开关和多级互连网络等。
总线(Bus)实际上是连接处理器、存储模块和I/O 外围设备等的一组导线和插座。总线系统用以主设备(如处理器)和从设备(如存储器)之间的数据传输。公用总线以分时工作为基础,在多个请求情况下,总线的仲裁是重要的。
局部/本地总线(Local Bus):在印刷电路板上实现的总线
本地总线:CPU板级上的总线(习惯叫法)
存储器总线:存储器板级上的总线
数据总线:I/O 板级和通信板级上的总线。
系统总线:在底板上实现的,它为所有插入板之间的通信提供了通路。
局部/本地总线+存储器总线,将处理器与存储模块相连;
I/O总线+系统总线,将I/O设备、网卡等连接起来。
绝大多数标准总线都可低价构造单一处理系统(Unity Processor System)。在构造多处理器系统时,常使用多总线和层状总线。
板级、底板级和I/O级总线系统:
大型并行机系统一般可分为6类机器,SIMD计算机多为专用,其余的5种均属于多指令多数据流MIMD计算机。
属性 | PVP | SMP | MPP | DSM | cow |
---|---|---|---|---|---|
结构类型 | MIMD | MIMD | MIMD | MIMD | MIMD |
处理器类型 | 专用 | 定制 | 商用 | 商用 | 商用 |
互连网络 | 定制交叉开关 | 总线、交叉开关 | 定制网络 | 定制网络 | 商用网络(以太ATM) |
通信机制 | 共享变量 | 共享变量 | 消息传递 | 共享变量 | 消息传递 |
地址空间 | 单地址空间 | 单地址空间 | 多地址空间 | 单地址空间 | 多地址空间 |
系统存储器 | 集中共享 | 集中共享 | 分布非共享 | 分布共享 | 分布非共享 |
访存模型 | UMA | UMA | NORMA | NUMA | NORMA |
UMA(Uniform MemoryAccess)模型是均匀存储访问模型的简称,适于通用或分时应用。
对称多处理机SMP(SymmetricMultiprocessor):所有的处理器都能等同地访问所有I/O设备、能同样地运行执行程序(如操作系统内核和I/O服务程序等)时称为
非对称多处理机:只有一台 或一组处理器(称为主处理器),它能执行操作系统并能操纵I/O,而其余的处理器无I/O 能力(称为从处理器),只在主处理器的监控之下执行用户代码。
其特点是:
NORMA(No-RemoteMemoryAccess)模型是非远程存储访问模型的简称。在一个分布存储的多计算机系统中,如果所有的存储器都是私有的、仅能由其处理器所访问时就称为 NORMA。系统由多个计算节点通过消息传递互连网络连接而成,每个节点都是一台由处理器、本地存储器和/或I/O 外设组成的自治计算机。NORMA的特点是:
物理上分布的存储器从编程的观点看可以是共享的或非共享的
对称性:系统中任何处理器均可访问任何存储单元和I/O设备;
单地址空间: 单地址空间有很多好处,例如因为只有一个OS和DB等副本驻留在共享存储器中,所以OS可按工作负载情况在多个处理器上调度进程从而易达到动态负载平衡,又如因为所有数据均驻留在同一共享存储器中,所以用户不必担心数据的分配和再分配;
高速缓存及其一致性:多级高速缓存可支持数据的局部性,而其一致性可由硬件来增强;
低通信延迟:处理器间的通信可用简单的读/写指令来完成(而多计算机系统中处理器间的通信要用多条指令才能完成发送/接收操作)。目前大多数商用SMP系统都是基于总线连接的,占了并行计算机很大的市场
所有的 MPP均使用物理上分布的存储器,且使用分布的I/O也渐渐变多。节点间通过高速网络HSN(HighSpeedNetwork)相连。 每个节点包括:
MPP和 COW 的关键差别是节点间的通信,COW 使用标准的LAN,而 MPP使用高速、专用高带宽、低延迟的互连网络,无疑在通信方面优于 COW。
工作站机群COW(ClusterofWorkstations)是实现并行计算的一种新主流技术,是属于分布式存储的 MIMD并行计算机结构,系由工作站和互连网络两部分组成。由于这种结构用于并行计算的主要资源是工作站,所以工作站机群的名称便由此产生。工作站机群COW 这一名称,在早期的研究阶段,也曾被称为工作站网络NOW(NetworkofWorkstations)。
名称 | 符号 | 含意 | 单位 |
---|---|---|---|
机器规模 | n n n | 处理器的数目 | 无量纲 |
时钟速率 | f f f | 时钟周期长度的倒数 | M H z MHz MHz |
工作负载 | W W W | 计算操作的数目 | M f l o p Mflop Mflop |
顺序执行时间 | T i T_i Ti | 程序在单处理机上的运行时间 | s ( 秒 ) s(秒) s(秒) |
并行执行时间 | T n T_n Tn | 程序在并行机上的运行时间 | s ( 秒 ) s(秒) s(秒) |
速度 | R n = W / T n R_n=W/T_n Rn=W/Tn | 每秒百万次浮点运算 | M f l o p s Mflops Mflops |
加速 | S n = T 1 / T n S_n=T_1/T_n Sn=T1/Tn | 衡量并行机有多快 | 无量纲 |
效率 | E n = S n / n En=S_n/n En=Sn/n | 衡量处理器的利用率 | 无量纲 |
峰值速度 | R p e a k = n R ’ p e a k R_{peak}=nR’_{peak} Rpeak=nR’peak | 所有处理器峰值速度之积, R p e a k ′ R'_{peak} Rpeak′为一个处理器的峰值速度 | M f l o p s Mflops Mflops |
利用率 | U = R n / R p e a k U=R_n/R_{peak} U=Rn/Rpeak | 可达速度与峰值速度之比 | 无量纲 |
通信延迟 | t 0 t_0 t0 | 传送0一字节或单字的时间 | μ s \mu{s} μs |
渐近带宽 | r ∞ r_\infty r∞ | 传送长消息通信速率 | M B / s MB/s MB/s |
所谓工作负载(荷),就是计算操作的数目,通常可用执行时间、所执行的指令数目和所完成的浮点运算数三个物理量来度量它。
在无重叠操作的假定下,并行程序的执行时间 T n T_n Tn为:
T n = T c o m p u t + T p a r o + T c o m m T_n=T_{comput}+T_{paro}+T_{comm} Tn=Tcomput+Tparo+Tcomm
带 宽 = 操 作 的 存 储 长 度 × 时 钟 频 率 带宽=操作的存储长度\times时钟频率 带宽=操作的存储长度×时钟频率
较快的时钟频率和处理器中较高的并行操作,可获得较宽的带宽
条件:字长64位(8字节),时钟频率100MHz,单拍内可完成指令
指令流程:取2个字a,b,执行操作后送回寄存器,共涉及3个字(24字节)
S = W s + W p W s + W p p S=\frac{W_s+W_p}{W_s+\frac{W_p}{p}} S=Ws+pWpWs+Wp
将 W s + W p W_s+W_p Ws+Wp表示为 f + ( 1 − f ) f+(1-f) f+(1−f)得:
S = f + ( 1 − f ) f + 1 − f p = p 1 + f ( p − 1 ) S=\frac{f+(1-f)}{f+\frac{1-f}{p}}=\frac{p}{1+f(p-1)} S=f+p1−ff+(1−f)=1+f(p−1)p
上并行加速不仅受限于程序的串行分量,而且也受并行程序运行时的额外开销影响
S = 1 f S=\frac{1}{f} S=f1
S = 1 f + W o W S=\frac{1}{f+\frac{W_o}{W}} S=f+WWo1
它意味着随着处理器数目的无限增大,并行系统所能达到的加速之上限为 1 f \frac{1}{f} f1
当 p充分大时,S′与p几乎成线性关系,其斜率为1-f。
意味着随着处理器数目的增加,加速几乎与处理器数成比例的线性增加,串行比例 f不再是程序的瓶颈。
注意,Wo是p的函数,它可能随 p增大、减小或不变。一般化的 Gustafson 定律欲达到线性加速必须使 Wo随 p减小,但这常常是困难的。
S ′ ′ = f W + ( 1 − f ) G ( p ) W f W + ( 1 − f ) G ( p ) W p S''=\frac{fW+(1-f)G(p)W}{fW+(1-f)G(p)\frac{W}{p}} S′′=fW+(1−f)G(p)pWfW+(1−f)G(p)W
S ′ ′ = f + ( 1 − f ) G ( p ) f + ( 1 − f ) G ( p ) p S''=\frac{f+(1-f)G(p)}{f+(1-f)\frac{G(p)}{{p}}} S′′=f+(1−f)pG(p)f+(1−f)G(p)
其基本思想是只要存储空间许可,应尽量增大问题规模以产生更好或更精确的解(此时可能使执行时间略有增加)。换句话说,假若有足够的存储容量,并且规模可扩放的问题满足 Gustafson定律规定的时间要求,那么就有可能进一步增大问题规模求得更好或更精确的解。 ,它相应于计算负载比存储要求增加得快,此时Sun和Ni加速均比 Amdahl加速和 Gustafson加速为高。
所谓计算模型实际上就是硬件和软件之间的一种桥梁,使用它能够设计分析算法,在其上高级语言能被有效地编译且能够用硬件来实现。
并行随机存取机器,也称之为共享存储的SIMD模型,是一种抽象的并行计算模型。在这种模型中,假定存在着一个容量无限大的共享存储器;有有限或无限个功能相同的处理器,且其均具有简单的算术运算和逻辑判断功能;在任何时刻各处理器均可通过共享存储单元相互交换数据。
根据处理器对共享存储单元同时读、同时写的限制,PRAM 模型又可分为:
分相(Phase)PRAM 模型是一个异步的 PRAM 模型,简记之为APRAM,系由p个处理器组成,其特点是每个处理器都有其局存、局部时钟和局部程序;
是一种分布存储的、点到点通信的多处理机模型,其中通信网络由一组参数来描述,但它并不涉及到具体的网络结构,也不假定算法一定要用显式的消息传递操作进行描述。
对于有些问题,现有的串行算法恐难直接将其并行化,此时要从问题的描述出发,寻求可能的新途径,设计出一个新的并行算法。但这并不是说完全排除某些串行算法设计的基本思想,而是更着重从并行化的具体实现上开辟新的设计方法。
所谓“借用法”是指借用已知的某类问题的求解算法来求解另一类问题。不但要从问题求解方法的相似性方面仔细观察,寻求问题解法的共同点;而且所借来的方法要用得合算,效率要高,从而能达借用的目的。
划分时关键在于如何将问题进行分组,使得子问题较容易并行求解,或者子问题的解较容易被组合成原问题的解。
假定待处理的序列长为n,现有p台处理器,一种最基本的划分方法就是均分划分(UniformPartition),系将n个元素分割成p段,每段含有n/p个元素且分配给一台处理器。
假定待处理的序列长为n,现欲将其分段处理。取每第ilogn(i=1,2,…)个元素作为划分元素,而将序列划分成若干段,然后分段处理之。
欲从长为n的序列中选取前m个最小者,可以将长为n的序列划分成等长的一些组,每组中的元素数应大于或等于m(最后一组除外)。然后各组并行处理。
所谓划分,就是使用域分解或功能分解的办法将原计算问题分割成一些小的计算任务,以充分揭示并行执行的机会。
由划分所产生的诸并行执行的任务,一般而言都不能完全独立执行,一个任务中的计算可能需要用到另一个任务中的数据,从而就产生了通信要求。所谓通信,就是为了进行并行计算,诸任务之间所需进行的数据传输。
从抽象转到具体,即重新考察在划分和通信阶段所作的抉择,力图得到一个在某一类并行机上能有效执行的并行算法。 目的是通过合并小尺寸的任务来减少任务数,但它仍可能多于处理器的数目。
在设计的最后阶段,我们要指定每个任务到哪里去执行,此即映射(Mapping)。开发映射的主要目的是减少算法的总的执行时间。