并行处理与体系结构实验指导书

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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)

相关文档
最新文档