分布式系统开发.docx
- 文档编号:9412924
- 上传时间:2023-05-18
- 格式:DOCX
- 页数:24
- 大小:964.32KB
分布式系统开发.docx
《分布式系统开发.docx》由会员分享,可在线阅读,更多相关《分布式系统开发.docx(24页珍藏版)》请在冰点文库上搜索。
分布式系统开发
《分布式系统开发》实验指导书
2007年9月
实验一熟悉目前的主流
并行计算平台
1.1实验目的
通过搭建一个小规模的并行计算PC机群,熟悉主流并行计算平台上的体系结构以及部署在其上的MPI并行编程环境,掌握并行程序的编写、编译、运行步骤,了解系统结构对编程模式和环境工具的影响。
1.2实验内容
本实验需要完成以下任务:
1.实际搭建一个小规模的并行计算机群;
2.在已搭建好的机群上部署MPI并行编程环境;
3.通过编译运行一个简单的cpi程序验证该MPI编程环境是否建立成功。
1.3实验环境
硬件:
微型计算机若干
软件:
windows和linux操作系统、MPI并行编程环境MPICH
1.4实验指导
(一)、PC机群硬件部件的选择
示例配置,如下:
该PC机群包括1个服务节点(兼作计算节点)和63个计算节点。
(1)服务节点配置:
CPU:
PentiumⅣ2.0G(512KB全速二级缓存)
内存:
1G(2512M)Rambus
硬盘:
80GBIDE
主板:
ASUSP4TSocket423
网卡:
3com905–TX(两个)
显卡、显示器、键盘、鼠标、光驱、软驱:
略
(2)计算节点配置:
CPU:
PentiumⅣ1.5G(512KB全速二级缓存)
内存:
512MB(2256M)Rambus
硬盘:
40GBIDE
主板:
ASUSP4TSocket423
网卡:
3com905–TX
另外,交换设备由2个3com3c16980和1个3com3c16985的交换机通过一个matrixmodule堆叠而成,并安装了一个千兆光纤模块,以备服务接点连接内部机群的网卡升级为千兆网卡。
(二)、PC机群软件环境的配置
1、OS的选择与安装
Linux是目前构建高性能计算机群的一个最佳的选择。
在所创建的示例机群中使用的是Redhat9.0版本(内核2.4.28)。
安装过程中请选择“定制”,并在“选择软件包组”时在默认的基础上选中【服务器】|【网络服务器】(telnet-server、rsh-server)、【服务器】|【服务器配置工具】(NFS等服务器配置工具)、【开发】|【开发工具】(gcc等基本开发工具)、【系统】|【管理工具】(图形化的系统管理工具)等软件包组。
操作系统安装完毕后,假设具有如下信息:
服务节点主机名为“node0”,IP地址为“192.168.0.100”;计算节点相应的主机名为“node[1..63]”,IP地址为“192.168.0.[1..63]”。
2、单一登录(SingleSignOn)的构建
用户可以从机群系统的任何一个节点登录,而且在整个作业执行过程中只需登录一次,不必为将作业指派到机群中的其它节点而重新登录。
这里我们采用《并行算法实践》中所介绍的第二种方法“构建用户管理脚本”来维护系统中用户信息的一致性,使用户不再重复输入密码即可登录到机群中的另一个节点上。
这包括以下步骤:
1.以root用户登录到节点node0,修改文件/etc/hosts、/etc/host.equiv,在其中写入机群所有节点的名称和IP。
2.修改系统的服务设置,通过服务设置工具启动如下系统服务:
nfs、rexec、rsh、rlogin。
其中后面三个服务是与RemoteShell相关的,负责在远程节点启动进程。
3.经过上述设置后需以普通用户身份测试RSH是否配置成功,运行命令如图1所示。
对于root用户需要经过图2所示的配置才可以不重新输入密码即可以通过RSH登录远程节点。
4.通过图3所示的脚本即可以完成创建全局统一的用户信息。
该脚本首先在本节点新增用户,然后通过RSH将用户配置文件/etc/passwd复制到机群中所有其余的节点。
图3中建立了全局用户cluster。
图1
图2
图3
3、单一文件系统(SingleFileSystem)的构建
NFS是一种Unix/Linux之间通过网络共享文件的标准方式。
使用NFS,就能够透明的安装和访问网络上远程主机的文件系统,将其安装(mount)在本地的文件系统中,类似于Windows下的映射驱动器。
在示例机群中,节点node0是服务器,把目录/home和/cluster进行共享;节点node1到node63是客户端,把服务器的/home和cluster安装到自己的文件系统当中。
下面分别进行讨论:
1、首先在节点node0上建立目录/cluster,然后将该目录授权给用户cluster。
2、可以通过如图4所示的服务器设置工具配置共享目录,也可以通过图5-6所示的直接修改/etc/exports文件改变目录的共享。
图6表示将目录/home和/cluster以可读可写的方式共享给192.168.0.0/24范围(IP从192.168.0.1到192.168.0.254)内的所有机器。
3、运行命令exportfs–a完成目录的共享。
4、客户端节点同样需要首先建立/cluster目录,然后修改分区配置文件/etc/fstab,在其中加入对/home和/cluster的映射。
5、运行命令mount–a完成目录的共享。
6、通过图7中的脚本可以将该分区配置文件拷贝到机群中所有其他节点。
图4
图5
图6
图7
4、并行编程环境(ParallelProgrammingEnvironment)的构建
MPI(MessagePassingInterface):
消息传递接口MPI目前是最流行的分布存储并行编程环境。
MPICH是由美国的Argonne国家实验室开发的基于MPI标准的一套开放源码的软件包,目前最新的版本是1.2.4。
从链接http:
//www-unix.mcs.anl.gov/mpi/mpich/可以获得更多关于MPICH的资料以及下载该软件包。
其具体配置步骤如下:
1、首先需要结压缩安装文件包并通过configure脚本完成初始配置。
其中-prefix指定/cluster/mpich为安装目录;--with-device指明所使用的通信系统类型为TCP/IP通信系统;--with-arch指明所使用的操作系统为Linux。
2、完成初始配置之后即可以使用make、makeinstall完成mpich的安装。
3、修改mpich的节点配置文件/cluster/mpich/shar/machines.LINUX,指明机群所包含的节点。
图8
图9
(三)、MPICH的运行
1、MPICH中最常用的两个命令就是mpicc和mpirun。
2、mpicc是一个MPI编译器,它负责将源程序编译为可执行文件,它最常用的参数是-o用来指明输出文件。
[node0]#cd/Cluster/MPICH/examples
[node0]#../bin/mpicccpi.c–ocpinew
3、mpirun则是用来执行一个编译好的MPI程序。
下面是它最常用的一些参数:
-np
用来指明所要生成的进程数。
-machinefile
缺省时使用的machines文件是前面介绍过的位于share目录下的machines.LINUX;但通过这个参数可以指定一个临时的machines文件,从而使用不同的进程指派方式。
4、一个标准的mpirun命令如下:
[node0]#../bin/mpirun–np10cpinew–machinefile./new_machine_file
[node0]#./mpirun–np10cpi
Process1onnode1
Process4onnode4
Process3onnode3
Process7onnode7
Process8onnode8
Process9onnode9
Process2onnode2
Process6onnode6
Process5onnode5
Process0onnode0
piisapproximately3.1416009869231249,Erroris0.0000083333333318
wallclocktime=0.015806
1.5参考资料
[1]陈国良等,《并行计算:
结构,算法,编程》(修订版),北京:
高教出版社,2003
[3]都志辉等.高性能计算并行编程技术--MPI并行程序设计。
清华大学出版社,2001
实验二机群环境下数值算法的MPI实现
2.1实验目的
针对一些典型的数值算法,如矩阵转置,在机群环境中的windows或者linux操作系统上,使用C语言在MPI并行编程环境下设计并实现具体的并行算法
2.2实验内容
本实验需要完成以下任务:
1.理解矩阵转置及其串行算法;
2.实现基于网孔上的块棋盘划分的矩阵转置并行算法
2.3实验环境
硬件:
微型计算机若干
软件:
windows和linux操作系统、MPI并行编程环境MPICH
2.4实验指导
(一)、理解矩阵转置及其串行算法
对于一个n阶方阵A=[aij],将其每一下三角元素aij(i>j)沿主对角线与其对称元素aji互换就构成了转置矩阵AT。
假设一对数据的交换时间为一个单位时间,则下述矩阵转置(MatrixTransposing)算法的运行时间为(n2-n)/2=O(n2)。
算法1单处理器上矩阵转置算法
输入:
矩阵An×n
输出:
矩阵An×n的转置ATn×n
Begin
fori=2tondo
forj=1toi-1do
交换a[i,j]和a[j,i]
endfor
endfor
End
(二)、实现矩阵转置并行算法
本次实验主要实现网孔上的块棋盘划分(Block-CheckerBoardPartitioning,又称为块状划分)的矩阵转置算法。
实现矩阵的转置时,若处理器个数为p,且它们的编号依次是0,1,…,p-1,则将n阶矩阵A分成p个大小为m×m的子块,
。
p个子块组成一个
的子块阵列。
记其中第i行第j列的子块为Aij,它含有A的第(i-1)m+1至第im行中的第(j-1)m+1至第jm列的所有元素。
对每一处理器按行主方式赋以二维下标,记编号为i的处理器的二维下标为(v,u),其中
,
,将A的子块存入下标为(v,u)表示的对应处理器中。
这样,转置过程分两步进行:
第一步,子块转置,具体过程如图1所示;第二步,处理器内部局部转置。
图1子块转置
为了避免对应子块交换数据时处理器发生死锁,可令下三角子块先向与之对应的上三角子块发送数据,然后从上三角子块接收数据;上三角子块先将数据存放在缓冲区buffer中,然后从与之对应的下三角子块接收数据;最后再将缓冲区中的数据发送给下三角子块。
具体并行算法框架描述如下:
算法2网孔上的矩阵转置算法
输入:
矩阵An×n
输出:
矩阵An×n的转置ATn×n
Begin
对所有处理器my_rank(my_rank=0,…,p-1)同时执行如下的算法:
(1)计算子块的行号v=my_rank/sqrt(p),计算子块的列号u=my_rankmodsqrt(p)
(2)if(u (2.1)将所存的子块发送到其对角块所在的处理器中 (2.2)接收其对角块所在的处理器中发来的子块 else/*对存放上三角块的处理器*/ (2.3)将所存的子块在缓冲区buffer中做备份 (2.4)接收其对角块所在的处理器中发来的子块 (2.5)将buffer中所存的子块发送到其对角块所在的处理器中 endif (3)fori=1tomdo/*处理器内部局部转置*/ forj=1toido 交换a[i,j]和a[j,i] endfor endfor End (三)、部分代码: #defineE0.0001 #definea(x,y)a[x*m+y] #defineb(x,y)b[x*m+y] #defineA(x,y)A[x*size+y] #defineB(x,y)B[x*size+y] #defineintsizesizeof(int) #definefloatsizesizeof(float) #definecharsizesizeof(char) intsize,N;/*size: 保存矩阵行数;N: 保存矩阵列数*/ intm;/*保存子方阵的尺寸*/ intt;/*棋盘划分的分割数*/ float*A,*B;/*A: 保存原矩阵;B: 保存转置后的矩阵*/ doublestarttime;/*保存开始时间*/ doubletime1;/*保存分发数据的结束时间*/ doubletime2;/*保存运行的结束时间*/ intmy_rank;/*保存当前进程的进程号*/ intp;/*保存进程数*/ MPI_Statusstatus;/*保存MPI状态*/ FILE*fdA;/*输入文件*/ /*运行结束前,调用本函数释放内存空间*/ voidEnvironment_Finalize(float*a,float*b) {} intmain(intargc,char**argv) { inti,j,k,my_rank,group_size; float*a,*b; intu,v; floattemp; MPI_Init(&argc,&argv); MPI_Comm_size(MPI_COMM_WORLD,&group_size); MPI_Comm_rank(MPI_COMM_WORLD,&my_rank); p=group_size; /*如果是主进程(rank=0的进程),则进行读文件的操作, 将待转置的矩阵读入内存,保存到全局变量A中*/ if(my_rank==0) {} /*广播矩阵的尺寸*/ MPI_Bcast(&size,1,MPI_INT,0,MPI_COMM_WORLD); /*获得棋盘划分的数目*/ t=(int)sqrt(p); if(t>size) t=size; if(size%t! =0) for(;;) { t--; if(size%t==0) break; } /*获得实际利用的处理器个数*/ p=t*t; /*每个子方阵的尺寸*/ m=size/t; /*a保存子方阵,b是临时矩阵,是主进程用来保存待发送给别的进程的子方阵*/ a=(float*)malloc(floatsize*m*m); b=(float*)malloc(floatsize*m*m); if(a==NULL||b==NULL) printf("allocatespacefail! "); /*对主进程,获得自己的子方阵(即左上角的子方阵)*/ if(my_rank==0) {} /*主进程向其他进程发送数据*/ if(my_rank==0) {} elseif(my_rank MPI_Recv(a,m*m,MPI_FLOAT,0,my_rank,MPI_COMM_WORLD,&status); time1=MPI_Wtime(); /*对下三角的子方阵进行处理*/ if((my_rank/t)>(my_rank%t)&&my_rank {} /*对上三角的子方阵进行处理*/ if((my_rank/t)<(my_rank%t)&&my_rank {} /*对每一个子方阵进行转置*/ for(i=1;i for(j=0;j { temp=a(i,j); a(i,j)=a(j,i); a(j,i)=temp; } /*主进程开始将转置的结果进行组合 先将主进程的结果组合到B中左上角*/ if(my_rank==0) { for(i=0;i for(j=0;j B(i,j)=a(i,j); } /*主进程从其他进程接收结果,组合到B的相应位置*/ if(my_rank==0) {} elseif(my_rank MPI_Send(a,m*m,MPI_FLOAT,0,my_rank,MPI_COMM_WORLD); /*由主进程打印计算结果*/ {} /*由主进程打印时间信息*/ {} } (四)、实验结果 输入矩阵: 123 345 567 pile: mpicctranspose.c-otranspose 2.run: mpirun-np4transpose 3.result: Inputoffile"dataIn.txt" 33 1.0000002.0000003.000000 3.0000004.0000005.000000 5.0000006.0000007.000000 OutputofMatrixAT 1.0000003.0000005.000000 2.0000004.0000006.000000 3.0000005.0000007.000000 Wholerunningtime=0.012299seconds Distributedatatime=0.011884seconds Parallelcomputetime=0.000415seconds 2.5参考资料 [1]陈国良等,《并行计算: 结构,算法,编程》(修订版),北京: 高教出版社,2003 [3]都志辉等.高性能计算并行编程技术--MPI并行程序设计。 清华大学出版社,2001 附录实验大纲 《分布式系统开发》课程实验大纲 课程编号: B0301441C课程名称: 分布式系统开发 课内总学时: 32上机实验学时: 4×2 一、实验课程的性质、目的和任务 实验课程的性质: 《分布式系统开发》实验是对专业限选课《分布式系统开发》课程知识的进一步巩固和解决实际问题能力的加强。 实验课程的目的: 通过上机实习,一方面加深学生对分布式并行算法的基本策略和主要方法的理解;另一方面,熟悉主流并行计算平台上的体系结构以及部署在其上的MPI并行编程环境;学习并行程序的编写、编译、运行步骤,了解系统结构对编程模式和环境工具的影响。 实验课程的任务: 在4学时的实验中,每个同学要完成相应的实验题,通过独立思考、与同学讨论、老师辅导答疑,选择相应的方法,进行题目的分析、编程及测试工作,并按要求写出实验报告。 二、实验内容、学时分配及基本要求 序号 实验名称 课时 实验内容及要求 开出组数 实验类型 选做 必做 实验 对象 备注 本 专 1 主流并行计算平台的搭建 2 内容: 1、实际搭建一个小规模的并行计算机群;2、在已搭建好的机群上部署MPI并行编程环境;3、通过编译运行一个简单的cpi程序验证该MPI编程环境是否建立成功。 要求: 通过搭建一个小规模的并行计算PC机群,熟悉主流并行计算平台上的体系结构以及部署在其上的MPI并行编程环境,掌握并行程序的编写、编译、运行步骤,了解系统结构对编程模式和环境工具的影响。 120 验证 √ √ 2 机群环境下数值算法的MPI实现 2 内容: 针对一些典型的数值算法,如矩阵转置,在机群环境中的windows或者linux操作系统上,使用C语言在MPI并行编程环境下设计并实现具体的并行算法 要求: 理解矩阵转置及其串行算法,实现基于网孔上的块棋盘划分的矩阵转置并行算法 120 设计 √ √ 三、考核及实验报告 (一)考核 本课程实验非独立设课,实验考核以平时实验操作为主(70%),包括学生上实验课的课堂表现(如: 有无缺勤、有无事先准备程序代码、课堂上是否认真实验以及实验结果等),结合实验后的实验报告内容(30%),综合评定实验成绩。 实验成绩记入课程平时成绩,实验成绩占总成绩的20%。 (二)实验报告 报告要求: (1)实验题目; (2)实验目的、要求和内容、主要仪器及设备; (3)实验步骤: 所选题目的问题描述,实验的具体执行步骤(实验一)或程序的输入和输出要求以及程序的功能(实验二); (4)程序清单。 要求将源程序复制在软盘上;使用自己的学号作为文件名(实验二); (5)分析和体会。 包括: 实验所遇到的问题,实验的心得和体会,进一步改进的设想。 实验报告以文本形式递交。 实验报告要书写规范、文字简练、语句通顺、图表清晰。 四、主要仪器设备 硬件: 微型计算机若干; 软件: Windows或者Linux操作系统、MPI并行编程环境。 五、教材及参考书 教材: [1]陈国良,《并行计算: 结构,算法,编程》(修订版),北京: 高教出版社,2003 [2]BarryWilkinson著,陆鑫达译,《并行程序设计》(第二版),北京: 机械工业出版社,2005 参考书: [1]陈国良,《并行计算机体系结构》,北京: 高教出版社,2002 [2]陈国良,《并行算法实践》,北京: 高教出版社,2003 [3]陈国良,《并行算法的设计与分析》,北京: 高教出版社,2002 执笔人: 陈蕾
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 分布式 系统 开发