并行计算——实验六:两机运行实验三和实验四

实验六:两机运行实验三和实验四

一.目的:
体会在集群中的并行计算操作方法
二.内容:
实现两台机器的并行计算
三.步骤:
1.在两台机器上安装相同的mpich2,参见实验一
2.将两台机器的注册账号和密码置成相同
3.将两台机器的ip改为同一网关(即前24位相同)(即在一局域网里),否则无法联机,如图,本次实验机器两ip为10.11.74.104,10.11.74.105
在这里插入图片描述
在这里插入图片描述

4.计算机工作组改成同一个
在这里插入图片描述
在这里插入图片描述

5.参见实验三实验四编译运行源代码,得到.exe程序
6.将所要执行的exe文件放置在两台机器上同一个位置(同一个路径下的文件夹下),如图所示放在MyProjects\helloword\Debug下
7.命令行模式下进入.exe程序所在的文件夹,输入如图的命令:mpiexec -hosts 2 10.11.74.104 10.11.74.105 helloworld.exe 其中:-hosts表示主机,2代表两台,后面为两台主机的ip,cpi.exe同样如此
在这里插入图片描述
在这里插入图片描述

Gui方式:
打开bin文件夹下的wmpiconfig
(1)在domain上选择集群分组
(2)点击get hosts获得同一组上的集群
(3)记录绿色机器的机器名
在这里插入图片描述

(4)打开wmpiexec
①勾选more options
②在hosts一栏上写下之前记录的主机名
③执行.exe程序,参见实验二
在这里插入图片描述

配置文件方式:新建一个txt文件,在里面输入-n n1 -host host1 .exe路径
-n n2 -host host2 .exe路径
n1,n2表示进程数,host1,host2表示主机名,可以是主机名也可以是ip
在这里插入图片描述

然后cmd,找到.txt路径,输入mpiexec -configfile .txt命令执行
在这里插入图片描述

四.程序:
Cpi:
#include “mpi.h”
#include <stdio.h>
#include <math.h>
double f(double);
double f(double a)
{
return (4.0 / (1.0 + a*a));
}
int main(int argc,char *argv[])
{
int done = 0, n, myid, numprocs, i;
double PI25DT = 3.141592653589793238462643;
double mypi, pi, h, sum, x;
double startwtime = 0.0, endwtime;
int namelen;
char processor_name[MPI_MAX_PROCESSOR_NAME];
MPI_Init(&argc,&argv);
MPI_Comm_size(MPI_COMM_WORLD,&numprocs);
MPI_Comm_rank(MPI_COMM_WORLD,&myid);
MPI_Get_processor_name(processor_name,&namelen);
while (!done) {
if (myid == 0) {
fprintf(stdout, “Enter the number of intervals: (0 quits) “);
fflush(stdout);
if (scanf_s(”%d”,&n) != 1) {
fprintf( stdout, “No number entered; quitting\n” );
n = 0;
}
startwtime = MPI_Wtime();
}
MPI_Bcast(&n, 1, MPI_INT, 0, MPI_COMM_WORLD);
if (n == 0)
done = 1;
else {
h = 1.0 / (double) n;
sum = 0.0;
for (i = myid + 1; i <= n; i += numprocs) {
x = h * ((double)i - 0.5);
sum += f(x);
}
mypi = h * sum;
MPI_Reduce(&mypi, &pi, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD);

        if (myid == 0) {
            printf("pi is approximately %.16f, Error is %.16f\n",
                   pi, fabs(pi - PI25DT));
	endwtime = MPI_Wtime();
	printf("wall clock time = %f\n", endwtime-startwtime);	       
	fflush( stdout );
    }
    }
}
MPI_Finalize();
return 0;

}
Helloworld:
#include “mpi.h”
#include
int main(int argc, char* argv[])
{
int rank;
int size;
MPI_Init(0, 0);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
MPI_Comm_size(MPI_COMM_WORLD, &size);
std::cout << "Hello world from process " << rank << " of " << size << std::endl;
MPI_Finalize();
return 0;
}
五.结果:
命令行 直接写ip方式:
在这里插入图片描述
在这里插入图片描述

Gui方式:

在这里插入图片描述
在这里插入图片描述

配置文件方式:
在这里插入图片描述

六.分析与收获:
学会mpich2在集群上如何设置,知道要将集群网关设成一致形式,将集群放置在同一局域网,同一工作组中。
学会使用不同方式运行集群中的程序,推荐配置文件方式,这时只需要运行配置文件即可,其他方式每次启动都需要填写大量信息,过于繁琐。
理解体会并行计算在集群上的优势,集群越大,并行计算优势越明显。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值