并行处理与体系结构实验指导书
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
并行处理与体系结构实验指导书
Guide Book of Parallel Processing and Architecture Experiment
编者:王璿
教务处
2015 年 10月
目录
实验一 MPI安装与程序编译、运行和调试 (1)
实验二共享存储模型与消息传递模型的比较 (3)
实验三矩阵运算 (5)
实验四八皇后问题 (10)
实验五快速排序 (12)
实验六快速傅氏变换 (14)
实验一 MPI安装与程序编译、运行和调试
一、实验目的
搭建MPI并行编程环境,开发并行程序;学习并行程序的编写、编译、运行步骤,了解系统结构对编程模式和环境工具的影响。
二、实验内容
在计算机局域网上安装MPICH2虚拟机,用一个简单的计算实例进行测试。运行\实验代码\MPI 运行程序\ 文件夹下面的hello.c、who.c、message.c、isend.c和mtpi.c程序实例,体会MPI中获取进程标识、消息传递及非阻塞通信等工作模式。
三、实验步骤
推荐的MPI使用环境是Linux,但实际应用中Windows系统应用广泛。本实验主要给出Windows 下MPI环境的搭建方法及MPI程序的编写、编译连接及运行。大致步骤及说明如下:
1.创建用户
以管理员的身份登录主机,在主机上建立一个MPI账户。如:用户名:mympi 密码:mympi 若在局域网环境下所有主机均推荐创建相同的MPI账户,且创建相同的工作目录,如D:\mpijob,将并行编译成功的可执行文件均存放在同一目录下。
2. 安装MPICH
例如:本实验采用的mpich2-1.4.1p1-win-ia32安装程序的下载地址为:/ research /projects/ mpich2 downloads/tarballs/1.4.1p1/ mpich2-1.4.1p1-win-ia32.msi推荐局域网中准备进行并行计算的所有计算机都要安装MPICH2虚拟机,且要安装在相同的路径下。本实验以设置安装在C:\ Program Files\MPICH2目录下为例。
(1)运行mpich2目录下的mpich2-1.4.1p1-win-ia32.msi,将MPICH2虚拟机安装到计算机上。
(2)测试MPI是否安装成功前首先需要注册一个用户,具体操作如下:“开始”按钮-->所有程序-->MPICH2 -->wmpiregister.exe。输入用户名、密码,即我们第一步建立的系统管理员账户和系统登录密码。如图1.1所示:
图1.1 MPICH用户注册界面
(3)用例程测试。选择开始-->所有程序-->MPICH2-->wmpiexec.exe;选择Application为c:\program files\mpich2\examples\cpi.exe (就是自带的一个计算圆周率的例子程序)。可在Number of processes的数量选择2表示用二个进程来协同完成。选中“run in separate window”选项,再点击Excute执行。如图1.2所示。
图1.2 测试例程cpi.exe
然后在控制台窗口下提示输入number of intervals ,随便输入个大点的数字(50000,5000000)就可以看到求的的圆周率值。如图1.3所示。
图1.3 cpi.exe执行结果显示
3.在VC6.0中配置MPI
(1) 新建Win32 Console Application工程
(2)先在VC6.0中加入mpi的include。VC6.0程序菜单中“工具”-->“选择”-->“目录”然后添加,如图1.4所示。加入lib方法相同。
图1.4 在VC6.0中添加MPI的include
(3) 在所在工程—设置—link中,加入mpi.lib cxx.lib。
(4) 加入讲过的helloworld程序,测试运行结果。
注:这里以windows下MPI+VC实现为例进行的说明,同学可以根据自己的操作系统或开发语言自行选择版本下载安装。
实验二共享存储模型与消息传递模型的比较
一、实验目的
比较共享存储模型与消息传递模型之间的区别。了解多线程并行和消息传递并行的工作机制。
二、实验内容
(1)统计10000个随机数中3出现的次数。OPENMP线程数可为1、2、4等。MPI程序进程数可为1、2、4等。
(2)比较相同线程/进程数下,采用OPENMP和MPI实现N-BODY问题的性能。如:OPENMP 线程数可为1、2、4等。MPI程序进程数可为1、2、4等。
三、实验步骤
(1)共享存储模型中,用openMP写一个程序,实现在一个长度为10,000的随机array里面,计算出3出现的次数,线程数为1,2或者4等。openMP 可以拆分循环,比如2个线程,第一个线程负责array 1~5000,第二个线程负责5001~10000,各循环5000次。这样两个线程可以同时遍历数组的两部分进行搜索计数。4个线程也类似,拆分成4部分同时进行。(OPENMP在VS2005以上支持,其他版本可查阅文献进行适当配置即可使用。)
消息传递编程模型循环拆分的思量类似。比如2个进程,第一个进程负责array 1~5000,第二个线程负责5001~10000,各循环5000次。这样两个线程可以同时遍历数组的两部分进行搜索计数。4个线程也类似,拆分成4部分同时进行。最后结果可以返回0号进程。
源代码清单:
1.共享存储模型计算随机数中3的个数(参考程序如下,可根据自己掌握的多线程知识自己编写新的OPM程序。)
#include
#include
#include
#define N 10000
int main(int argc, char *argv[])
{ int i;
int array[N];
int count, nthreads, tid, chunk;
unsigned num;
chunk = 100;
count = 0;
double start, end;
printf("please choose number of threads: 1, 2 or 4.\n")
scanf("%d", &num); //提示输入计算线程数
omp_set_num_threads(num);
#pragma omp parallel shared(nthreads)
{ tid=omp_get_thread_num();
if(tid==0)