中科院数学与系统科学研究院“并行计算”课程讲义草稿.doc
- 文档编号:66259
- 上传时间:2023-04-28
- 格式:DOC
- 页数:84
- 大小:1.05MB
中科院数学与系统科学研究院“并行计算”课程讲义草稿.doc
《中科院数学与系统科学研究院“并行计算”课程讲义草稿.doc》由会员分享,可在线阅读,更多相关《中科院数学与系统科学研究院“并行计算”课程讲义草稿.doc(84页珍藏版)》请在冰点文库上搜索。
中科院数学与系统科学研究院
“并行计算”课程讲义(草稿)”
张林波
计算数学与科学工程计算研究所
科学与工程计算国家重点实验室
2003年1月29
目录
第一部分MPI消息传递编程
第一章预备知识
§1.1高性能并行计算机系统简介
§1.1.1微处理器的存储结构
§1.1.2Cache结构对程序性能的影响
§1.1.3共享内存SMP型并行计算机
§1.1.4分布式内存MPP型并行计算机
§1.1.5DSM型并行计算机
§1.1.6SMP/DSM机群
§1.1.7微机/1.4.作站机群
§1.1.8TOP500
§1.2并行编程模式
§1.2.1自动并行与手1.4.并行
§1.2.20penMP
§1.2.3DSM编程模式
§1.2.4高性能Fortran:
HPF
§1.2.5消息传递并行编程模式
§l.3Unix程序开发简介
§l.3.1Unix中常用的编译系统
§1.3.2实用1.4.具make
§1.4消息传递编程平台MPI
§1.4.1MPI程序的编译与运行
§1.4.2利用MPICH建立MPI程序开发与调试环境
第二章MPI基础知识
§2.1下载MPI标准的PS文档
§2.2一些名词与概念
§2.3编程模式
§2.4MPI函数的一般形式
§2.5MPI的原始数据类型
§2.5.1Fortran77原始数据类型
§2.5.2C原始数据类型
§2.6MPI的几个基本函数
§2.6.1初始化MPI系统
§2.6.2检测MPI系统是否已经初始化
§2.6.3得到通信器的进程数及进程在通信器中的序号
§2.6.4退出MPI系统
§2.6.5异常终止MPI程序的执行
§2.6.6查询处理器名称
§2.6.7莸取墙上时间及时钟精度
§2.7MPI程序的基本结构
§2.7.1Fortran77程序
§2.7.2C程序
第三章点对点通信
§3.1标准阻塞型点对点通信函数
§3.1.1标准阻塞发送
§3.1.2阻塞接收
§3.1.3阻塞型消息传递实例
§3.1.4其它一些阻塞型消息传递函数
§3.2消息发送模式
§3.2.1阻塞型缓冲模式消息发送函数
§3.3阻塞型与非阻塞型函数
§3.4非阻塞型点对点通信函数
§3.4.1非阻塞发送
§3.4.2非阻塞接收
§3.4.3通信请求的完成与检测
§3.4.4通信请求的释放
§3.5消息探测与通信请求的取消
§3.5.1消息探测
§3.5.2通信请求的取消
§3.6点对点通信函数汇总
§3.7持久通信请求
§3.7.1创建持久消息发送请求
§3.7.2创建持久消息接收请求
§3.7.3开始基于持久通信请求的通信
§3.7.4持久通信请求的完成与释放
第四章数据类型
§4.1与数据类型有关的一些定义
§4.1.1数据类型定义
§4.1.2数据类型的大小
§4.1.3数据类型的下界、上界与域
§4.1.4MPI_LB和MPI_UB
§4.1.5数据类型查询函数
§4.2数据类型创建函数
§4.2.1MPI_Type_contiguous
§4.2.2MPI_Type_vector
§4.2.3MPI_Type_hvector
§4.2.4MPI_Type_indexed
§4.2.5MPI_Type_hindexed
§4.2.6MPI_Type_struct
§4.2.7地址函数MPI_Address
§4.3数据类型的使用
§4.3.1数据类型的提交
§4.3.2数据类型的释放
§4.3.3MPI_Get_elements
§4.4数据的打包与拆包
§4.4.1数据打包
§4.4.2数据拆包
§4.4.3得到打包后的数据大小
§4.5MPIl.l中位移与数据大小的限制
第五章聚含通信(CollectiveCommunications)
§5.1障碍同步
§5.2广播
§5.3数据收集
§5.3.1收集相同长度数据块MPI_Gather
§5.3.2收集不同长度数据块MPI_Gatherv
§5.3.3全收集MPI_Allgather
§5.3.4不同长度数据块的全收集MPI_Allgatherv
§5.4数据散发
§5.4.1散发相同长度数据块MPI_Scatter
§5.4.2散发不同长度数据块MPI_Scatterv
§5.5全部进程对全部进程的数据散发收集
§5.5.1相同数据长度的全收集散发MPI_Alltoall
§5.5.2不同数据长度的全收集散发MPI_Alltoallv
§5.6归约
§5.6.1归约函数MPI_Reduce
§5.6.2全归约MPI_Allreduce
§5.6.3归约散发MPI_Reduce_scatter
§5.6.4前缀归约MPI_Scan
§5.6.5归约与前缀归约中用户自定义的运算
§5.7两个程序实例
§5.7.1π值计算
§5.7.2Jacobi迭代求解二维Poisson方程
第六章进程组与通信器
§6.1基本概念
§6.1.1进程组
§6.1.2上下文(Context)
§6.1.3域内通信器(Intracommunicator)
§6.1.4域间通信器(Intercommunicator)
§6.2进程组操作函数
§6.2.1查询进程组大小和进程在组中的序号
§6.2.2两个进程组间进程序号的映射
§6.2.3比较两个进程组
§6.2.4进程组的创建与释放
§6.3域内通信器操作函数
§6.3.1比较两个通信器
§6.3.2通信器的创建与释放
§6.4通信器的附加属性(Caching)
§6.5域间通信器(Intercommunicator)
§6.6进程拓扑结构
§6.6.1迪卡尔拓扑结构
§6.6.2一般拓扑结构
§6.6.3底层支持函数
第七章文件输入输出
§7.1基本术语
§7.2基本文件操作
§7.2.1打开MPI文件
§7.2.2关闭MPI文件
§7.2.3删除文件
§7.2.4设定文件长度
§7.2.5为文件预留空间
§7.2.6查询文件长度
§7.3查询文件参数
§7.3.1查询打开文件的进程组
§7.3.2查询文件访问模式
§7.4设定文件视窗
§7.4.1文件中的数据表示格式
§7.4.2可移植数据类型
§7.4.3查询数据类型相应于文件数据表示格式的域
§7.5文件读写操作
§7.5.1使用显式位移的阻塞型文件读写
§7.5.2使用独立文件指针的阻塞型文件读写
§7.5.3使用共享文件指针的阻塞型文件读写
§7.5.4非阻塞型文件读写函数
§7.5.5分裂型文件读写函数
§7.6文件指针操作
§7.6.1独立文件指针操作
§7.6.2共享文件指针操作
§7.6.3文件位移在文件中的绝对地址
§7.7不同进程对同一文件读写操作的相容性
§7.7.1设定文件访问的原子性
§7.7.2查询atomicity的当前值
§7.7.3文件读写与存储设备间的同步
§7.8子数组数据类型创建函数
本讲义仅供课程学员及其他感兴趣者个人参考用,尚处于逐步修改完善的过程中,许多内容代表的是作者的个人观点。
未经作者同意,不得擅自散播、印刷、转引讲义中的部分或全部内容。
Vll
课程安排
·高性能计算机简介:
高性能计算机的体系结构特点及编程方式。
·消息传递环境:
MPI编程:
消息传递MPI(MessagePassingInterface)标准。
·分布式并行算法设计技术:
分布式并行算法设计的基本原理与方法。
·目的:
学习分布式并行算法设计,分布式并行程序编制,高性能并行计算机使用
参考材料
·孙家昶等,《网络并行计算与分布式编程环境》,科学出版社,1996。
·张宝琳等,《数值并行计算原理与方法》,国防1.4.业出版社,1999。
·李晓梅等,《可扩展并行算法的设计与分析》,国防1.4.业出版社,2000。
·莫则尧等,《消息传递并行编程环境MPI》,科学出版社,2001。
·http:
//www.mpi-forum.org
·
·
·ftp:
//
1
第一部分
MPI消息传递编程
第一章预备知识
§1.1高性能并行计算机系统简介
§1.1.1微处理器的存储结构
§1.1.2Cache结构对程序性能的影响
例1.1矩阵乘法中不同循环顺序对程序性能的影响
DOJ=l,N
DOI=l,N
C(I,J)=0.D0
ENDDO
ENDDO
DOI=l,N
DOJ=l,N
DOK=l,N
C(I,J)=C(I,J)+A(I,K)*B(K,J)
ENDDO
ENDDO
ENDDO
矩阵乘法实例1:
【matmul0.m4】
矩阵乘法实例2:
【matmulf】
§1.1.3共享内存SMP型并行计算机
·对称多处理器(SymmetricMultl-Processors),或共享内存处理器(SharedMemoryProcessors)。
·多个处理器通过系统总线或交叉开关共享一个或多个内存模块。
·优点:
使用简单,维护方便。
·缺点:
受系统总线带宽限制,只能支持少量处理器(一般十几个)。
·并行编程方式:
通常采用OpenMP,也可使用消息传递(MPI/PVM)及HPF。
·代表机型SGIPowerChalleng,SunEl0000等。
§1.1.4分布式内存MPP型并行计算机
·MassivelyParallelProcessors的简称。
·指由大量具有局部内存的计算结点通过高速系统网络联接而构成的并行处理系统。
·MPP系统的系统网络通常具有某种拓扑结构(如tree,mesh,torus,hypercube)。
§1.1.5DSM型并行计算机
分布共享内存:
DistributedSharedMemory。
·多个物理上具有独立内存的处理单元,通过高速网络联接在一起。
·逻辑上作为共享内存并行机使用。
·也称为NUMA结构(NonUniformMemoryAccess)。
·不同处理单元间内存的共享通过特殊的硬件/软件实现。
·具有比SMP型并行机更好的可扩展性(超过100个CPU)。
·代表机型:
SGIOrigin2000/3000。
§1.1.6SMP/DSM机群
·将多台SMP或DSM并行机通过互联网络连接而成。
·目前国内外最高性能的并行机大多是这种结构。
§1.1.7微机/1.4.作站机群
·微机机群(PCcluster,又称为Beowulfcluster),1.4.作站机群(NOW,NetworkOfWorkstations)。
将联网的多台微机或工作站组织成一台并行计算机。
目前常用的网络有以太网(l00Mbps),ATM(155/622Mbps),Myrinet(1.2Gbps,)
·适合于构造中等规模的并行系统(多达数百个处理器)。
·根据机群中所使用的机型可为同构型和异构型两种。
·根据机群的使用方式又可分为专用型和兼用型,前者指该机群专门用于并行计算。
·微机工作站机群的优点是价格便宜、配置灵活、但其规模及并行效率受网络设备的制。
配以适当的系统管理工具及作业调度、性能监控、并行程序调试开发环境、及外设等,微机工作站机群系统可以达到与商用MPP系统一样的使用效果。
§1.1.8TOP500
TOP50OSupercomputerSites:
【http:
//www.top500.org】
§1.2并行编程模式
§1.2.1自动并行与手工并行
·在SMP及DSM并行机上编译系统通常具有一定的对用户程序(C/Fortran)进行自动并行化的能力,但经常需要人工干预(通过指导语句、命令行选项等)以达到理想的并行效率。
并行主要针对循环进行(细粒度并行)。
·在分布式内存并行机上尚无通用高效的,自动并行1.4.具,主要依靠人1.4.编写并行程序。
·并行算法的设计及并行程序的编制已成为目前制约大规模并行计算机应用的主要障碍。
5
§1.2.2OpenMP
在串行程序的循环语句前插入特定的指导语句,告知编译系统一些有助于对该循环进行并行的信息以及/或是强制编译系统按指定的方式将该循环并行化
·主要限于SMP及DSM型的并行系统,现在也已发展到一些MPP系统
·通常结合编译系统的自动并行化功能使用
·也有一些自动并行化1.4.具,它们对程序结构及数据流进行分析,然后自动插入适当的OpenMP语句
·OpenMP的优点是学习及使用相对简单,很多情况下不需要对原有算法及程序做大的改动。
缺点是只适合一类特定的机型,并且程序的可扩展性通常不如用消息传递方式编写的并行程序
·对一些具有强数据相关性的计算过程需要通过改变计算顺序或修改算法甚至设计新的算法来实现并行计算
·OpenMP程序实例:
矩阵乘:
【matmul-omp.f】
§1.2.3DSM编程模式
·建立在某种内存一致性协议之上,通过软件或软硬件结合的方式实现处理器间内存的共享
·通过要求DSM并行程序中对内存的读写遵循一定的规则来减小维护内存一致性的开销
·参看programming/唐志敏/jiajia.ppt
·软件DSM系统实例:
Jiajia:
【
§1.2.4高性能Fotran:
HPF
·基于数据并行的编程语言,即用户通过指导语句指示编译系统将数据分布到各处理器上,编译系统根据数据分布的情况生成并行程序
·主要面向Fotran90/95
·优点:
编程相对简单,串并行程序一致
·适合于SMP/DSM/MPP/cluster系统
·主要缺点是并行过程对用户的透明度不高,程序的性能很大程度上依赖于所用的编译系统及用户对编译系统的了解,需要针对不同的HPF编译器做不同的优化,影响了程序的可移植性
·HPF程序实例:
矩阵乘:
【matmul-hpf.f】
§1.2.5消息传递并行编程模式
·并行程序由一组独立运行的进程构成,进程间通过相互发送消息来实现数据交换
·可以说消息传递并行编程是并行应用程序开发的最底层编程方式之一很多其它并行开发语言或1.4.具(如一些HPF编译器)将程序转化成消息传递型并行程序来实现并行
·常用的消息传递平台有PVM(ParallelVirtualMachine)和MPI(MessagePassingInterface)
·程序通用性好,用PVM或MPI编写的程序可以在任何并行计算机上运行
·能够达到很高的并行效率,具有很好的可扩展性
·缺点:
程序的编制与调试比较困难,许多情况下要对程序甚至算法做大的改动
6
§1.3Unix程序开发简介
§1.3.lUnix中常用的编译系统
·编译器由前端和后端组成。
通常用户只需使用前端命令即可完成编译、链接
·C编译器cc,gcc(GNUC)等
·Fortran编译器f77,fc,g77(GNUFortran),f90(Fortran90)等
·可用man查看使用手册,如mancc,manf77等等
·命令行形式:
%cc[options]files[options]
%f77[options]files[options]
·文件的类型由文件的扩展名决定
。
C源代码:
C;
。
Fortran77源代码:
.f;
。
带预处理的Fortran源代码:
.F;
。
Fortran90源代码:
.f90;
。
C++源代码:
.C++,,C,.cpp,.cc,.cxx;
。
汇编代码:
.s,.S;
。
目标文件:
.o;
。
库文件:
.a;
。
共享库:
.so;
·命令行选项
。
-C只编译,不链接,即只生成O文件。
。
-o{a”“ma指定输出文件名,缺省为*.o,a.out等。
。
-Ipath指定(增加)包含文件(¤*h)的搜索目录。
。
-Lpath指定(增加)库文件的搜索目录。
。
-lname与库文件libname.a链接。
。
优化开关-O,-O1,-O2,-O3,等等。
。
标码中包含源文件名、行号等信息(用于程序调试):
-g
·例如:
of77-O2-oprogfile1.ffile2.cfile2.ofile4.a
of77-cfile.f
f77-ooutfile.o
of77-cprog-I/usr/local/mpi/includefile.f
f77-oprog-L/usr/local/mpi/libfile.o-lmpi(等价于f77-oprogfile.o/usr/local/mpi/lib/libmpi.a)
§1.3.2实用1.4.具make
·命今形式
make[_fMakefile][options][target[target...]]
其中-f选项给出定义规则的文件名(简称Makefile文件),缺省使用当前录下的Makefile或makefile文件.target指明要求生成的目标(在Makefile中定义),当命令行中不给出target时make只生成Makefile中定义的笫一个目标比较有用也较通用的命令行选项有下面一些:
-f文件名指定Makefile文件名
-n只显示将要执行的命令而并不执行它们
-p显示定义的全部规则及宏,用于对Makefile的调试
·通过Makefile文件定义一组文件之间的依赖关系及处理命令,方便程序开发过程中的编译与维护。
·处理规则的建立以特定的文件扩展名及文件修改时间为基础缺省支持常用的程序扩展名.C,
.f,.F,.o,.a,.h,等等用户可以通过.SUFFIXES:
目标定义新的文件扩展名
·基本规则
目标:
依赖对象
例:
prog:
file1.ffile2.ffil3.cfile4.CC
f77-O2-oprogfile1.ffile2.ffil3.cfile4.CC
其含义为:
如果目标(prog)不存在,或者任何一个依赖对象(file1.ffile2.ffil3.cfile4.CC)比目
标新,则执行指定的命令
·宏定义
SRC=file1.ffile2.ffil3.c
prog:
$(SRC)
f77-O2-oprog$(SRC)
环境变量可以在Makefile中作为宏使用,如$(HOME)
·常用预定义的宏
。
$@:
代表标名(上例中为prog)
。
$<:
笫一个依赖对象名(上例中为file1.f)
。
$^:
全部依赖对象名(上例中为file1.ffile2.ffil3.c)
。
$?
:
全部比标新的依赖对象名
。
$*:
用在隐式规则中,代表不含扩展名的依赖对象
·隐式规:
prog:
file1.ofile2.ofil3.o
f77-O2-oprog$?
.c.o:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 中科院 数学 系统科学 研究院 并行 计算 课程 讲义 草稿