2019-2020学年下学期期末
2019-2020学年下学期期末试卷(A)
一、不定项选择题(选择一个或多个正确选项,20 分,每题 4 分)
-
对并行程序描述正确的是( )。
A. 减少所有系统开销
B. 要求资源共享
C. 提高系统运行速度和处理能力
D. 电源管理能力更强
-
以下属于读后写的数据依赖关系的是( )。
A. ;
B. ;
C. ;
D. ;
-
对于共享内存系统描述不正确的是( )。
A. 处理器拥有自己独特的地址空间
B. 处理器间以隐式的通信完成数据共享
C. 线程间的协调通过共享变量的锁和屏障实现
D. 每个处理器可以访问每个内存空间
-
在 OpenMP 中,下列哪些是共享的( )。
A. shared variables
B. loop index
C. static variables
D. private variables
-
以下关于消息传递的描述中,正确的是( )。
A. 消息传递是共享内存并行编程的主要替代方案
B. 消息传递没有数据竞争
C. 消息传递是不可移植的
D. 对消息传递库的调用在单处理器上运行
二、简答题(30 分,每小题 10 分)
-
请简述什么是死锁?
-
请简述 cache 映射的三种方式的原理。
-
请简述指令级并行的流水线和多发射机制,及其两种多发射方法。
三、分析题(30 分,每小题 15 分)
-
某个程序需要运行 条指令来解决一个特定问题,一个单处理器系统可以在 秒(大约 11.6 天)内完成。所以,一个单处理器系统平均每秒运行 条指令。现在假设程序已经实现并行化,可以在分布式内存系统上运行。该并行程序使用 个处理器。每个处理器执行 条指令并必须发送 条消息。执行该程序时,不会有额外的开销,即每个处理器执行完所有的指令并发送完所有的消息之后,程序就完成了,而不会有由诸如等待消息等事件所产生的延迟。那么,
-
假设发送一条消息需要耗费 秒。如果程序使用 1000 个处理器,每个处理器的速度和单个处理器运行串行程序的速度一样,那么该程序的运行需要多少时间?
-
假设发送一条消息需要耗费 秒。如果程序使用 1000 个处理器,那么该程序的运行需要多少时间?
-
-
假定
comm_sz=8,n=16。-
画一张图来说明进程 0 要分发 个元素的数组,怎样使用拥有
comm_sz个进程的树形结构的通信来实现 MPI_Scatter。 -
画一张图来说明原先分布在
comm_sz个进程间的 个数组元素由进程 0 保存,怎样使用树形结构的通信来实现 MPI_Gather。
-
四、程序题(20 分)
- 使用 OpenMP 实现生产者-消费者程序,其中一些线程是生产者,另外一些线程是消费者。它们将读出的文本行插入到一个共享的队列中。消费者从队列中取出文本行,并对文本行进行分词。符号是被空白符分开的单词,当消费者发现一个单词后,它将该单词输出到 stdout。(要求:输出的单词需要给出是哪个线程输出的)