2016-2017学年第一学期《并行程序设计》期末考试
2016-2017学年第一学期《并行程序设计》期末考试
第1页(共2页)
中国科学技术大学
2016-2017学年第一学期考试试卷
考试科目:并行程序设计 得分:
学生所在系: 姓名: _ _学号:_
fori=2to20do//循环2A[2*i+2]=A[2*i-2]+B[i];endforfori=2
fori=2to20do//循环2A[2*i+2]=A[2*i-2]+B[i];
endfor
fori=2to10do//循环1
forj=2to10
A[i,j]=(A[i-1,j-1]+A[i+1,j+1])*0.5;
endforendfor
fori=2to20do//循环3ifA[i]0thenB[i]
fori=2to20do//循环3ifA[i]0then
B[i]=C[i-1]+1
else
C[i]=B[i]–1
endifendfor
二、设有N*N个进程按照N*N二维拓扑排列。给出MPI代码片段,实现(1)进程rank与其二维坐标(i,j)的转换;(2)将所有进程按照主对角线(平行)方向来分组;(3)在主对角线组内,进行rank值的循环传送。(25分)
三、假设线程A和线程B轮流输出。首先线程A输出1,2,3;然后线程B
输出4,5,6;最后线程A输出7,8,9。给出相应的OpenMP实现。(10分)
四、设有N个MPI进程,每进程有M*N双精度浮点矩阵。给出MPI代码,实现N个进程轮流按行广播其矩阵数据。(10分)
2016-2017学年第一学期《并行程序设计》期末考试
2016-2017学年第一学期《并行程序设计》期末考试
第2页(共2页)
五、乘幂法求解矩阵最大特征值的并行算法:
乘幂法求矩阵特征值由反复进行矩阵向量相乘来实现,因而可以采用矩阵向量相乘的数据划分方法。设处理器个数为p,对矩阵A按行划分为p块,每块含有连续的m行向量,这里m??n/p?,编号为i的处理器含有A的第im至第(i+1)m-1行数据,(i=0,1,…,p-1),初始向量v被广播给所有处理器。具体算法框架描述如下:
输入:系数矩阵An×n,初始向量vn×1,ε
输出:最大的特征值max
Begin
对所有处理器my_rank(my_rank=0,…,p-1)同时执行如下的算法:
while(│diff│ε)do /*diff为特征向量的各个分量新旧值之差的最大值*/
fori=0tom-1do /*对所存的行计算特征向量的相应分量*/(1.1)sum=0
(1.2)forj=0ton-1do sum=sum+a[i,j]*x[j] endfor(1.3)b[i]=sum
endfor
localmax=│b[0]│ /*对所计算的特征向量的相应分量,求新旧值之差的最大值localmax*/
fori=1tom-1do
if(│b[i]│localmax)thenlocalmax=│b[i]│endifendfor
用Allreduce操作求出所有处理器中localmax值的最大值max并广播到所有处理器中
fori=0tom-1do b[i]=b[i]/max endfor /*对所计算的特征向量归一化*/
用Allgather操作将各处理器中计算出的特征向量的分量的新值组合并广播到所有处理器
diff=max-oldmax, oldmax=max
endwhileEnd
给出上述算法的MPI实现。(15分)
(需包括主/从进程间数据分发和最后结果的显示,但不必描述文件读写)
本试卷答题过程中可能用到的函数原型:
本试卷答题过程中可能用到的函数原型:MPI_Comm_size(MPI_Commcomm,int*size)MPI_Comm_rank(MPI_Commcomm,int*rank)
MPI_Allreduce(void*sendbuf,void*recvbuf,intcount,MPI_Datatypedatatype,MPI_Opop,MPI_Commcomm)MPI_Bcast(void*buffer,int