基本信息
文件名称:2012-2013并行程序设计期末考试卷.docx
文件大小:36.44 KB
总页数:2 页
更新时间:2025-06-12
总字数:约2.58千字
文档摘要

中国科学技术大学

2012-2013学年第一学期考试试卷

考试科目:并行程序设计 得分:

学生所在系:

姓名: _

学号:

本试卷共五个大题!

一、描述以下循环1中的依赖关系及语句依赖图,并尝试向量化变换:(15分)

for

fori=1to100do

S:A[i+1]=A[i+1]+B[i];

T:B[i+1]=C[i]+1;

U:A[i+1]=A[i]*C[i]+D[i];

endfor //循环1

二、判断循环2和循环3是否等价;并针对循环3,做出向量化变换和OpenMP

实现。(20分)

fori

fori=1toNdoA[i]=B[i]+1;

endfor

fori=1toNdoC[i]=A[i]/2;

endfor

fori=1toNdoD[i]=1/C[i+1];

endfor

//循环2

fori=1toNdoA[i]=B[i]+1;

C[i]=A[i]/2;

D[i]=1/C[i+1];

endfor

//循环3

三、以下为一个三进程的流水线。进程Q连续地从左边的进程P接收一个输入数据流X,计算一个新的Y值,然后将它发送给右边的进程R。

X=P(W)Z=R(Y)

X=P(W)

Z=R(Y)

Y=Q(X)

X

Y Z

请设计一个带有双缓冲方式的进程Q的流水线MPI程序框架,并使用非阻塞消息通信操作实现计算与通信的重叠。(15分)

四、将MPI_COMM_WORLD中所有进程视为二维p?p结构(p是进程总

p数且为平方数)。给出进程Pi,j(0?i,j? ?1)将其在MPI_COMM_WORLD

p

中编号rank分别循环下移i步,循环右移j步的MPI代码片段。(15分)

五、枚举排序(EnumerationSort)的具体思想是(假设按关键字递增排序),对每一个待排序的元素统计小于它的所有元素的个数,从而得到该元素最终处于序列中的位置。假定待排序的n个数存在a[1]…a[n]中。首先将a[1]

与a[2]…a[n]比较,记录比其小的数的个数,令其为k,a[1]就被存入有

序的数组b[1]…b[n]的b[k+1]位置上;然后将a[2]与a[1],a[3]…a[n]

比较,记录比其小的数的个数,依此类推。

输入:a[1]

输入:a[1]…a[n]

输出:b[1]…b[n]

Begin

fori=1tondo

k=1

forj=1tondo

ifa[i]a[j]then

k=k+1

endifendfor

b[k]=a[i]

endfor

End//枚举排序串行算法

给出MPI并行实现。假设对一个长为n的输入序列使用n个处理器进行排序,只需是每个处理器负责完成对其中一个元素的定位,然后将所有的定位信息集中到主进程中,由主进程负责完成所有元素的最终排位。(20分)

给出OpenMP实现。(15分)

本试卷答题过程中可能用到的函数原型:

本试卷答题过程中可能用到的函数原型:

MPI_Reduce(void*sendbuf,void*recvbuf,intcount,MPI_Datatypedatatype,MPI_Opop,introot,MPI_Commcomm)MPI_Bcast(void*buffer,intcount,MPI_Datatypedatatype,introot,MPI_Commcomm)

MPI_Gather(void*sendbuf,intsendcnt,MPI_Datatypesendtype,void*recvbuf,intrecvcnt,MPI_Datatyperecvtype,introot,MPI_Commcomm)

MPI_Allgather(void*sendbuf,intsendcount,MPI_Datatypesendtype,void*recvbuf,intrecvcount,MPI_Datatyperecvtype,MPI_Commcomm)

MPI_Send(void*buf,intcount,MPI_Datatypedatatype,intdest,inttag,MPI_Commcomm)

MPI_Isend(void*buf,intcount,MPI_Datatypedatat