目录
- 一、上机目的
- 二、上机内容与要求
- 三、上机结果
一、上机目的
1.了解所用的并行程序设计平台的基本操作方法,学会独立部署和使用该平台。
2.了解在该系统上如何编辑、编译、连接和运行一个并行程序。
3. 通过编写运行简单的并行程序,初步了解并行源程序的特点。
二、上机内容与要求
1.检查所用的计算机系统是否已安装了MPI并行程序设计平台,若无,予以安装;进入所用的并行编译集成环境;熟悉集成环境的界面和有关菜单的使用方法。
2. 使用C/C++及MPI编写并行程序,实现n个进程并行,从0号进程开始,依次发送“Hello, I’m process x.”给下一个进程,下一个进程接收上述消息并把它打printf出来。x为发送消息的进程号,最后一个进程不需要发送给0号进程。
3. 使用梯形积分法计算圆周率π值,计算公式为
三、上机结果
1、使用C/C++及MPI编写并行程序,实现n个进程并行,从0号进程开始,依次发送“Hello, I’m process x.”给下一个进程,下一个进程接收上述消息并把它打printf出来。x为发送消息的进程号,最后一个进程不需要发送给0号进程。
#include <iostream>
#include "mpi.h"
using namespace std;
int main(int argc, char* argv[]) {// 初始化MPI环境MPI_Init(&argc, &argv);int num_processes;int process_rank;MPI_Comm_size(MPI_COMM_WORLD, &num_processes);MPI_Comm_rank(MPI_COMM_WORLD, &process_rank);char message[50] = { 0 };//防止乱码// 0号进程发送消息到1号进程if (process_rank == 0) {cout << message << "Hello, I'm process " << process_rank << endl;MPI_Send(message, strlen(message) + 1, MPI_CHAR, process_rank + 1, 0, MPI_COMM_WORLD);}else {MPI_Recv(message, sizeof(message), MPI_CHAR, process_rank - 1, 0, MPI_COMM_WORLD, MPI_STATUS_IGNORE);cout << message << endl;if (process_rank < num_processes - 1) {cout << message << "Hello, I'm process " << process_rank << endl;MPI_Send(message, strlen(message) + 1, MPI_CHAR, process_rank + 1, 0, MPI_COMM_WORLD);}}MPI_Finalize();return 0;
}
使用梯形积分法计算圆周率π值
#include <iostream>
#include <mpi.h>
#include <cmath>double f(double x) {return 4.0 / (1.0 + x * x);
}int main(int argc, char* argv[]) {int rank, size;const int n = 1000000; // 划分的区间数double sum = 0.0;double total_sum;MPI_Init(&argc, &argv);MPI_Comm_rank(MPI_COMM_WORLD, &rank);MPI_Comm_size(MPI_COMM_WORLD, &size);const int local_n = n / size;const double h = 1.0 / n;double local_sum = 0.0;double x;for (int i = rank * local_n; i < (rank + 1) * local_n; ++i) {x = h * (i + 0.5);local_sum += f(x);}MPI_Reduce(&local_sum, &total_sum, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD);if (rank == 0) {sum = h * total_sum;std::cout << "π 的近似值为: " << std::fixed << sum << std::endl;}//关闭MPI环境MPI_Finalize();return 0;
}