44 lines
1.8 KiB
Markdown
44 lines
1.8 KiB
Markdown
---
|
||
title: 2024-2025学年下学期期末
|
||
---
|
||
|
||
## 2025春季学期并行程序设计期末考试试卷(回忆版)
|
||
|
||
### 选择题
|
||
|
||
选择题都较简单, 不做记录.
|
||
|
||
### 填空题
|
||
|
||
1. 均匀储存访问模型中, 处理器访问储存器的时间\_\_\_\_, 物理储存器被所有处理器\_\_\_\_, 每台处理器带\_\_\_\_缓存.
|
||
|
||
2. MPI的点到点通信模式包括:标准通信\_\_\_\_, \_\_\_\_, \_\_\_\_, \_\_\_\_.
|
||
|
||
3. 四种循环转换包括:循环交换, 循环分块, \_\_\_\_, \_\_\_\_.
|
||
|
||
4. MPI集合通信的三个主要功能是:通信, \_\_\_\_, \_\_\_\_.
|
||
|
||
### 简答题
|
||
|
||
1. 简述 OpenMP 的 Fork-Join 工作模式.
|
||
|
||
2. 分布式内存系统与共享内存系统的核心区别是什么?
|
||
|
||
3. MPI阻塞接收与非阻塞接收的区别是什么?
|
||
|
||
4. 临界区嵌套会导致什么问题? 如何解决?
|
||
|
||
5. 简述信号量(Semaphore)实现 Barrier 的方法.
|
||
|
||
### 编程题
|
||
|
||
1. 哲学家用餐问题, 如何用互斥锁与信号量解决哲学家用餐问题, 保证不会出现死锁和饥饿? (注:此题只需写伪代码, 不需要严格的参照接口定义)
|
||
|
||
2. 多个进程分别拥有私有的数组, 现在要计算各个进程中所有数组元素的平均值.
|
||
|
||
使用MPI_Allreduce实现函数void Global_average(double loc_arr[], int loc_n, MPI_Comm comm, double* global_avg), 先计算局部总和与元素总数, 再归约计算全局总和与总元素数, 最后算平均值, 运行结束后所有进程中的global_avg都应该储存相同的结果, 即全局平均值.
|
||
|
||
(其中loc_arr[]为每个进程拥有的局部数组, loc_n 为局部数组的大小, comm 为通讯器, global_avg 储存最终结果)
|
||
|
||
(注:本题下方提供了会用到的 MPI 函数定义以供查阅, 不需要特意背诵接口. 不过奇怪的是考试中唯独没有提供 MPI_Allreduce 的定义, 比较诡异)
|