欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2024-02-26 19:36:52
...

实验三:在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.创建桌面向导,勾选空项目
并行计算———实验三:在vs2017,vc6.0++中运行cpi并行程序
并行计算———实验三:在vs2017,vc6.0++中运行cpi并行程序

2.添加新的源文件,编写cpi的源程序
并行计算———实验三:在vs2017,vc6.0++中运行cpi并行程序

3.环境配置:
(1)点击项目-属性
并行计算———实验三:在vs2017,vc6.0++中运行cpi并行程序

(2)配置管理器:活动解决方案配置选择release,平台选择mpich2的对应平台
并行计算———实验三:在vs2017,vc6.0++中运行cpi并行程序

(3)在vc++目录中,包含目录 添加include文件夹,库目录 添加lib文件夹
并行计算———实验三:在vs2017,vc6.0++中运行cpi并行程序

(4)在c/c++中,预处理器中:预处理器定义 添加MPICH_SKIP_MPICXX,防止编译报错
并行计算———实验三:在vs2017,vc6.0++中运行cpi并行程序

(5)在c/c++ 代码生成中 运行库选择多线程调试(/MTd)
并行计算———实验三:在vs2017,vc6.0++中运行cpi并行程序

(6)在链接器 输入中,在附加依赖项中添加 mpi.lib
并行计算———实验三:在vs2017,vc6.0++中运行cpi并行程序

4.编译执行源文件生成.exe文件,然后按照实验二的方法执行.exe文件
并行计算———实验三:在vs2017,vc6.0++中运行cpi并行程序

VC6.0++:
VC6.0++只支持32位mpich2
1.创建控制台应用工程
并行计算———实验三:在vs2017,vc6.0++中运行cpi并行程序

2.创建源文件,编写代码
并行计算———实验三:在vs2017,vc6.0++中运行cpi并行程序

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

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

4.在工程-设置-连接中的 对象/库模块 中添加mpi.lib
并行计算———实验三:在vs2017,vc6.0++中运行cpi并行程序

5.在所编写的文件前加上宏定义#define MPICH_SKIP_MPICXX避免报错
6.编译执行生成.exe文件,并行执行.exe文件
并行计算———实验三:在vs2017,vc6.0++中运行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;

}
五.运行:
命令行方式执行:
并行计算———实验三:在vs2017,vc6.0++中运行cpi并行程序

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

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

相关标签: 并行计算