计算机仿真原理及应用.ppt

上传人:仙人指路1688 文档编号:2409537 上传时间:2023-02-18 格式:PPT 页数:74 大小:6.41MB
返回 下载 相关 举报
计算机仿真原理及应用.ppt_第1页
第1页 / 共74页
计算机仿真原理及应用.ppt_第2页
第2页 / 共74页
计算机仿真原理及应用.ppt_第3页
第3页 / 共74页
计算机仿真原理及应用.ppt_第4页
第4页 / 共74页
计算机仿真原理及应用.ppt_第5页
第5页 / 共74页
点击查看更多>>
资源描述

《计算机仿真原理及应用.ppt》由会员分享,可在线阅读,更多相关《计算机仿真原理及应用.ppt(74页珍藏版)》请在三一办公上搜索。

1、单位:物理电子学院 主讲人:王刚 Email:buncan_,计算机仿真原理与应用,1.为什么需要并行计算?2.并行计算技术的分类3.并行计算的主要技术问题4.MPI并行程序设计,5 并行计算与仿真,贯穿整个计算机技术发展的核心目标:提高计算性能!,Intel微处理器每秒1千8百亿次浮点运算!,近20年性能提高3千多倍,巨型机:中国天河一号,2010年底世界TOP500强第1名每秒2千5百多万亿次浮点运算,近20年性能提高3千多倍,亿亿千万亿百万亿十万亿万亿千亿百亿十亿亿,2011年6月日本“K Computer”以每秒1亿亿次名列第一,几乎是第2-9位的总和,中国天河位列第二,亿亿千万亿百万

2、亿十万亿万亿千亿百亿十亿亿,提高计算机性能的主要手段1.提高处理器字长:70-80年代:Intel处理器:71年,4004,4bits;78年,8086,8bits;82年,80286:16bits;85年90s,80386,486,Pentium,P2,P3,P4:32bits 05年,Pentium D往后-Core i3,i5,i7:64bits,提高计算机性能的主要手段2.提高集成度摩尔定律:芯片集成度每18个月翻一倍,计算性能提高一倍,为什么需要并行计算?,提高计算机性能的主要手段3.流水线等微体系结构技术 实现指令级并行(Instruction-Level Parallelism,

3、ILP)RISC结构 5级流水线,为什么需要并行计算?,提高计算机性能的主要手段3.流水线等微体系结构技术 分支预测,寄存器重命名,超长指令字(VLIW),超标量(Superscalar),乱序执行,Cache Pentium 4(CISC结构)采用了20级复杂流水线,为什么需要并行计算?,提高计算机性能的主要手段4.提高处理器频率:1990s-2004:,为什么需要并行计算?,所有这些技术极大地提高了微处理器的计算性能,但2004年后处理器的性能不再像人们预期的那样提高,单核处理器性能提升接近极限!,集成度,性能,为什么需要并行计算?,单核处理器性能提升接近极限1.VLSI集成度不可能无限制

4、提高,芯片集成度已进入极小尺度级别,集成度不可能无限制提高1nm(纳米)约头发直径的6万分之一或4个原子长度10-20nm仅有几百个原子的长度,为什么需要并行计算?,单核处理器性能提升接近极限2.处理器的指令级并行度提升接近极限 长指令字,流水线,分支预测,寄存器命名,超标量,乱序执行,动态发射,高速缓冲(Cache)高级流水线等各种复杂的微体系结构技术都已得到研究应用,难以进一步挖掘更多的指令级并行性(Instruction-Level Parallism),ILP墙,为什么需要并行计算?,单核处理器性能提升接近极限3.处理器速度和存储器速度差异越来越大处理器性能每2年翻一倍,而存储器性能每

5、6年翻一倍 为了匹配两者间速度差异,处理器需要做越来越大的Cache,存储墙,CPU计算速度:1ns级别主存访问速度:100ns级别,为什么需要并行计算?,单核处理器性能提升接近极限4.功耗和散热大幅增加超过芯片承受能力晶体管密度不断提高,单位面积功耗和散热大幅增加主频提高导致功耗和散热急剧增加功耗P=CV2f,C:时钟跳变时门电路电容,V:电压,f:主频晶体管数越多,电容越大=功耗越大;主频越高=功耗越大,功耗墙,Cite from Edward L.Bosworth,The Power Wall,2010,为什么需要并行计算?,单核处理器性能提升接近极限2005年前,人们预期可以一直提升处

6、理器主频但2004年5月Intel处理器Tejas and Jayhawk(4GHz)因无法解决散热问题最终放弃,标志着升频技术时代的终结,Cite from Edward L.Bosworth,The Power Wall,2010,2005年前人们预计的主频提升路线图,2007年人们大大降低了主频提升预期,2005年后Intel转入多核技术,为什么需要并行计算?,单处理器向多核并行计算发展成为必然趋势多核/众核并行计算 2005年Intel全面转入多核计算技术,采用多核/众核构架,简化单处理器的复杂设计,代之以单个芯片上设计多个简化的处理器核,以多核/众核并行计算提升计算性能双核:Pent

7、ium D(05),EE(06),Xeon(06)Core 2 Duo E系列,T系列(06)Core i3,i5(10)4核:Core 2 Quad Q系列(07)Core i5,i7(08,09,10)6核:Core i7 970/980(10)8核:AMD Bulldozer(10),典型的双核处理器结构,为什么需要并行计算?,单处理器向多核并行计算发展成为必然趋势多核/众核并行计算 Intel实验芯片 Single Cloud Chip,SCC:48核 Teraflops,80核,Cite from Intel website:http:/,ASCI Red:1996,第一个达到1TF

8、lops(10万亿次浮点运算)的并行计算系统,使用了10,000颗PentiumPro处理器(200MHz),耗电500kW,外加500kW用于机房散热Teraflops:达到1.01TFlops(3.16GHz)1.81TFlops(5.7GHz)功耗62W!,为什么需要并行计算?,单处理器向多核并行计算发展成为必然趋势多核/众核并行计算 根据摩尔定律,Intel预计其通用的众核并行计算芯片 2015年:128核 2017年:256核 2019年:512核 2023年:2024核 NVIDIA GPU Graphic Processing Unit,主要用于图形图像并行处理 Tesla M2

9、050/2070:448核 S2050 1U GPU 处理系统:4个M2050/2070,1792核,为什么需要并行计算?,应用领域计算规模和复杂度大幅提高爆炸性增长的Web规模数据量Google从2004年每天处理100TB数据到2008年每天处理20PB2009年eBays数据仓库,一个有2PB用户数据,另一个6.5PB用户数据包含170TB记录且每天增长150GB个记录;Facebook:2.5PB用户数据,每天增加15TB世界最大电子对撞机每年产生15PB(1千5百万GB)数据2015年落成的世界最大观天望远镜主镜头像素为3.2G,每年将产生6PB天文图像数据;欧洲生物信息研究中心(E

10、BI)基因序列数据库容量已达5PB;中国深圳华大基因研究所成为全世界最大测序中心,每天产生300GB基因序列数据(每年100TB),为什么需要并行计算?,应用领域计算规模和复杂度大幅提高超大的计算量/计算复杂度用SGI工作站进行电影渲染时,每帧一般需要12小时一部2小时的电影渲染需要:2小时x3600秒x24帧x(12小时)/24小时=2040年!特殊场景每帧可能需要60个小时(影片“星舰骑兵”中数千只蜘蛛爬行的场面),用横向4096象素分辨率进行渲染时,如果以每帧60个小时的速度,则1秒的放映量(24帧)需要60天的渲染时间,1分钟则需要100年!世界著名的数字工作室Digital Doma

11、in公司用了一年半的时间,使用了300多台SGI超级工作站,50多个特技师一天24小时轮流制作泰坦尼克号中的电脑特技,为什么需要并行计算?,解决方案?,并行计算!,SMP,MPP,Cluster,GRID,Cloud,MulticoreManycore,为什么需要并行计算?,并行计算技术的发展趋势和影响越来越多的研究和应用领域将需要使用并行计算技术 并行计算技术将渗透到每个计算应用领域,尤其是涉及到大规模数据和复杂计算的应用领域并行计算技术将对传统计算技术产生革命性的影响并行计算技术将影响传统计算技术的各个层面,与传统计算技术相互结合产生很多新的研究热点和课题:体系结构技术 操作系统、编译技术

12、、数据库等系统软件技术 程序设计技术和方法 软件工程技术 图形图像和多媒体信息处理 人工智能 各种应用软件开发很多传统的串行算法和计算方法都将需要重新研究和设计其并行化算法和计算方法;我系很多研究领域都明确需要基于并行计算技术进行研究,为什么需要并行计算?,为什么需要学习并行计算技术?软件开发/程序设计人员面临挑战!20-30年里程序设计技术的最大的革命是面向对象技术 The revolution in mainstream software development from structured programming to object-oriented programming was t

13、he greatest such change in the past 20 to 30 years下一个程序设计技术的革命将是并行程序设计 Concurrency is the next major revolution in how we write software今天绝大多数程序员不懂并行设计技术,就像15年前*绝大多数程序员不懂面向对象技术一样 The vast majority of programmers today dont grok concurrency,just as the vast majority of programmers 15 years ago didnt

14、yet grok objects,*March 2005,Cite from Herb Sutter,The Free Lunch Is Over-A Fundamental Turn Toward Concurrency in Software Dr.Dobbs Journal,30(3),1.为什么需要并行计算?2.并行计算技术的分类3.并行计算的主要技术问题4.MPI并行程序设计,2.并行计算技术的分类,经过多年的发展,出现了不同类型的并行计算技术和系统,同时也存在不同的分类方法按数据和指令处理结构:弗林(Flynn)分类按并行类型按存储访问构架按系统类型按计算特征按并行程序设计模型/方

15、法,并行计算技术的分类,按数据和指令处理结构分类:弗林(Flynn)分类 1966年,斯坦福大学教授Flynn提出的经典的计算机结构分类,从最抽象的指令和数据处理结构的角度进行分类SISD:单指令单数据流 传统的单处理器串行处理SIMD:单指令多数据流 向量机,信号处理系统MISD:多指令单数据流 很少使用MIMD:多指令多数据流 最常用,TOP500 基本都属于MIMD类型,弗林(Flynn)分类,SISD,MIMD,SIMD,并行计算技术的分类,Cite from Jimmy Lin,What is cloud computing,2008,并行计算技术的分类,按并行类型分类 位级并行(B

16、it-Level Parallelism)指令级并行(ILP:Instruction-Level Parallelism)线程级并行(Thread-Level Parallelism)数据级并行:一个大的数据块划分为小块,分别 由不同的处理器/线程处理 任务级并行:一个大的计算任务划分为子任务分 别由不同的处理器/线程来处理,按存储访问结构分类A.共享内存(Shared Memory)所有处理器通过总线共享内存 多核处理器,SMP 也称为UMA结构(Uniform Memory Access)B.分布共享存储体系结构 各个处理器有本地存储器 同时再共享一个全局的存储器C.分布式内存(Distr

17、ibuted Memory)各个处理器使用本地独立的存储器 B和C也统称为NUMA结构(Non-Uniform Memory Access),并行计算技术的分类,ABC,并行计算技术的分类,按系统类型分类 多核/众核并行计算系统MC(Multicore/Manycore)或Chip-level multiprocessing,CMP 对称多处理系统SMP(Symmetric Multiprocessing)多个相同类型处理器通过总线连接并共享存储器 大规模并行处理MPP(Massive Parallel Processing)专用内联网连接一组处理器形成的一个计算系统 集群(Cluster)网

18、络连接的一组普通商用计算机构成的计算系统 网格(Grid)用网络连接远距离分布的一组异构计算机构成的 计算系统,紧密耦合度松散,低可扩展性高,低能 耗高,并行计算技术的分类,按系统类型分类 不同系统的特征和对比,从MC到Grid,耦合度越来越低,但可扩展性越来越高,系统规模越来越大,而能耗也越来越高MC处理器核通过NOC(片上网络)集成在一个芯片上,通常使用混合式内存访问机制(本地缓存加全局内存),功耗很低SMP使用独立的处理器和共享内存,以总线结构互联,运行一个操作系统,定制成本高,难以扩充,规模较小(2-8处理器)MPP使用独立的处理器及独立的内存、OS,专用的高速内联网络,难以升级和扩充

19、,规模中等(TOP500中有80多个)Cluster使用商品化的刀片或机架服务器,以网络互联为一个物理上紧密的计算系统,可扩展性强,规模可小可大,是目前高性能并行计算最常用的形式(TOP500中有400多个)Grid则为地理上广泛分布的异构计算资源构成的一个极为松散的计算系统,主要用于并行度很低的大规模科学计算任务,并行计算技术的分类,按计算特征分类 数据密集型并行计算(Data-Intensive Parallel Computing)数据量极大、但计算相对简单的并行处理 如:大规模Web 信息搜索 计算密集型并行计算(Computation-Intensive Parallel Compu

20、ting)数据量相对不是很大、但计算较为复杂的并行处理 如:3-D建模与渲染,气象预报,科学计算 数据密集与计算密集混合型并行计算 兼具数据密集型和计算密集型特征的并行计算,如3D电影渲染,并行计算技术的分类,按并行程序设计模型/方法分类 共享内存变量(Shared Memory Variables)多线程共享存储器变量方式进行并行程序设计,会引起数 据不一致性,导致数据和资源访问冲突,需要引入同步控制机制;Pthread,OpenMP:共享内存式多处理并行编程接口 消息传递方式(Message Passing)对于分布式内存结构,为了分发数据和收集计算结果,需要在各个计算节点间进行数据通信,

21、最常用的是消息 传递方式;MPI:消息传递并行编程接口标准 MapReduce方式 Google公司提出的MapReduce并行程序设计模型,是目 前最易于使用的并行程序设计方法,广泛使用于搜索引 擎等大规模数据并行处理,并行计算技术的分类,不同类型并行计算技术和系统的发展历史和现状主要发展历史阶段 1975-1985 主要是向量机技术,如Cray1,Cray2。但基于多线程的并行计算也逐步引入。1986-1995 大规模并行处理MPP成为主流并行计算技术,消息传递编程接口MPI得到开发应用。目前TOP500中有84个基于MPP。1995-现在 Cluster和Grid并行计算技术成为主流,但

22、目前Grid的发展已呈下降趋势,目前TOP500中有414个基于Cluster。,并行计算技术的分类,不同类型并行计算技术和系统的发展历史和现状主要发展历史阶段,并行计算技术的分类,不同类型并行计算技术和系统的发展历史和现状主要发展趋势SMP作为共享内存式小规模并行计算技术一直活跃60-70年代基于大型机的SMP系统,80年代基于80386/80486的SMP系统,90年代到目前基于多核的个人电脑、服务器大都基于SMP多核/众核并行计算成为重要发展趋势 由于单核处理器性能发展的瓶颈,同时由于多核/众核计算计算自身具有的体积小、功耗低等诸多技术特点和优势,今后多核/众核并行计算会称为必然趋势并行

23、计算软件技术远远落后于硬件发展速度 并行计算硬件技术水平和规模发展迅速,但并行计算软件技术远远跟不上硬件发展水平和速度,缺少有效的并行计算软件框架、编程模型和方法,1.为什么需要并行计算?2.并行计算技术的分类3.并行计算的主要技术问题4.MPI并行程序设计,3.并行计算的主要技术问题,数据怎么存?怎么算?,硬件构架,软件构架,并行算法,3.并行计算的主要技术问题,依赖于所采用的并行计算体系结构,不同类型的并行计算系统,在硬件构架、软件构架和并行算法方面会涉及到不同的技术问题,但概括起来,主要有以下技术问题:多核/多处理器网络互连结构技术 存储访问体系结构 分布式数据与文件管理 并行计算任务分

24、解与算法设计 并行程序设计模型和方法 数据同步访问和通信控制 可靠性设计与容错技术 并行计算软件框架平台 系统性能评价和程序并行度评估,并行计算的主要技术问题,多核/多处理器网络互连结构技术 主要研究处理器间互联拓扑结构,尤其在包含大量处理器的并行计算系统中,需要具有良好的互联结构,以保证大量处理器能真正有效地协同工作,获得应有的并行计算效率。共享总线连接(Shared Bus)交叉开关矩阵(Crossbar Switch)环形结构(Torus)Mesh网络结构(Mesh Network)片上网络(NOC,Network-on-chip),并行计算的主要技术问题,存储访问体系结构 主要研究不同

25、的存储结构,以及在不同存储结构下的特定技术问题共享存储器体系结构(Shared Memory)共享数据访问与同步控制分布存储体系结构(Distributed Memory)数据通信控制和节点计算同步控制分布共享存储结构(Distributed Shared Memory)Cache的一致性问题数据访问/通信的时间延迟,并行计算的主要技术问题,分布式数据与文件管理 并行计算的一个重要问题是,在大规模集群环境下,如何解决大数据块的存储和访问管理;尤其是数据密集型并行计算时,理想的情况是提供分布式数据与文件管理系统,如RedHat GFS(Global File System)IBM GPFSSun

26、 LustreGoogle GFS(Google File System)Hadoop HDFS(Hadoop Distributed File System),并行计算的主要技术问题,并行计算任务的分解与算法设计 一个大型计算任务如何从数据上或者是计算方法上进行适当的划分,分解为一组子任务以便分配给各个节点进行并行处理,如何搜集各节点计算的局部结果 数据划分 如何将特大的数据进行划分并分配给各节点进行处理。算法分解与设计 一个大的尤其是计算密集型的计算任务,首先需要寻找并确定其可并行计算的部分,然后进一步寻找好的分解算法:可把一个整体的算法纵向分解为一组并行的子任务,或者对于复杂的计算任务可

27、横向分解为多个并行处理过程。,并行计算的主要技术问题,并行程序设计模型和方法 根据不同的硬件构架,不同的并行计算系统可能需要不同的并行程序设计模型、方法、语言和编译技术。并行程序设计模型和方法 共享内存式并行程序设计:为共享内存结构并行计算系统提供的程序设计方法,需提供数据访问同步控制机制(如互斥信号,锁等),典型的如Pthread,OpenMP 消息传递式并行程序设计:为分布内存结构并行计算系统提供的、以消息传递方式完成节点间数据通信的程序设计方法 MapReduce并行程序设计:为解决前两者在并行程序设计上的缺陷,提供一个综合的编程框架,为程序员提供了一种简便易用的并行程序设计方法,并行计

28、算的主要技术问题,并行程序设计模型和方法 并行程序设计语言 语言级扩充:使用宏指令在 普通的程序设计语言(如C语 言)上增加一些并行计算宏 指令,如OpenMP(提供C,C+,Fortran语言扩充,Linux&Windows)并行计算库函数与编程接口:使用函数库提供并行计算编程接口,如MPI(消息传递接口),CUDA(NVIDIA GPU)并行编译与优化技术 编译程序需要考虑编译时的自动化并行性处理,以及为提高计算性能进行并行计算优化处理,int main(int argc,char*argv)const int N=100000;int i,aN;#pragma omp parallel

29、for for(i=0;i N;i+)ai=2*i;return 0;,并行计算的主要技术问题,数据同步访问和通信控制 如何解决并行化计算中共享数据访问和节点数据通信问题共享数据访问和同步控制 在包含共享存储器结构的系统中,不同处理器/线程访问共享存储区时,可能会导致数据访问的不确定性(竞争状态,race condition),因此需要考虑使用同步机制(互斥信号,条件变量等)保证共享数据和资源访问的正确性,还要解决同步可能引起的死锁问题。分布存储结构下的数据通信和同步控制 在包含分布存储器结构的系统中,不同处理器/线程需要划分和获取计算数据,这些数据通常需要由主节点传送到各个从节点;由于各个节

30、点计算速度不同,为了保证计算的同步,还需要考虑各节点并行计算的同步控制(如Barrier,同步障),并行计算的主要技术问题,可靠性设计与容错技术 大型并行计算系统使用大量计算机,因此,节点出错或失效是常态,不能因为一个节点失效导致数据丢失、程序终止或系统崩溃,因此,系统需要具有良好的可靠性设计和有效的失效检测和恢复技术 设1万个服务器节点,每个服务器的平均无故障时间(MTBF,Mean-Time Between Failures)是1千天,则平均每天10个服务器出错!数据失效恢复:大量的数据存储在很多磁盘中,当出现磁盘出错和数据损坏时,需要有良好的数据备份和数据失效恢复机制,保证数据不丢失以及

31、数据的正确性。系统和任务失效恢复:一个节点失效不能导致系统崩溃,而且要能保证程序的正常运行,因此,需要有很好的失效检测和隔离技术,并进行计算任务的重新调度以保证计算任务正常进行。,并行计算的主要技术问题,并行计算软件框架平台 并行计算软件技术跟不上并行计算硬件系统规模的发展,需要研究有效的并行计算软件框架、平台和软件设计方法 提供自动化并行处理能力现有的OpenMP、MPI、CUDA等并行程序设计方法需要程序员考虑和处理数据存储管理、数据和任务划分和调度执行、数据同步和通信、结果收集、出错恢复处理等几乎所有技术细节,非常繁琐需要研究一种具有自动化并行处理能力的并行计算软件框架和平台,提供自动化

32、的并行处理,能屏蔽并行化处理的诸多系统底层细节,交由软件框架来处理,提供必要的编程接口,简化程序员的编程,让程序员从系统底层细节中解放出来,专注于应用问题本身的计算和算法的实现。如Google和Hadoop MapReduce 高可扩展性和系统性能提升并行计算框架允许方便地增加节点扩充系统,但系统节点的增加不影响程序的编写,并且要能保证节点增加后系统性能有线性的提升 MapReduce并行计算框架保证系统性能几乎随节点的增加线性提升,并行计算的主要技术问题,系统性能评估和程序并行度评估 系统性能评估 用标准性能评估(Benchmark)方法评估一个并行计算系统的浮点计算能力。High-Perf

33、ormance Linpack Benchmark是最为知名的评估工具,TOP500用其进行评估和排名 程序并行度评估 程序能得到多大并行加速依赖于该程序有多少可并行计算的比例。经典的程序并行加速评估公式Amdahl定律:其中,S是加速比,P是程序可并行比例 N是处理器数目,S=,并行计算的主要技术问题,系统性能评估和程序并行度评估,根据Amdahl定律:一个并行程序可加速程度是有限制的,并非可无限加速,并非处理器越多越好并行比例vs加速比50%=最大2倍75%=最大4倍90%=最大10倍95%=最大20倍,Cite from http:/en.wikipedia.org/wiki/Amdah

34、l%27s_law,1.为什么需要并行计算?2.并行计算技术的分类3.并行计算的主要技术问题4.MPI并行程序设计,4.MPI并行程序设计,MPI简介Message Passing Interface,基于消息传递的高性能并行计算编程接口在处理器间以消息传递方式进行数据通信和同步,以库函数形式为程序员提供了一组易于使用的编程接口。93年由一组来自大学、国家实验室、高性能计算厂商发起组织和研究,94年公布了最早的版本MPI 1.0,经过MPI1.1-1.3,目前版本MPI 2.2,MPI 3版本正在设计中特点:提供可靠的、面向消息的通信;在高性能科学计算领域广泛使用,适合于处理计算密集型的科学计

35、算;独立于语言的编程规范,可移植性好,MPI并行程序设计,开放领域/机构实现MPICH 阿贡国家实验室和密西西比大学 最早的完整MPI标准实现.LAM Ohio Supercomputer centerMPICH/NT Mississippi State UniversityMPI-FM Illinois(Myrinet)MPI-AM UC Berkeley(Myrinet)MPI-PM RWCP,Japan(Myrinet)MPI-CCL California Institute of TechnologyCRI/EPCC MPI Cray Research and Edinburgh Pa

36、rallel Computing CentreMPI-AP Australian National University-CAP Research Program(AP1000)W32MPI Illinois,Concurrent SystemsRACE-MPI Hughes Aircraft Co.MPI-BIP INRIA,France(Myrinet),MPI实现版本厂商实现HP-MPI Hewlett Packard;Convex SPPMPI-F IBM SP1/SP2Hitachi/MPI HitachiSGI/MPI SGI PowerChallenge seriesMPI/DE

37、 NEC.INTEL/MPI Intel.Paragon(iCC lib)T.MPI Telmat MultinodeFujitsu/MPI Fujitsu AP1000EPCC/MPI Cray&EPCC,T3D/T3E语言实现C/C+JavaPython.NET,MPI并行程序设计,MPI主要功能 用常规语言编程方式,所有节点运行同一个程序,但处理不同的数据 提供点对点通信(Point-point communication)提供同步通信功能(阻塞通信)提供异步通信功能(非阻塞通信)提供节点集合通信(Collective communication)提供一对多的广播通信提供多节点计算同步控

38、制提供对结果的规约(Reduce)计算功能 提供用户自定义的复合数据类型传输,MPI并行程序设计,MPI基本程序结构,MPI程序头文件,初始化MPI环境,并行计算与通信,关闭MPI环境,#include main(int argc,char*argv)int numtasks,rank;MPI_Init(,MPI并行程序设计,MPI并行程序设计接口基本编程接口 MPI提供了6个最基本的编程接口,理论上任何并行程序都可以通过这6个基本API实现1.MPI_Init(argc,argv):初始化MPI,开始MPI并行计算程序体2.MPI_Finalize:终止MPI并行计算3.MPI_Comm_S

39、ize(comm,size):确定指定范围内处理器/进程数目4.MPI_Comm_Rank(comm,rank):确定一个处理器/进程的标识号5.MPI_Send(buf,count,datatype,dest,tag,comm):发送一个消息6.MPI_Recv(buf,count,datatype,source,tag,comm,status):接受消息size:进程数,rank:指定进程的IDcomm:指定一个通信组(communicator)Dest:目标进程号,source:源进程标识号,tag:消息标签,MPI并行程序设计,MPI并行程序设计接口基本编程接口MPI并行计算初始化与结

40、束 任何一个MPI程序都要用MPIInit和MPIFinalize来指定并行计算开始和结束的地方;同时在运行时,这两个函数将完成MPI计算环境的初始化设置以及结束清理工作。处于两者之间的程序即被认为是并行化的,将在每个机器上被执行。,#include#include main(int argc,char*argv)int numtasks,rank;MPI_Init(,Hello parallel world!Hello parallel world!Hello parallel world!Hello parallel world!Hello parallel world!,在一个有5个处理

41、器的系统中,输出为,MPI并行程序设计,MPI并行程序设计接口基本编程接口通信组(Communicator)为了在指定的范围内进行通信,可以将系统中的处理器划分为不同的通信组;一个处理器可以同时参加多个通信组;MPI定义了一个最大的缺省通信组:MPI_COMM_WORLD,指明系统中所有的进程都参与通信。一个通信组中的总进程数可以由MPI_Comm_Size调用来确定。进程标识 为了在通信时能准确指定一个特定的进程,需要为每个进程分配一个进程标识,一个通信组中每个进程标识号由系统自动编号(从0开始);进程标识号可以由MPI_Comm_Rank调用来确定。,MPI并行程序设计,MPI并行程序设计

42、接口 点对点通信 同步通信:阻塞式通信,等待通信操作完成后才返回 MPI_Send(buf,count,datatype,dest,tag,comm):发送一个消息 MPI_Recv(buf,count,datatype,source,tag,comm,status):接受消息 同步通信时一定要等到通信操作完成,这会造成处理器空闲,因而可能导致系统效率下降,为此MPI提供异步通信功能 异步通信:非阻塞式通信,不等待通信操作完成即返回 MPI_ISend(buf,count,datatype,dest,tag,comm,request):异步发送 MPI_IRecv(buf,count,data

43、type,source,tag,comm,status,request)异步接受消息 MPI_Wait(request,status):等待非阻塞数据传输完成 MPI_Test(request,flag,status):检查是否异步数据传输确实完成,MPI并行程序设计,MPI编程示例 简单MPI编程示例,#include#include main(int argc,char*argv)int num,rk;MPI_Init(,Hello world from Process 0 of 5Hello world from Process 1 of 5Hello world from Proces

44、s 2 of 5Hello world from Process 3 of 5Hello world from Process 4 of 5,MPI并行程序设计,MPI编程示例 消息传递MPI编程示例1,#include#include int main(int argc,char*argv)int myid,numprocs,source;MPI_Status status;char message100;MPI_Init(,I am process 0.I recv string Hello World from process 1.I am process 0.I recv string

45、 Hello World from process 2.I am process 0.I recv string Hello World from process 3.,MPI并行程序设计,MPI编程示例 消息传递MPI编程示例2-计算大数组元素的开平方之和设系统中共有5个进程,进程号:0,1,2,3,40号进程作主节点,负责分发数据,不参加子任务计算1-4号进程作为子节点从主进程接受数组数据:#1:data0,4,8,#2:data1,5,9,各自求开平方后累加=本地SqrtSum#3:data2,6,10,#4:data3,7,11,#0:Sqrt Sum=各子进程的SqrtSum,I a

46、m process 1.I recv total 251 data items from process 0,and SqrtSum=111.11I am process 2.I recv total 251 data items from process 0,and SqrtSum=222.22I am process 3.I recv total 250 data items from process 0,and SqrtSum=333.33I am process 4.I recv total 250 data items from process 0,and SqrtSum=444.4

47、4I am process 0.I recv total 0 data items from process 0,and SqrtSum=1111.10,MPI并行程序设计,MPI编程示例 消息传递MPI编程示例2,#include#include#include#define N=1002int main(int argc,char*argv)int myid,P,source,C=0;double dataN,SqrtSum=0.0;MPI_Status status;char message100;MPI_Init(,MPI并行程序设计,MPI编程示例 消息传递MPI编程示例3 Mont

48、e Carlo方法计算圆周率 Monte Carlo是一种随机抽样统计方法,可用于解决难以用数学公式计算结果的复杂问题的近似求解。设r取值为0.5,为了提高计算精度,需要计算尽量大的随机点数,我们考虑在一个并行系统中让每台机器都各自算一个,然后汇总求一个平均值,作一个直径为2r的圆及其外切正方形,在其中随机产生n个点,落在圆内的点数记为m。根据概率理论,当随机点数足够大时,m与n的比值可近似看成是圆与正方形面积之比。故有:m/n x r2/(2r)2,4m/n,MPI并行程序设计,MPI编程示例 消息传递MPI编程示例3Monte Carlo方法计算圆周率,#include“mpi.h”#in

49、clude#include main(int argc,char*argv)int myid,numprocs;int namelen,source;long count=1000000;MPI_Status status;MPI_Init(,MPI并行程序设计,MPI编程示例 消息传递MPI编程示例3Monte Carlo方法计算圆周率,pi=4.0*m/n;printf(“Process%d of%pi=%fn”,myid,numprocs,pi);if(myid!=0)/*从节点将本地计算的圆内计数值发送到主节点*/MPI_Send(,Process 0 of 3 pi=3.14135P

50、rocess 1 of 3 pi=3.14312Process 2 of 3 pi=3.14203pi=3.14216 汇总平均值,MPI并行程序设计,节点集合通信接口 提供一个进程与多个进程间同时通信的功能,Buffer,Buffer,Transmission,Send,Buffer,Buffer,Receive,MPI并行程序设计,节点集合通信接口三种类型的集合通信功能 同步(Barrier)MPI_Barrier:设置同步障使所有进程的执行同时完成 数据移动(Data movement)MPI_BCAST:一对多的广播式发送MPI_GATHER:多个进程的消息以某种次序收集到一个进程MP

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 建筑/施工/环境 > 项目建议


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号