良心出品MPI并行计算期末考试复习题.docx

上传人:b****1 文档编号:2234393 上传时间:2023-05-03 格式:DOCX 页数:13 大小:22.18KB
下载 相关 举报
良心出品MPI并行计算期末考试复习题.docx_第1页
第1页 / 共13页
良心出品MPI并行计算期末考试复习题.docx_第2页
第2页 / 共13页
良心出品MPI并行计算期末考试复习题.docx_第3页
第3页 / 共13页
良心出品MPI并行计算期末考试复习题.docx_第4页
第4页 / 共13页
良心出品MPI并行计算期末考试复习题.docx_第5页
第5页 / 共13页
良心出品MPI并行计算期末考试复习题.docx_第6页
第6页 / 共13页
良心出品MPI并行计算期末考试复习题.docx_第7页
第7页 / 共13页
良心出品MPI并行计算期末考试复习题.docx_第8页
第8页 / 共13页
良心出品MPI并行计算期末考试复习题.docx_第9页
第9页 / 共13页
良心出品MPI并行计算期末考试复习题.docx_第10页
第10页 / 共13页
良心出品MPI并行计算期末考试复习题.docx_第11页
第11页 / 共13页
良心出品MPI并行计算期末考试复习题.docx_第12页
第12页 / 共13页
良心出品MPI并行计算期末考试复习题.docx_第13页
第13页 / 共13页
亲,该文档总共13页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

良心出品MPI并行计算期末考试复习题.docx

《良心出品MPI并行计算期末考试复习题.docx》由会员分享,可在线阅读,更多相关《良心出品MPI并行计算期末考试复习题.docx(13页珍藏版)》请在冰点文库上搜索。

良心出品MPI并行计算期末考试复习题.docx

良心出品MPI并行计算期末考试复习题

并行计算机分类

什么是SIMD并行计算机?

可以同时执行一条指令处理多个数据的计算机

什么是MIMD并行计算机?

可以同时执行多条指令处理多个数据的计算机

什么是SPMD并行计算机?

同时执行一个程序处理多个数据的计算机

什么是MPMD并行计算机?

同时执行多个程序处理多个数据的计算机

什么是分布式内存并行计算机?

各处理器不共享内存的并行计算机

什么是共享内存并行计算机?

处理器共享内存的并行计算机

并行编程模式

隐式并行、数据并行、消息传递、共享变量

现在串行编程语言几乎都是高级语言,为什么在并行计算领域编程语言却还相对级别较低?

并行计算目前还缺乏统一的模型和标准

你知道的并行语言有哪些?

HPF,各种并行C,并行C++,并行PASCAL

你认为串行语言和并行语言的区别有哪些?

是否提供并行的结构,是否提供并行的语义

并行算法的分类是怎样的?

粗粒度/细粒度并行算法,同步/异步并行算法

同步并行算法在具有什么特点的并行计算机上可以高效实现?

SIMD类并行计算机

粗粒度的并行算法在什么条件下性能优于细粒度的并行算法?

并行的粒度越小就有可能开发更多的并行性提高并行度这是有利的方面但是另一个不利的方面就是并行的粒度越小通信次数和通信量就相对增多这样就增加了额外的开销,因此合适的并行粒度需要根据计算量、通信量、计算速度、通信速度进行综合平衡这样才能够取得高效率。

一个好的并行算法的前提是什么?

一个好的并行算法要既能很好地匹配并行计算机硬件体系结构的特点又能反映问题内在并行性

如何设计适合机群系统的并行算法?

对于机群系统一次通信的开销要远远大于一次计算的开销,因此要尽可能降低通信的次数或将两次通信合并为一次通信,基于同样的原因,机群计算的并行粒度不可能太小,因为这样会大大增加通信的开销,如果能够实现计算和通信的重叠那将会更大地提高整个程序的执行效率。

并行算法的一般设计过程:

PCAM设计过程

该过程分为四步:

任务划分、通信分析、任务组合和处理器映射,简称PCAM设计过程。

MPI是不是一门并行语言?

为什么?

不是,它只是一个消息传递库

目前MPI支持哪些语言?

FORTRAN77/C/Fortran90/C++

MPI的三个主要目标是什么?

功能强/移植性好/性能高

目前MPI的主要免费实现有哪些?

MPICH/LAM/CHIMP

MPI环境定义的三种缓冲区

应用缓冲区、系统缓冲区、用户向系统注册的通信用缓冲区。

MPI程序一般分为几个部分?

 1头文件

 2变量声明

 3程序开始

 4程序体

5程序结束

MPI程序中的输出语句和一般串行程序中输出语句的执行结果有什么不同?

MPI程序中的输出语句每一个进程都执行,执行时有几个进程就有几条输出语句,而串行程序中输出语句只有本进程输出结果。

不同进程对同一个内容的输出,其顺序是什么?

是随机的。

 

编写一个C+MPI的程序,实现每一个进程都打印出自己的进程号,总的进程数,本进程所在的机器名以及"SAYHELLOTOMPI"。

#include"mpi.h"

  #include

  #include

  intmain(intargc,char**argv)

  {

    intmyid,numprocs;

    intnamelen;

   charprocessor_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%dof%dSAYHELLOTOMPIon%s\n",myid,numprocs,processor_name);

    MPI_Finalize();/*结束*/

return0

   }

为了实现基本的MPI通信功能,至少需要几个MPI调用?

不多于6个

MPI程序的第一条和最后一条可执行语句应为什么语句,如果不是这些语句,会导致什么样的后果?

初始化和结束语句,否则后果不可预测

MPI消息传递包括哪几个阶段?

组装,传递,拆卸

MPI消息的组成是怎样的?

消息信封和消息内容

任意源和任意标识的作用是什么?

提供对不特定源和标识的匹配

编写一个简单的实现发送和接收功能的程序。

  #include"mpi.h"

  main(argc,argv)

  intargc;

  char**argv;

  {

   charmessage[20];

   intmyrank;

   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,process1");

MPI_Send(message,strlen(message),MPI_CHAR,1,99,MPI_COMM_WORLD);

  }

    elseif(myrank==1)/*若是进程1*/

    {

  /*进程1直接执行接收消息的操作,这里它使用message作为接收缓冲区,由此可见,对于同一个变量,在发送进程和接收进程中的作用是不同的。

它指定接收消息的最大长度为20,消息的数据类型为MPI_CHAR字符型,接收的消息来自进程0,而接收消息携带的标识必须为99,使用的通信域也是MPI_COMM_WORLD,接收完成后的各种状态信息存放在status中。

接收完成后,它直接将接收到的字符串打印在屏幕上。

*/

      MPI_Recv(message,20,MPI_CHAR,0,99,MPI_COMM_WORLD,&status);

      printf("received:

%s:

",message);

    }

    MPI_Finalize();

    /*MPI程序结束*/

  }

给出MPI类型和C类型的对应关系

相应的C数据类型

MPI预定义数据类型

signedchar

MPI_CHAR

signedshortint

MPI_SHORT

signedint

MPI_INT

signedlongint

MPI_LONG

unsignedchar

MPI_UNSIGNED_CHAR

unsignedshortint

MPI_UNSIGNED_SHORT

unsignedint

MPI_UNSIGNED

unsignedlongint

MPI_UNSIGNED_LONG

float

MPI_FLOAT

double

MPI_DOUBLE

longdouble

MPI_LONG_DOUBLE

无对应类型

MPI_BYTE

无对应类型

MPI_PACKED

 

下面三个例子那个类型匹配有问题?

问什么?

REALa(20),b(20)…

CALLMPI_COMM_RANK(comm,rank,ierr)

IF(rank.EQ.0)THEN

CALLMPI_SEND(a

(1),10,MPI_REAL,1,tag,comm,ierr)

ELSEIF(rank.EQ.1)THEN

CALLMPI_RECV(b

(1),15,MPI_REAL,0,tag,comm,status,ierr)

ENDIF

对,MPI_REAL和MPI_REAL匹配

例2

REALa(20),b(20)

CALLMPI_COMM_RANK(comm,rank,ierr)

IF(rank.EQ.0)THEN

CALLMPI_SEND(a

(1),10,MPI_REAL,1,tag,comm,ierr)

ELSEIF(rank.EQ.1)THEN

CALLMPI_RECV(b

(1),40,MPI_BYTE,0,tag,comm,status,ierr)

ENDIF

错,MPI_BYTE和MPI_REAL不匹配

例3

REALa(20),b(20)

CALLMPI_COMM_RANK(comm,rank,ierr)

IF(rank.EQ.0)THEN

CALLMPI_SEND(a

(1),40,MPI_BYTE,1,tag,comm,ierr)

ELSEIF(rank.EQ.1)THEN

CALLMPI_RECV(b

(1),60,MPI_BYTE,0,tag,comm,status,ierr)

ENDIF

对,MPI_BYTE和MPI_BYTE匹配

指出下面两条调用的消息数据和消息信封部分

  MPI_SEND(buf,count,datatype,dest,tag,comm)

MPI_RECV(buf,count,datatype,source,tag,comm,status)

在MPI中如何计时?

  使用MPI_WTIME函数

如何终止MPI程序的执行?

  使用MPI_ABORT调用

什么是安全的发送和接收序列?

  一个进程先执行发送操作,另一个进程先执行相应的接收操作。

什么是注定要死锁的发送和接收序列?

  两个进程都先执行接收操作,再执行发送操作

什么是不安全的发送和接收序列?

  两个进程都先执行发送操作

什么是主从模式的MPI程序设计,有何特点?

  主从模式的MPI程序中不同的进程分工是不同的,比如可以是有的负责数据的收集,有的负责数据的处理,而有的负责数据的输出,他们所起的作用是不同的。

什么是对等模式的MPI程序设计,它又有什么特点?

  对于对等模式的MPI程序,每一个进程都进行类似的工作,相互之间没有特别的不同,在代码上表现为各进程可重用的代码非常多。

什么是标准通信模式?

举例说明。

  用户不需要对缓冲区进行管理,一切由MPI环境进行管理比如MPI_SEN、MPI_RECV语句。

什么是缓存通信模式?

举例说明。

  用户必须提供缓冲区并提供对缓冲区的管理,比如MPI_BSEND语句

什么是同步通信模式?

举例说明。

  发送调用的返回意味着接收操作已经开始,比如MPI_SSEND语句。

什么事就绪通信模式?

举例说明。

  必须等到接收操作开始后才能够发送的调用,比如MPI_RSEND语句。

除了标准通信模式外,其它三种通信模式有没有接收调用的形式?

  没有。

非阻塞通信的基本特点是什么?

  通信语句的调用不必等到通信的完成。

非阻塞通信可以分为那些不同的种类?

  可以有非阻塞发送和非阻塞接收两大类。

编写一个基本的非阻塞发送的例子。

  if(myid==0)MPI_Isend(sendbuf,count,types,1,tag,comm,&request)

编写一个非阻塞接收的例子。

  if(myid==1)MPI_Irecv(recvbuf,count,types,0,tag,comm,&request)

什么是组通信?

  组通信有两个基本的特点,一是组内所有的进程都参加,二是各进程组通信调用的参数形式是一致的。

组通信和点到点通信的主要区别是什么?

  组通信需要多方参加,而点到点通信需要两方参加;组通信中各进程的调用形式是一致的,而点到点通信则在调用形式上有不同。

组通信中实现通信功能的调用有那些?

  主要有广播、散发、收集、全互换等

组通信中那个调用可以实现同步功能?

  MPI_Barrier调用

组通信中实现计算功能的调用有那些?

  有归约、组归约、扫描等调用

用组通信语句编写一个求PI近似值的程序。

显式指针文件操作和独立指针文件操作的主要区别是什么?

显式文件指针操作必须指定文件读取得位置,而独立指针文件操作只是从当前文件指针的位置开始读写操作。

以下是一段用MPI实现的并行程序代码,用来并行求一组数的和。

#include

#include

#include

#defineSIZE10

voidmain(intargc,char*argv)

{

intmyid,numprocs;

intdata[SIZE],i,x,low,high,myresult,result;

charfn[255];

char*fp;

MPI_Init(&argc,&argv);

MPI_Comm_size(MPI_COMM_WORLD,&numprocs);

MPI_Comm_rank(MPI_COMM_WORLD,&myid);

if(myid==0){/*Openinputfileandinitializedata*/

strcpy(fn,getenv("HOME"));

strcat(fn,"/data");

if((fp=fopen(fn,"r"))==NULL){

printf("Can’topentheinputfile:

%s\n\n",fn);

exit

(1);

}

for(i=0;i

}

/*broadcastdata*/

MPI_Bcast(data,SIZE,MPI_INT,0,MPI_COMM_WORLD);

/*AddmyportionOfdata*/

x=SIZE/numprocs;

low=myid*x;

high=low+x;

if(myid==numprocs-1)high=SIZE;

myresult=0;

for(i=low;i

myresult+=data[i];

/*Computeglobalsum*/

MPI_Reduce(&myresult,&result,1,MPI_INT,MPI_SUM,0,MPI_COMM_WORLD);

if(myid==0)printf("Thesumis%d.\n",result);

MPI_Finalize();

}

请回答以下问题:

(1)请问上述并行程序的并行执行的进程数是何时指定的,如何确定的?

在程序中,使用什么函数得到了进程数的信息。

(2)说明上述并行程序是如何对计算任务进行划分的。

请问这种划分方式是循环划分还是块划分?

试写出另一种划分方式的代码。

(4)试对上述并行程序的加速比进行分析。

(5)结合上述并行程序的输入输出部分,说明SPMD程序的特点。

(6)请问上述程序中使用了MPI哪些群集通信的函数?

它们实现了什么功能?

在安装好linux系统的机器node1,node2,node3,node4上,为用户student搭建并行计算环境?

1、以root身份分别在node1,node2,node3,node4机器上创建student帐号;

2、创建student在node1,node2,node3,node4上相互ssh登录无需密码的环境;

3、以root身份在node1,node2,node3,node4安装mpich,默认安装到/usr/local

4、以student身份分别在node1,node2,node3,node4机器student用户家目录中创建.mpd.conf文件,内容为:

SECRETWORD=student

再创建mpd.hosts文件,内容为:

node1

node2

node3

node4

5、编译、分发、运行

mpicc

scp

mpdboot–n4

mpiexec–n4./cpi

线性方程组高斯消元法并行求解的基本思路

高斯消去法是利用主行i对其余各行j,(j>i)作初等行变换,各行计算之间没有数据相关关系,因此可以对矩阵A按行划分。

考虑到在计算过程中处理器之间的负载均衡,对A采用行交叉划分。

设处理器个数为p,矩阵A的阶数为n,

,对矩阵A行交叉划分后,编号为i(i=0,1,…,p-1)的处理器含有A的第i,i+p,…,i+(m-1)p行和向量B的第i,i+p,…,i+(m-1)p一共m个元素。

消去过程的并行是依次以第0,1,…,n-1行作为主行进行消去计算,由于对行的交叉划分与分布,这实际上是由各处理器轮流选出主行。

在消去计算中,首先对主行元素作归一化操作akj=akj/akk,bk=bk/akk,然后将主行广播给所有处理器,各处理器利用接收到的主行元素对其部分行向量做行变换。

回代过程的并行是按xn,xn-1,…,x1的顺序由各处理器依次计算x(i*p+my_rank),一旦x(i*p+my_rank)被计算出来就立即广播给所有处理器,用于与对应项相乘并做求和计算。

并行矩阵乘法的基本思路?

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 自然科学 > 物理

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2