并行计算_实验三_简单的MPI并行程序及性能分析 下载本文

内容发布更新时间 : 2024/5/16 14:28:28星期一 下面是文章的全部内容请认真阅读。

深 圳 大 学

实 验 报 告

课程名称:并行计算

实验名称:简单的

姓 名:

学 号:

班 级:

实验日期:

MPI并行程序及性能分析 2011年11月18日、12月2日

一. 实验目的

1) 用MPI实现简单的求π的程序 2) 对MPI并行程序进行简单的性能

二. 实验环境

1) 硬件环境:32核CPU、32G内存计算机;

2) 软件环境:Linux、Win2003、GCC、MPICH、VS2008;

4) Windows登录方式:通过远程桌面连接192.168.150.197,用户名和初始密码都是自己的学号,在通过wmpiexec.exe运行MPI程序前,先需运行wmpiregister.exe注册自己的账号(即自己的学号)。

三. 实验内容

4n?11. 用MPI实现求π的并行程序,写出代码。提示:π≈??ni?0用MPI_Wtime()函数。串行程序如下:

#include #include void main() { }

clock_t t=0; int i,num_steps; scanf(\,&num_steps);

double x,pi,sum=0,step=1.0/num_steps; t-=clock();

for(i=0;i

pi=step*sum; t+=clock();

printf(\,pi,t/1000.0);

x=(i+0.5)*step; sum+=4.0/(1.0+x*x);

1,计算执行时间

i?0.521?()n答:

在windows下使用Microsofe Visual Studio编程,根据串行程序更改的并行程序,源代

码如下:

#include \#include #include

void main(int argc,char ** argv ) {

int i,rank,size,n=1000000000; double x,pi,sum=0,step=1.0/n; clock_t t=0;

MPI_Init(&argc,&argv);

MPI_Comm_rank(MPI_COMM_WORLD,&rank); MPI_Comm_size(MPI_COMM_WORLD,&size);

t-=clock();

for(i=rank;i

x=(i+0.5)*step; sum+=4/(1+x*x); }

MPI_Reduce(&sum,&pi,1,MPI_DOUBLE,MPI_SUM,0,MPI_COMM_WORLD); if(rank==0) {

pi=step*pi;

MPI_Finalize(); }

t+=clock();

printf(\,pi,t/1000.0);

}

2. 分析上述程序的执行时间、加速比和效率:num_steps固定为109,节点数分别取1、2、4、8、16和32时,为减少误差,每项实验进行5次,取平均值作为实验结果。

答:串行执行时程序的执行时间为:T = 7.391s

加速比=顺序执行时间/并行执行时间

效率=加速比/节点数

表1 不同节点数下程序的执行时间(秒)

节点数 1 实验结果 第1次 第2次 第3次 第4次 第5次 平均值

7.39 7.406 7.39 7.39 7.39 7.3932

3.703 3.687 3.687 3.703 3.703 3.6966

1.844 1.844 1.844 1.844 1.844 1.844

0.922 0.922 0.937 0.922 0.922 0.925

0.453 0.453 0.469 0.468 0.453 0.4592

0.469 0.469 0.485 0.469 0.469 0.4722

2 4 8 16 32

图1 不同节点数下程序的执行时间

图2 不同节点数下程序的加速比

图3 不同节点数下程序的效率