- 1、本文档共74页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
并行编程初步
并行编程初步
张丹丹
上海超级计算中心
2011 3 4- -
提 纲
? 引言
? 认识MPI编程
? MPI编程简介
? 实例
并行计算机体系架构
共享存储(Shared Memory)
并行计算机体系架构
? 分布式存储(Distributed Memory)
并行计算机体系架构
? 混合架构(Hybrid)
并行编程模型
? 数据并行模型
相同的操作同时作用于不同的数据
? 共享变量模型
用共享变量实现并行进程间的通信
? 消息传递模型
在消息传递模型中,驻留在不同节点上的进程可以通过网络传递
消息相互通信,实现进程之间的信息交换、协调步伐、控制执行
等。
并行编程模型
特征 数据并行 共享变量 消息传递
典型代表 HPF OpenMP MPI,PVM
可移植性 SMP,DSM,
MPP
SMP,DSM 所有流行并行
计算机
并行粒度 进程级细粒度 线程级细粒度 进程级大粒度
并行操作方式 松散同步 异步 异步
数据存储模式 共享存储 共享存储 分布式存储
数据分配方式 半隐式 隐式 显示
学习入门难度 偏易 容易 较难
可扩展性 一般 较差 好
什么是MPI?
? Massage Passing Interface:是消息传递函数库
的标准规范,由MPI论坛开发,支持Fortran和
C/C++,
– 一种新的库描述,不是一种语言
共有上百个函数调用接口 在F t 和C/C 语言中– , or ran ++
可以直接对这些函数进行调用
– 是一种标准或规范,而不是特指某一个对它的具体实现
– MPI是一种消息传递编程模型,并成为这种编程模型的
代表和事实上的标准
为什么要使用MPI?
? 高可移植性
– MPI已在PC机、MS Windows以及所有主要的
Unix工作站上和所有主流的并行机上得到实现
– 使用MPI作消息传递的C/C++或Fortran并行程序
可不加改变地在上述平台实现
? 没有更好的选择
常用的MPI版本
? MPICH
是MPI最流行的非专利实现 由Argonne国家实验室和密西西比州– ,
立大学联合开发,具有更好的可移植性
– 当前最新版本有MPICH 1.2.7p1和MPICH2 1.3.2p1
? OpenMPI
– LAMMPI的下一代MPI实现
– 当前最新版本1.4.3
? 更多的商业版本MPI
– HP-MPI,MS-MPI,……
? 所有的版本遵循MPI标准,MPI程序可以不加修改的运行
提 纲
? 引言
认识MPI编程
? MPI编程简介
? 实例
从简单入手
? 下面我们首先分别以C语言的形式给出一个最
简单的MPI并行程序 h lle o.c
? 该程序在终端打印出Hello World!字样.
Hello.c (C语言)
#include stdio.h
#include mpi.h“
i ( i t h * [] )ma n n argc, c ar argv
{
MPI Init( argc, argv );_
printf(“Hello World!\n);
MPI_Finalize();
}
MPI程序的编译和运行
? mpicc –O2 –o hello hello.c
– 生成hello的可执行代码
? mpirun –np 4 hello
– 4,指定np的值,表示进程数,由用户指定
– hello,要运行的MPI并行程序
Hello是如何被执行的?
? SPMD: Single Program Multiple Data(MIMD)
#include stdio.h
#include mpi.h“
i (i t h * [])
#include stdio.h
#include mpi.h“
i (i t h * [])
#include stdio.h
#include mpi.h“#include stdio.h
#i l d i h“ma n n argc,c ar argv
{
MPI_Init(argc, argv);
printf(“Hello World!\n);
MPI Finalize();
ma n n argc,c ar argv
{
MPI_Init(argc, argv);
printf(“Hello World!\n);
MPI Finalize();
main(int argc,char *argv[])
{
MPI_Init(argc, argv);
printf(“Hello World!\n);
nc u e mp .
main(int argc,char *argv[])
{
MPI Init(argc argv);
#include stdio.h
#include mpi.h“
main(int
文档评论(0)