Hadoop课程实验和报告——MPI安装和测试实验报告
Hadoop课程实验和报告——MPI安装和测试实验报告 本文档主要介绍了MPI(Message Passing Interface)的安装和测试实验报告,涵盖了MPI环境的安装和设置、MPI环境验证测试、样例程序运行测试等几个方面。 一、MPI环境的安装与设置 在本实验中,我们使用的MPI版本是MPICH2,可以从Microsoft官方网站下载。下载完成后,我们需要安装MSMpiSetup.exe和msmpiskd.msi两个文件。MSMpiSetup.exe用于安装MPI运行环境,而msmpiskd.msi用于支持MPI程序的编写和编译。 在安装完成后,我们需要在VS2012中进行配置,主要是设置头文件和依赖文件。这里需要注意的是,附加依赖项如果不加以设置,则需要在代码中加入#pragma comment(lib, "msmpi.lib")以达到指定动态库的目的,避免链接错误。 二、MPI环境验证测试 在配置完成后,我们可以建立源文件,输入测试代码,以验证MPI环境是否正确安装和配置。测试代码如下: ```c #include <stdio.h> #include <mpi.h> int main(int argc, char argv){ int num, rk; MPI_Init(&argc, &argv); MPI_Comm_size(MPI_COMM_WORLD, &num); MPI_Comm_rank(MPI_COMM_WORLD, &rk); printf("Hello world from Process %d of %d\n",rk,num); MPI_Finalize(); return 0; } ``` 三、样例程序运行测试 在MPI环境验证测试完成后,我们可以使用MPI进行并行计算。下面给出两个样例程序: Test1——启动多个线程,非零号线程均向零号线程发送消息,零号线程负责接收消息并打印输出。 ```c #include <stdio.h> #include <mpi.h> int main(int argc, char argv){ int myid,numprocs, source; MPI_Status status; char message[100]; MPI_Init(&argc, &argv); MPI_Comm_rank(MPI_COMM_WORLD, &myid); MPI_Comm_size(MPI_COMM_WORLD,&numprocs); if (myid != 0) /* 其他进程,向 0 进程发送 HelloWorld 信息*/ { strcpy_s(message, "Hello World!"); MPI_Send(message,strlen(message)+1, MPI_CHAR, 0,99,MPI_COMM_WORLD); } else /* 0 进程负责从其他进程接受信息并输出*/ { for (source = 1; source < numprocs; source++){ MPI_Recv(message, 100, MPI_CHAR, source, 99,MPI_COMM_WORLD, &status); printf("I am process %d. I recv string '%s' from process %d.\n",myid,message,source); } } MPI_Finalize(); return 0; } ``` Test2——计算一个数列的各元素的开平方之和,假设开启了n个线程,其中0号线程负责数据的分发和结果的收集。 ```c #include <stdio.h> #include <mpi.h> int main(int argc, char argv){ int myid,numprocs, i; double sum, data[100]; MPI_Status status; MPI_Init(&argc, &argv); MPI_Comm_rank(MPI_COMM_WORLD, &myid); MPI_Comm_size(MPI_COMM_WORLD,&numprocs); if (myid == 0) /* 0 号线程负责数据的分发和结果的收集*/ { for (i = 0; i < 100; i++) { data[i] = i; } for (i = 1; i < numprocs; i++) { MPI_Send(data, 100, MPI_DOUBLE, i, 99,MPI_COMM_WORLD); } sum = 0.0; for (i = 1; i < numprocs; i++) { MPI_Recv(&sum, 1, MPI_DOUBLE, i, 99,MPI_COMM_WORLD, &status); printf("Sum of square root of data from process %d is %f\n",i,sum); } } else /* 非零号线程负责计算*/ { MPI_Recv(data, 100, MPI_DOUBLE, 0, 99,MPI_COMM_WORLD, &status); sum = 0.0; for (i = myid - 1; i < 100; i += numprocs - 1) { sum += sqrt(data[i]); } MPI_Send(&sum, 1, MPI_DOUBLE, 0, 99,MPI_COMM_WORLD); } MPI_Finalize(); return 0; } ``` 本实验报告详细介绍了MPI环境的安装和设置、MPI环境验证测试、样例程序运行测试,并提供了两个样例程序供读者参考。
剩余13页未读,继续阅读
- 粉丝: 8
- 资源: 7
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- (源码)基于ESP8266的WebDAV服务器与3D打印机管理系统.zip
- (源码)基于Nio实现的Mycat 2.0数据库代理系统.zip
- (源码)基于Java的高校学生就业管理系统.zip
- (源码)基于Spring Boot框架的博客系统.zip
- (源码)基于Spring Boot框架的博客管理系统.zip
- (源码)基于ESP8266和Blynk的IR设备控制系统.zip
- (源码)基于Java和JSP的校园论坛系统.zip
- (源码)基于ROS Kinetic框架的AGV激光雷达导航与SLAM系统.zip
- (源码)基于PythonDjango框架的资产管理系统.zip
- (源码)基于计算机系统原理与Arduino技术的学习平台.zip