- 2024 年春季学期期末考题回顾
- 一、名词解释
- 二、简答题
- 2007 年简答题
- 2008 年简答题
- 简答题答案
- 三、分析题
- 1. MESI 和 Dragon 协议计算给定内存存取序列所需的时钟周期
- 2007年第一题及参考答案
- 例题及解答
- 2. 顺序一致性存储模型,判断进程的合法输出
- 2007年第二题及参考答案
- 3. 磁盘预取
- 2007年第三题及参考答案
- 积极预取
- 例题及解答
- 4. 双路径和多路径多播路由
- 2008年第三题及参考答案
- 双路径和多路径多播路由算法
- 例题及解答
考试开卷。
教材:《并行计算机体系结构》陈国良 吴俊敏 等 第一版
(可以在西区中文书库四层借到,高新区图书馆也有)
关于开卷考试资料,放到高新图书馆一层打印机旁边的图书漂流角了,等有缘人~
2024 年春季学期期末考题回顾
- 名词解释(16分 10个名词),和往年差不多,书上都能找到,就像 07 年考了 S I M D SIMD SIMD,然后今年考了 M I M D MIMD MIMD,07 年考了 T F L O P S TFLOPS TFLOPS,今年考了 E F L O P S EFLOPS EFLOPS ( E i g a b i l l i o n Eiga\ billion Eiga billion万亿次)。
- 简答题(6题*9分),考了列举并行计算机的体系结构,描述高速缓存一致性存储模型(COMA), L L LL LL 和 s c sc sc 实现票锁,双路径和多路径路由,何为多米诺效应及解决方案,顺序一致性模型不合法的输出(往年考过的原题)。
在顺序一致性存储模型下,有三个并行执行的进程如下所示,试问哪些 ( u , v , w ) (u,v,w) (u,v,w) 不是一个合法的输出?并加以解释。( A , B , C A,B,C A,B,C 初始值为 0)
P 1 P1 P1 | P 2 P2 P2 | P 3 P3 P3 |
---|---|---|
A
=
1
A=1
A=1 C = 1 C=1 C=1 u = B u=B u=B |
B
=
1
B=1
B=1 C = 2 C=2 C=2 v = A v=A v=A |
B
=
2
B=2
B=2 A = 2 A=2 A=2 w = C w=C w=C |
【参考答案】包含两个 0 的肯定不是合法输出。因为只可能
(
u
,
v
,
w
)
(u,v,w)
(u,v,w) 中一条赋为 0,其他必然非 0。
有 0 的,必然执行在前面,但
(
0
,
1
,
1
)
(0,1,1)
(0,1,1) 一定不可能,
u
=
B
u=B
u=B 一定在
P
2
P2
P2 和
P
3
P3
P3 前执行,则
A
A
A、
C
C
C 不可能都为 1。
- 分析题只有两题(2题*15分),第一题是 M E S I MESI MESI 和 D r a g o n Dragon Dragon 计算给定序列的时钟周期,第二题是推导蝶式网络 M I N MIN MIN 的自路由标记。
一、名词解释
二、简答题
2007 年简答题
- 请列举主要的并行计算机访存模型。
- 请比较 A m d a h l Amdahl Amdahl 定律和 G u s t a f s o n Gustafson Gustafson 定律。
- 请给出二维网格中最小负优先路由算法。
- 请描述立方网络中的自路由算法。
- 假设处理器提供 L L LL LL 和 s c sc sc 原子指令,请给出一个实现 A r r a y − b a s e d Array-based Array−based 锁的指令序列。(其他普通指令可任意使用,加上注释)
- 请简单比较基于侦听的高速缓存一致性协议和基于目录的高速缓存一致性协议。
- 请回答为何并行检查点操作中会差生多米诺效应?如何解决?
- 请回答何为机群中的单一系统映像以及它主要包括哪些服务?
2008 年简答题
- 请描述并行计算机中主要的访存结构模型。
- 请比较描述可扩放性评价中的几种评价标准。
- 请举例描述并行程序设计中任务划分的几种主要方法。
- 请给出二维网格中最小北向最后算法。
- 请举例说明为何下图所示的网络不是非阻塞网络。
- 请简单比较基于侦听的高速缓存一致性协议和基于目录的高速缓存一致性协议。
- 请比较描述 S M P SMP SMP 中不同的锁机制。
- 请描述基本的故障恢复策略。并举例说明何为非一致的全局检查点。
简答题答案
三、分析题
1. MESI 和 Dragon 协议计算给定内存存取序列所需的时钟周期
2007年第一题及参考答案
假设在两种 SMP 机器中分别实现了 Illinois MESI 协议和 Dragon 协议,对于以下给定的内存存取序列,比较在这两种机器上的执行代价,并分析其性能差异的原因。
序列 r1 r1 r1 r2 r2 r2 r3 r3 r3 w1 w1 w1 w2 w1 w1 w3 r3
;
所有的存取操作都针对同一个内存位置,r/w 代表读/写,数字代表发出该操作的处理器。假设所有高速缓存在开始时是空的,采用写分配策略,使用下面的性能模型:读/写高速缓存命中,代价 1 个时钟周期;缺失引起简单的总线事务(如 BusUpgr,BusUpd),60 个时钟周期;缺失引起整个高速缓存块传输,90 时钟周期。
【参考答案】
MESI 协议: T H H T H H T H H B H H T T H T H
共
6
T
+
1
B
+
10
H
=
610
6T+1B+10H=610
6T+1B+10H=610 时钟周期
Dragon 协议: T H H T H H T H H B B B B B B B H
,共
3
T
+
7
B
+
7
H
=
697
3T+7B+7H=697
3T+7B+7H=697 时钟周期
例题及解答
两种 基于总线的共享内存多处理机 分别实现了 Illinois MESI 协议和 Dragon 协议,对于给定的每个内存存取序列,比较在这两种多处理机上的执行代价,并就序列及一致性协议的特点来说明为什么有这样的性能差别。
序列 ①r1 w1 r1 w1 r2 w2 r2 w2 r3 w3 r3 w3
;
序列 ②r1 r2 r3 w1 w2 w3 r1 r2 r3 w3 w1
;
序列 ③r1 r2 r3 r3 w1 w1 w1 w1 w2 w3
;
所有的存取操作都针对同一个内存位置,r/w 代表读/写,数字代表发出该操作的处理器。假设所有高速缓存在开始时是空的,并且使用下面的性能模型:读/写高速缓存命中,代价 1 个时钟周期;缺失引起简单的总线事务(如 BusUpgr,BusUpd),60 个时钟周期;缺失引起整个高速缓存块传输,90 时钟周期。假设所有 高速缓存是写回式,并且 MESI 协议中使用 BusUpgr 事务。
【答案】
读写命中、总线事务、块传输分别简记为 H H H、 B B B、 T T T。
MESI 协议:
①T H H H T B H H T B H H
共
2
B
+
7
H
+
3
T
=
397
2B+7H+3T=397
2B+7H+3T=397 时钟周期
②T T T B T T T T H B T
共
2
B
+
1
H
+
8
T
=
841
2B+1H+8T=841
2B+1H+8T=841 时钟周期
③T T T H B H H H T T
共
1
B
+
4
H
+
5
T
=
514
1B+4H+5T=514
1B+4H+5T=514 时钟周期。
Dragon协议:
①T H H H T B H B T B H B
共
4
B
+
5
H
+
3
T
=
515
4B+5H+3T=515
4B+5H+3T=515 时钟周期
②T T T B B B H H H B B
共
5
B
+
3
H
+
3
T
=
573
5B+3H+3T=573
5B+3H+3T=573 时钟周期
③T T T H B B B B B B
共
6
B
+
1
H
+
3
T
=
631
6B+1H+3T=631
6B+1H+3T=631 时钟周期。
由结果得出,①、③ 序列用 MESI 协议时间更少,而 ② 序列用 Dragon 协议时间更少。
综上可知,
- 如果同一块在写操作之后频繁被多个核读操作采用 Dragon 协议更好,因为 Dragon 协议写操作后会更新其它核副本。
- 如果多次连续对同一块进行写操作 MESI 协议更好,因为它不需要更新其它核副本,只需要总线事务无效其它核即可。
【理解】
对于序列 ①r1 w1 r1 w1 r2 w2 r2 w2 r3 w3 r3 w3
,
MESI 协议:T H H H T B H H T B H H
共
2
B
+
7
H
+
3
T
=
397
2B+7H+3T=397
2B+7H+3T=397 时钟周期
初始缓存为空,r1
读缺失造成 T
(
P
1
P1
P1 从内存读该缺失块), w1
写命中 H
, r1
读命中 H
, w1
写命中 H
, r2
读缺失造成 T
(
P
2
P2
P2 从内存读该缺失块), w2
由于需要总线通知有该块的其他处理器
P
1
P1
P1 失效而造成 B
, r2
读命中 H
, w2
写命中 H
(此时不再有其他处理器有该块,
P
1
P1
P1 虽有但已失效,故不再触发总线事务)。
Dragon协议:T H H H T B H B T B H B
共
4
B
+
5
H
+
3
T
=
515
4B+5H+3T=515
4B+5H+3T=515 时钟周期
初始缓存为空, r1
读缺失造成 T
(
P
1
P1
P1 从内存读该缺失块), w1
写命中 H
, r1
读命中 H
, w1
写命中 H
, r2
读缺失造成 T
(
P
2
P2
P2 从内存读该缺失块), w2
由于需要总线通知有该块的其他处理器
P
1
P1
P1 更新而造成 B
, r2
读命中 H
, w2
由于需要总线通知
P
1
P1
P1 更新而造成 B
。
缓存从空到有,是从内存中读取数据,而从无效到有,可能是来自其他处理器的该块。
【总结】MESI 和 Dragon 的不同之处在于,假如 P 1 P1 P1 有该块, P 2 P2 P2 修改该块后,MESI 是让 P 1 P1 P1 中的该块失效,而 Dragon 是让 P 1 P1 P1 中的该块更新为新的值,两者均会触发总线事务。
- 若现在
P
1
P1
P1 读该块,MESI 则会
P
1
P1
P1 读缺失
T
,而 Dragon 则会 P 1 P1 P1 读命中H
。 - 若现在
P
2
P2
P2 再次修改该块, MESI 则会
P
2
P2
P2 写命中
H
不会触发总线事务,而 Dragon 仍会触发总线事务去更新 P 1 P1 P1 中的该块B
。
2. 顺序一致性存储模型,判断进程的合法输出
2007年第二题及参考答案
在 DSM 系统的顺序一致性存储模型下,有三个并行执行的进程如下所示,试问 001110
是不是一个合法的输出?并加以解释。
【参考答案】
不是一个合法输出。
考虑顺序一致性存储模型,每个进程的程序序会被维护,那么无论哪个进程最后执行 Print
语句,则之前的 a=1,b=1,c=1
都已经完成,所以输出的最后两项必为 11
,所以 001110
不是合法输出。
3. 磁盘预取
2007年第三题及参考答案
假设一个系统带有两个磁盘和一个大小为三个块的缓存。从磁盘读一个块要两个单位时间。每个磁盘只有一个块能被并行存取。对于块的请求序列 F 1 F1 F1、 A 1 A1 A1、 B 2 B2 B2、 C 1 C1 C1、 D 2 D2 D2、 E 1 E1 E1、 F 1 F1 F1,其中字母表示磁盘中的块,数字表示该块存储在哪个磁盘上。请给出一种预取策略使得最多只要 11 11 11 个周期就可以完成整个请求序列。
【参考答案】
T 1 T1 T1 | T 2 T2 T2 | T 3 T3 T3 | T 4 T4 T4 | T 5 T5 T5 | T 6 T6 T6 | T 7 T7 T7 | T 8 T8 T8 | T 9 T9 T9 | T 10 T10 T10 | T 11 T11 T11 | |
---|---|---|---|---|---|---|---|---|---|---|---|
服务块 | F 1 F1 F1 | A 1 A1 A1 | B 2 B2 B2 | C 1 C1 C1 | D 2 D2 D2 | E 1 E1 E1 | F 1 F1 F1 | ||||
块1 | F 1 F1 F1 | F 1 F1 F1 | F 1 F1 F1 | F 1 F1 F1 | C 1 C1 C1 | C 1 C1 C1 | C 1 C1 C1 | C 1 C1 C1 | F 1 F1 F1 | F 1 F1 F1 | F 1 F1 F1 |
块2 | B 2 B2 B2 | B 2 B2 B2 | B 2 B2 B2 | B 2 B2 B2 | B 2 B2 B2 | B 2 B2 B2 | E 1 E1 E1 | E 1 E1 E1 | E 1 E1 E1 | E 1 E1 E1 | E 1 E1 E1 |
块3 | A 1 A1 A1 | A 1 A1 A1 | A 1 A1 A1 | D 2 D2 D2 | D 2 D2 D2 | D 2 D2 D2 | D 2 D2 D2 | D 2 D2 D2 | D 2 D2 D2 |
积极预取
【定义】一旦当磁盘准备好后,就进行预取,将内存中最远的将来才用到的数据块替换出去。
例题及解答
假设一个系统,
- 带有两个磁盘和一个大小为三个块的缓存。
- 从磁盘读一个块要两个单位时间。
- 每个磁盘只有一个块能被并行存取。
下表显示了对块的请求序列为 F 1 F1 F1、 A 1 A1 A1、 B 2 B2 B2、 C 1 C1 C1、 D 2 D2 D2、 E 1 E1 E1、 F 1 F1 F1 时磁盘存取的调度序列。
字母表示磁盘中的块,数字表示该块存储在哪个磁盘上。
该表显示使用积极预取算法要完成该请求序列需要 12 12 12 个单位时间。
【答案】
【理解】
- 两个磁盘分别为 磁盘 1 1 1 和 磁盘 2 2 2,三个缓存块为 块 1 1 1、块 2 2 2、块 3 3 3。
- F 1 F1 F1 表示数据块 F F F 存储在磁盘 1 1 1 上, D 2 D2 D2 表示数据块 D D D 存储在磁盘 2 2 2 上。
- 表中 T 1 T 2 T_1\ T_2 T1 T2 T 1 T1 T1 1 1 1 F 1 F1 F1 ,表示在第一二个单位时间内预取磁盘 1 1 1 上的数据块 F F F 到缓存块 1 1 1 中。
- 因为从磁盘读一个块要两个单位时间,所以表中预取时都是 F 1 F 1 F1\ F1 F1 F1、 B 2 B 2 B2\ B2 B2 B2 诸如此类连续两个单位时间。
- 由于每个磁盘只有一个块能被并行存取,所以在前两个单位时间,从磁盘 1 1 1 预取了数据块 F F F,所以就不能同时预取也在磁盘 1 1 1 上的数据块 A A A 了,但是可以预取磁盘 2 2 2 上的数据块 B B B。
大体流程:
按照请求序列 F 1 F1 F1、 A 1 A1 A1、 B 2 B2 B2、 C 1 C1 C1、 D 2 D2 D2、 E 1 E1 E1、 F 1 F1 F1,
- 首先要请求数据块 F F F 和 A A A,但是它们都在磁盘 1 1 1 上,每个磁盘只能并行存取一个块,所以先预取块 F F F,即 T 1 T 2 T1\ T2 T1 T2 预取磁盘 1 1 1 中的数据块 F F F 到缓存块 1 1 1 中,即 F 1 F 1 F1\ F1 F1 F1。 T 1 T 2 T1\ T2 T1 T2 可以同时预取磁盘 2 2 2 中的数据块 B B B 到缓存块 2 2 2 中。
- 这样 T 3 T3 T3 就可以请求 F 1 F1 F1,由于此时完成了对磁盘 1 1 1 上 F F F 的预取,所以可以开始预取磁盘 1 1 1 中的数据块 A A A 到缓存块 3 3 3,这需要 T 3 T 4 T3\ T4 T3 T4 两个单位时间。
- 在 T 4 T4 T4 时,可以开始对磁盘 2 2 2 上 D D D 的预取,因为在 T 2 T2 T2 结束时完成了对磁盘 2 2 2 上 B B B 的预取,不冲突。此时缓存块已满,替换掉未来最远才用到的缓存块 F 1 F1 F1。
- T 5 T5 T5 时请求预取完成的 A 1 A1 A1, T 6 T6 T6 时请求早已预取完成并在缓存块中等待多时的 B 2 B2 B2。
- ……
4. 双路径和多路径多播路由
2008年第三题及参考答案
给出 6 × 6 6\times6 6×6 网格中双路径和多路径多播路由的路径。源节点为 ( 2 , 4 ) (2,4) (2,4),目标节点集为 ( 1 , 0 ) ( 4 , 0 ) ( 0 , 1 ) ( 4 , 1 ) ( 2 , 2 ) ( 3 , 2 ) ( 0 , 3 ) ( 5 , 3 ) ( 4 , 4 ) ( 1 , 5 ) ( 5 , 5 ) (1,0)\ (4,0)\ (0,1)\ (4,1)\ (2,2)\ (3,2)\ (0,3)\ (5,3)\ (4,4)\ (1,5)\ (5,5) (1,0) (4,0) (0,1) (4,1) (2,2) (3,2) (0,3) (5,3) (4,4) (1,5) (5,5)。
【参考答案】
双路径和多路径多播路由算法
双路径:
Step1. 从 0 开始给每一个节点编号。
Step2. 划分 D H D_H DH 、 D L D_L DL,其中 D H = { i d > 源 i d } D_H=\{id > 源 id\} DH={id>源id}(按升序), D L = { i d < 源 i d } D_L=\{id < 源 id\} DL={id<源id}(按降序)。
Step3. 分别从源节点向 D H D_H DH、 D L D_L DL 中挨个目的节点到达,先沿 X X X 后沿 Y Y Y。(先沿 X X X 走到目的节点同列,再沿 Y Y Y 走到目的节点同行)分别到 D H D_H DH 、 D L D_L DL 中的最后一个目的节点时停下。
多路径:
与双路径的不同之处在于,将 D H D_H DH 进一步细分为 D H 1 D_{H_1} DH1和 D H 2 D_{H_2} DH2,将 D L D_L DL 进一步细分为 D L 1 D_{L_1} DL1 和 D L 2 D_{L_2} DL2。
细分方法是:
- 将 D H D_H DH 区域的节点,即编号大于源节点编号的节点们,用两个方框(分别向上和向左)框开。
- 将 D L D_L DL 区域的节点,即编号小于源节点编号的节点们,用两个方框(分别向下和向右)框开。
例题及解答
给出 6X6 网格中 双路径和多路径多播路由的路径。源节点为(4,3),目标节点集为(0,0),(4,0),(5,1)(3,2)(0,2)(5,3)(0,3)(3,4)(1,5)(5,5)。
【答案】
双路径多播路由图:【理解】
Step1. 按图示从 0 编号每一个节点。
Step2. 划分 D H = { i d > 19 } = { 23 , 27 , 30 , 34 } D_H=\{id>19\}=\{23,27,30,34\} DH={id>19}={23,27,30,34}, D L = { i d < 19 } = { 18 , 15 , 12 , 6 , 4 , 0 } D_L=\{id<19\}=\{18,15,12,6,4,0\} DL={id<19}={18,15,12,6,4,0}。
Step3. 从源节点 19 19 19 出发,往 D H D_H DH ,依次到达目标节点 23 → 27 → 30 → 34 23→27→30→34 23→27→30→34。从源节点 19 19 19 出发,往 D L D_L DL,依次到达目标节点 18 → 15 → 12 → 6 → 4 → 0 18→15→12→6→4→0 18→15→12→6→4→0。
- 从 23 23 23 到 27 27 27,虽然不在同一列,但是无法沿 X X X 移动(不能回头),只能先向上,再向右至 27 27 27。从 18 18 18 到 15 15 15 同理。
- 从 27 27 27 到 30 30 30,先沿 X X X 向右至与 30 30 30 同一列,再沿 Y Y Y 向上至与 30 30 30 同一行。
多路径多播路由图:
【理解】
如图,将 D H D_H DH 向上框得到 D H 1 D_{H_1} DH1 区域,向左框得到 D H 2 D_{H_2} DH2 区域。
将 D L D_L DL 向下框得到 D L 1 D_{L_1} DL1 区域,向右框得到 D L 2 D_{L_2} DL2 区域。
从 27 27 27 到 34 34 34,就不再是从 27 27 27 到 30 30 30 到 34 34 34 了,都要在自己的区域范围内行动。