并行计算———实验三:在vs2017,vc6.0++中运行cpi并行程序

实验三:在vs2017,vc6.0++中运行cpi并行程序

一.目的:
在vs2017,vc6.0++中配置mpich2的环境并测试
二.内容:
vs2017环境配置与测试
Vc6.0++环境配置与测试
三.步骤:
vs2017:
1.创建桌面向导,勾选空项目
实验三:在vs2017,vc6.0++中运行cpi并行程序
一.目的:
在vs2017,vc6.0++中配置mpich2的环境并测试
二.内容:
vs2017环境配置与测试
Vc6.0++环境配置与测试
三.步骤:
vs2017:
1.创建桌面向导,勾选空项目
在这里插入图片描述
在这里插入图片描述

2.添加新的源文件,编写cpi的源程序
在这里插入图片描述

3.环境配置:
(1)点击项目-属性
在这里插入图片描述

(2)配置管理器:活动解决方案配置选择release,平台选择mpich2的对应平台
在这里插入图片描述

(3)在vc++目录中,包含目录 添加include文件夹,库目录 添加lib文件夹
在这里插入图片描述

(4)在c/c++中,预处理器中:预处理器定义 添加MPICH_SKIP_MPICXX,防止编译报错
在这里插入图片描述

(5)在c/c++ 代码生成中 运行库选择多线程调试(/MTd)
在这里插入图片描述

(6)在链接器 输入中,在附加依赖项中添加 mpi.lib
在这里插入图片描述

4.编译执行源文件生成.exe文件,然后按照实验二的方法执行.exe文件
在这里插入图片描述

VC6.0++:
VC6.0++只支持32位mpich2
1.创建控制台应用工程
在这里插入图片描述

2.创建源文件,编写代码
在这里插入图片描述

3.在工具-选项-目录中,在include files中添加include文件夹路径,在library files中添加lib文件夹路径

在这里插入图片描述

4.在工程-设置-连接中的 对象/库模块 中添加mpi.lib
在这里插入图片描述

5.在所编写的文件前加上宏定义#define MPICH_SKIP_MPICXX避免报错
6.编译执行生成.exe文件,并行执行.exe文件
在这里插入图片描述

四.程序:
#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;

}
五.运行:
命令行方式执行:
在这里插入图片描述

六.结果:
在这里插入图片描述

七.分析与收获:
学习不同系统不同编译环境的配置,观察到vs的每次新建工程都要重新配置环境,而vc6.0++每次新建工程只需要重新加上mpi.lib即可,还可以观察到关于MPICH_SKIP_MPICXX的设置,两个编译环境的处理方式不同,vs添加至预处理器中,而vc6.0++需要明确将其写成宏定义在两个环境中,语法可能不同,比如关于输入,vs中为scanf_s,vc中为scanf。
学习如何使用并行计算语言编程,注意到mpi的几个基本函数,还了解了发送,接收,广播函数的使用,了解并行计算执行过程。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值