MPI并行计算期末考试复习题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
并行计算机分类
什么是SIMD并行计算机?
可以同时执行一条指令处理多个数据的计算机
什么是MIMD并行计算机?
可以同时执行多条指令处理多个数据的计算机
什么是SPMD并行计算机?
同时执行一个程序处理多个数据的计算机
什么是MPMD并行计算机?
同时执行多个程序处理多个数据的计算机
什么是分布式内存并行计算机?
各处理器不共享内存的并行计算机
什么是共享内存并行计算机?
处理器共享内存的并行计算机
并行编程模式
隐式并行、数据并行、消息传递、共享变量
现在串行编程语言几乎都是高级语言,为什么在并行计算领域编程语言却还相对级别较低?
并行计算目前还缺乏统一的模型和标准
你知道的并行语言有哪些?
HPF,各种并行C,并行C++,并行PASCAL
你认为串行语言和并行语言的区别有哪些?
是否提供并行的结构,是否提供并行的语义
并行算法的分类是怎样的?
粗粒度/细粒度并行算法,同步/异步并行算法
同步并行算法在具有什么特点的并行计算机上可以高效实现?SIMD类并行计算机
粗粒度的并行算法在什么条件下性能优于细粒度的并行算法?
并行的粒度越小就有可能开发更多的并行性提高并行度这是有利的方面但是另一个不利的方面就是并行的粒度越小通信次数和通信量就相对增多这样就增加了额外的开销,因此合适的并行粒度需要根据计算量、通信量、计算速度、通信速度进行综合平衡这样才能够取得高效率。
一个好的并行算法的前提是什么?
一个好的并行算法要既能很好地匹配并行计算机硬件体系结构的特点又能反映问题内在并行性
如何设计适合机群系统的并行算法?
对于机群系统一次通信的开销要远远大于一次计算的开销,因此要尽可能降低通信的次数或将两次通信合并为一次通信,基于同样的原因,机群计算的并行粒度不可能太小,因为这样会大大增加通信的开销,如果能够实现计算和通信的重叠那将会更大地提高整个程序的执行效率。
并行算法的一般设计过程:PCAM设计过程
该过程分为四步:任务划分、通信分析、任务组合和处理器映射,简称PCAM设计过程。
MPI是不是一门并行语言?为什么?
不是,它只是一个消息传递库
目前MPI支持哪些语言?
FORTRAN 77/C/Fortran90/C++
MPI的三个主要目标是什么?
功能强/移植性好/性能高
目前MPI的主要免费实现有哪些?
MPICH/LAM/CHIMP
MPI环境定义的三种缓冲区
应用缓冲区、系统缓冲区、用户向系统注册的通信用缓冲区。
MPI程序一般分为几个部分?
1 头文件
2 变量声明
3 程序开始
4 程序体
5 程序结束
MPI程序中的输出语句和一般串行程序中输出语句的执行结果有什么不同?
MPI程序中的输出语句每一个进程都执行,执行时有几个进程就有几条输出语句,而串行程序中输出语句只有本进程输出结果。
不同进程对同一个内容的输出,其顺序是什么?
是随机的。
编写一个C+MPI的程序,实现每一个进程都打印出自己的进程号,总的进程数,本进程所在的机器名以及"SAY HELLO TO
MPI"。
#include "mpi.h"
#include
#include
int main(int argc,char **argv)
{
int myid, numprocs;
int namelen;
char processor_name[MPI_MAX_PROCESSOR_NAME];
MPI_Init(&argc,&argv);/*程序初始化*/
MPI_Comm_rank(MPI_COMM_WORLD,&myid);/*得到当前进程号*/
MPI_Comm_size(MPI_COMM_WORLD,&numprocs);/*得到总的进程数*/
MPI_Get_processor_name(processor_name,&namelen);/*得到机器名*/
fprintf(stderr," Process %d of %d SAY HELLO TO MPI on %s\n",myid, numprocs, processor_name);
MPI_Finalize();/*结束*/
return 0
}
为了实现基本的MPI通信功能,至少需要几个MPI调用?
不多于6个
MPI程序的第一条和最后一条可执行语句应为什么语句,如果不是这些语句,会导致什么样的后果?
初始化和结束语句,否则后果不可预测
MPI消息传递包括哪几个阶段?
组装,传递,拆卸
MPI消息的组成是怎样的?
消息信封和消息内容
任意源和任意标识的作用是什么?
提供对不特定源和标识的匹配
编写一个简单的实现发送和接收功能的程序。
#include "mpi.h"
main( argc, argv )
int argc;
char **argv;
{
char message[20];
int myrank;
MPI_Init( &argc, &argv );
/* MPI程序的初始化*/
MPI_Comm_rank( MPI_COMM_WORLD, &myrank );
/* 得到当前进程的标识*/
if (myrank == 0) /* 若是0 进程*/
{
/* 先将字符串拷贝到发送缓冲区message中,然后调用MPI_Send语句将它发出,用strlen(message)指定消息的长度,用MPI_CHAR指定消息的数据类型,1指明发往进程1,使用的消息标识是99,MPI_COMM_WORLD是包含本进程(进程0)和接收消息的进程(进程1)的通信域。发送方和接收方必须在同一个通信域中。由通信域来统一协调和控制消息的发送和接收*/ strcpy(message,"Hello, process 1");
MPI_Send(message, strlen(message), MPI_CHAR, 1, 99,MPI_COMM_WORLD);
}
else if(myrank==1) /* 若是进程1 */
{
/*进程1直接执行接收消息的操作,这里它使用message作