mpi学c语言用什么软件语言

 下载
 收藏
该文档贡献者很忙,什么也没留下。
 下载此文档
正在努力加载中...
下载积分:900
内容提示:MPI综述
文档格式:DOC|
浏览次数:1|
上传日期: 18:38:18|
文档星级:
该用户还上传了这些文档
下载文档:MPI综述.DOC
官方公共微信新手园地& & & 硬件问题Linux系统管理Linux网络问题Linux环境编程Linux桌面系统国产LinuxBSD& & & BSD文档中心AIX& & & 新手入门& & & AIX文档中心& & & 资源下载& & & Power高级应用& & & IBM存储AS400Solaris& & & Solaris文档中心HP-UX& & & HP文档中心SCO UNIX& & & SCO文档中心互操作专区IRIXTru64 UNIXMac OS X门户网站运维集群和高可用服务器应用监控和防护虚拟化技术架构设计行业应用和管理服务器及硬件技术& & & 服务器资源下载云计算& & & 云计算文档中心& & & 云计算业界& & & 云计算资源下载存储备份& & & 存储文档中心& & & 存储业界& & & 存储资源下载& & & Symantec技术交流区安全技术网络技术& & & 网络技术文档中心C/C++& & & GUI编程& & & Functional编程内核源码& & & 内核问题移动开发& & & 移动开发技术资料ShellPerlJava& & & Java文档中心PHP& & & php文档中心Python& & & Python文档中心RubyCPU与编译器嵌入式开发驱动开发Web开发VoIP开发技术MySQL& & & MySQL文档中心SybaseOraclePostgreSQLDB2Informix数据仓库与数据挖掘NoSQL技术IT业界新闻与评论IT职业生涯& & & 猎头招聘IT图书与评论& & & CU技术图书大系& & & Linux书友会二手交易下载共享Linux文档专区IT培训与认证& & & 培训交流& & & 认证培训清茶斋投资理财运动地带快乐数码摄影& & & 摄影器材& & & 摄影比赛专区IT爱车族旅游天下站务交流版主会议室博客SNS站务交流区CU活动专区& & & Power活动专区& & & 拍卖交流区频道交流区
空间积分0 信誉积分136 UID阅读权限90积分9636帖子精华可用积分9636 专家积分190 在线时间312 小时注册时间最后登录
腰缠万贯, 积分 9636, 距离下一级还需 364 积分
帖子主题精华可用积分9636 专家积分190 在线时间312 小时注册时间最后登录
论坛徽章:0
MPI(Message Passing Interface)是消息传递并行程序设计的标准之一,MPI的实现包括MPICH、LAM、IBM MPL等多个版本,最常用和稳定的是MPICH,曙光天潮系列的MPI以MPICH为基础进行了定制和优化。
  MPICH含三层结构,最上层是MPI的API,基本是点到点通信,和在点到点通信基础上构造的集群通信(Collective Communication);中间层是ADI层(Abstract Device Interface),其中device可以简单地理解为某一种底层通信库,ADI就是对各种不同的底层通信库的不同接口的统一标准;底层是具体的底层通信库,例如工作站机群上的p4通信库、曙光1000上的NX库、曙光3000上的BCL通信库等。
  MPICH的1.0.12版本以下都采用第一代ADI接口的实现方法,利用底层device提供的通信原语和有关服务函数实现所有的ADI接口,可以直接实现,也可以依靠一定的模板间接实现。自1.0.13版本开始,MPICH采用第二代ADI接口。
  我们将MPICH移植到曙光3000高效通信库BCL(Basic Communication Library)上(简称MPI_BCL)。MPI_BCL的接口标准与MPICH版本1.1完全一致,满足MPI1.1标准。同时,也支持ch_p4的通信库,即利用TCP/IP通信机制。从网络硬件角度说,MPI_BCL针对系统网络,MPI_ch_p4针对高速以太网。
1.MPI的程序设计
  MPI1.1标准基于静态加载,即所有进程在加载完以后就全部确定,直至整个程序结束才终止,在程序运行期间没有进程的创建和结束。一个MPI程序的所有进程形成一个缺省的组,这个组被MPI预先规定的Communicator MPI_COMM_WORLD所确定。
  MPI环境的初始化和结束流程如下:在调用MPI例程之前,各个进程都应该执行MPI_INIT,接着调用MPI_COMM_SIZE获取缺省组(group)的大小,调用MPI_COMM_RANK获取调用进程在缺省组中的逻辑编号(从0开始)。然后,进程可以根据需要,向其它节点发送消息或接收其它节点的消息,经常调用的函数是MPI_SEND和MPI_RECV。最后,当不需要调用任何MPI例程后,调用MPI_FINALIZE消除MPI环境,进程此时可以结束,也可以继续执行与MPI无关的语句。
  上面提到的六个函数:MPI_INIT,MPI_COMM_SIZE,MPI_COMM_RANK,MPI_SEND,MPI_RECV,MPI_FINALIZE 实际上构成了编写一个完整的MPI程序所需例程的最小集。
2.MPI的几个重要特征
  下面分别介绍MPI的几个重要特征:Communicator(通信空间)、Group(进程组)、Context_id(上下文标识)、Data Types(数据类型)。
MPI提供Communicator来指定通信操作的上下文,提供了通信操作的执行空间。在某个通信空间(或上下文)中发送的消息必须在相同的空间中接收,不同空间中的消息互不干扰。定义一个Communicator,也就指定了一组共享该空间的进程,这些进程组成了该Communicator的Group。
  Communicator通过其特征属性Context_id来区分,同一个进程不同的Communicator有不同的Context_id。因此Context_id是另一个区分消息的标志。
  MPI引入消息的Data Type属性的目的有两个:一是支持异构系统计算;二是允许消息来自不连续的或类型不一致的存储区,例如,可以传送数组的一列,或传送一个结构值,而该结构的每个元素的类型不同。Data Types定义了消息中不连续的数据项及其可能不同的数据类型。Data Type由应用程序在执行时通过基本的数据类型创建。
  一个消息相当于一封信,消息内容相当于信本身,消息的接收者相当于信封上的内容。因此通常将前者称为消息的buffer, 后者称为消息的envelop。
  buffer: message address, count,
  envelop: process id, message tag,communicator
  在MPI以前的大多数通信系统中,消息buffer通常仅由buffer的地址和长度决定(例如曙光1000上的NX通信系统),那么在MPI的消息格式中为什么要引入Data Type呢?这有两个主要原因:
  支持异构计算:不同系统有不同的数据表示。解决这一问题的方法是预先定义一些基本数据类型,MPI实现过程中对这些类型进行转换,例如转换为XDR格式,接收时进行反转。
  派生的数据类型(Derived Data Types):允许消息来自于不连续的和类型不一致的存储区域。
4.MPI应用程序的编译
Include文件
  C语言应用程序应有
    #include &mpi.h&
  若使用cc编译,命令行应有:
    -I/cluster/mpi/net/include (net版)
    -I/cluster/bcl/include -I/cluster/rms/include -I/cluster/sdr/include -I/cluster/mpi/mesh/include (mesh版)
  Fortran语言应用程序应有
   include 'mpif.h'
  若使用f77编译, 命令行应有:
    -I/cluster/mpi/net/include (net版)
    -I/cluster/bcl/include -I/cluster/rms/include -I/cluster/sdr/include -I/cluster/mpi/mesh/include (mesh版)
  C语言程序编译时需作下述链接:
    -L/cluster/mpi/net/lib -lmpi -lbsd (net版)
    -L/cluster/mpi/mesh/lib -L/cluster/bcl/lib -L/cluster/rms/lib -L/cluster/sdr/lib -lmpi -lbcl -lrms -lsdr (mesh版)
  数学函数库还应链接: -lm
Fortran语言
  Fortran编译时应作下述链接:
    -L/cluster/mpi/net/lib -lmpi -lbsd (net版)
    -L/cluster/mpi/mesh/lib -L/cluster/bcl/lib -L/cluster/rms/lib -L/cluster/sdr/lib -lmpi -lbcl -lrms -lsdr (mesh版)
mpif77和mpicc
  MPI提供了两个工具(mpif77和mpicc)来简化MPI应用程序的编译。用户可以直接地使用命令行方式mpicc或mpif77来编译C或Fortran程序,编译方式与cc和f77完全一致。如:
    mpif77 -c foo.f
    mpicc -c foo.c
    mpif77 -o foo foo.o
    mpicc -o foo foo.o
  有时链接时需一些特殊库, 应在链接时注明。使用mpicc和mpif77省略了有关MPI的路径设置。
5.MPI应用程序的运行
  应用程序编译好后,使用mpirun命令运行MPI应用程序。mpirun命令完整的格式如下:
    mpirun [-h|-?|-help] [-sz size|-sz hXw] [-np nprocs] [-pl poolname] &progname [argument]&
  各个选项的值由用户从命令行中显示地指定,选项的含义如下:
  -help:显示帮助信息。
  -sz &size| hXw&
  指定物理节点的数目。有两种指定形式,一是直接指定size值,另一种是指定物理节点的矩形域的长和宽。size值和h*w的值如果超过所在pool的节点数,sz项的值取pool的节点数,h*w值取整个pool。两者的缺省值分别为所在pool的节点数和整个pool。
  -np &nprocs&
  用户期望运行的进程数。进程数与实际申请的物理节点数没有任何联系,因为允许一个节点上运行同一个应用的多个进程。如果未指定,取实际sz项的值。
  -pl poolname
  应用程序执行的pool。应用程序的每次执行能且只能在一个pool中执行。缺省值为系统为用户设置的缺省的pool名(每个用户在创建时已自行指定或系统分配了一个缺省的pool)。
  在运行选项后,是用户的程序名。该可执行文件必须在所指定的或缺省的pool中的所有节点上能找到,并且与启动节点上的路径一致。用户程序名后的一切字符串都视为其参数(不包括被shell解释的重定向等,对shell解释的一些特殊字符,如需作为参数,应作相应的转换)。因此运行选项与用户程序名有先后的顺序,先运行选项,后用户程序名和参数。
环境变量的设置
  在曙光天潮 1000A并行系统中,MPICH 安装于 ‘/usr/local/mpich’, 因此应设置相应的环境变量。若使用csh ,则在 $HOME/.cshrc 文件中加入以下内容:
  set path=( $path /usr/local/mpich/bin )
  setenv MANPATH ${MANPATH}: /usr/ local/mpich/man
  类似地,若使用ksh 或 bsh,则应在 $HOME/.profile文件中加入相应内容。
[注]: 通常系统管理员已为你设置好环境。
Architecture和Device
  Architecture (简记为ARCH) 是指MPICH所用的机器类型;而device(简记为DEV) 是指MPICH采用何种方式实现处理机之间的通信。对应于每个ARCH/DEV对的MPI库和命令置于子目录 ‘/usr/local/mpich/lib/&ARCH&/&DEV&’中, 对于 1000A来说, 即是 ‘/usr/local/mpich/lib/rs6000/ch_p4,这一路径一般也应置于用户的 $HOME/.cshrc文件中, 否则有些命令将用全路径名称。
二.2000-I及3000
  在曙光3000系统中,MPI省缺地安装于&/cluster/mpi&下,因此应设置相应的环境变量。若使用csh,则在$HOME/.cshrc文件中加入相关内容;类似地,若使用ksh或bsh,则应在$HOME/.profile文件中加入相应内容。模板文件在&/cluster/userenv/CSHRC, PROFILE&。
[注]:往往系统管理员已为你设置好环境。若在系统设置为MESH版的同时,运行网络版MPI程序,只需按网络版要求设置环境变量MPI_ROOT即可。另外,还需系统管理员开放所需节点用户的rsh权限。
  为使用方便起见,我们建议用户作如下的设置:
(1)设置环境变量
  setenv MPI_INSTALL_DIR /cluster/mpi
  #according to the network setting to select MPI protocol
  if ( -f /cluster/config/sys.conf ) then
  @ net={ grep NET /cluster/config/sys.conf }
  if ($net) then
  setenv MPI_ROOT $MPI_INSTALL_DIR/net
  @ mesh={ grep MESH /cluster/config/sys.conf }
  if ($mesh) then
  setenv MPI_MODE 1
  setenv MPI_ROOT $MPI_INSTALL_DIR/mesh
  echo &/cluster/config/sys.conf is not found&
  MPI_INSTALL_DIR=/cluster/mpi
  export MPI_INSTALL_DIR
  #according to the network setting to select MPI protocal
  if [ -f /cluster/config/sys.conf ]
  if cat /cluster/config/sys.conf | grep NET
  export MPI_ROOT=$MPI_INSTALL_DIR/net
  if cat /cluster/config/sys.conf | grep MESH
  export MPI_MODE=1
  export MPI_ROOT=$MPI_INSTALL_DIR/mesh
  echo &/cluster/config/sys.conf is not found&
(2)增加路径
  MPI系统本身提供了一些命令,例如简化的编译命令mpicc和mpif77,命令行执行命令mpirun等。建议用户将以下路径加入自己的命令路径中。
  set path=( $path $MPI_ROOT/bin ) 或
  export PATH=$PATH:$MPI_ROOT/bin
  用户可以随时使用man命令获取MPI各函数的帮助信息,需加入如下的帮助信息路径。
  setenv MANPATH $MANPATH: $MPI_ROOT/man 或
  export MANPATH=$MANPATH:$MPI_ROOT/man
[注]上述路径和环境变量在用户模板启动文件CSHRC和PROFILE中均已设置,用户可以检查系统缺省配置的.cshrc或.profile文件。不要改动.rhosts和.login文件。
INCLUDE文件
C语言应用程序开头应有:
  #include “ mpi.h”
  若使用cc 编译,命令行应有: - I/usr/local/mpich/include
二.2000-I及3000
在C语言应用程序中添加:
  #include &mpi.h&
  编译的时候,建立头文件路径为:
  net版:-I/cluster/mpi/net/include
  mesh版:-I/cluster/bcl/include -I/cluster/rms/include -I/cluster/sdr/include -I/cluster/mpi/mesh/include
在Fortran语言应用程序添加:
  include 'mpif.h'
  编译的时候,建立头文件路径为:
  net版:-I/cluster/mpi/net/include
  mesh版:-I/cluster/bcl/include -I/cluster/rms/include -I/cluster/sdr/include -I/cluster/mpi/mesh/include
  使用C编译器时需作下述链接:
  -L/usr/local/mpich/lib/rs6000/ch_p4 -lmpi -lbsd
  数学函数库还应链接: -lm
Fortran语言:
  使用Fortran编译器时应作下述链接:
  - L/usr/local/mpich/lib/rs6000/ch_p4 -lmpi -lbsd
二.2000-I及3000
  使用C编译器时需作下述链接:
  -L/cluster/mpi/net/lib -lmpi -lbsd (net版)
  -L/cluster/mpi/mesh/lib -L/cluster/bcl/lib -L/cluster/rms/lib -L/cluster/sdr/lib -lmpi -lbcl -lrms -lsdr (mesh版)
  数学函数库还应链接:-lm
Fortran语言:
  使用Fortran编译器时应作下述链接:
  -L/cluster/mpi/net/lib -lmpi -lbsd (net版)
  -L/cluster/mpi/mesh/lib -L/cluster/bcl/lib -L/cluster/rms/lib -L/cluster/sdr/lib -lmpi -lbcl -lrms -lsdr (mesh版)
  MPI提供了两个工具(mpif77和mpicc)来简化MPI应用程序的编译,在曙光3000系统上, 若编译器仅安装在login节点上,编译过程应在login节点进行。
编译MPI程序
  MPICH提供了两个工具来简化MPI应用程序的编译, 在曙光1000A并行系统上,编译过程应在主控节点进行。
  MPICH应用程序常常需要链接特殊的库和编译选项, 这时用户就要使用Makefile。为方便用户, MPICH提供了一个 make 文件的模板 ,同时也提供了命令‘mpireconfig’,以按所用并行机特点将这一模板转换为用户可用的‘Makefile’。这一模板即为 ‘/usr/local/mpich/examples/Makefile.in’ 文件。
  用户将其转换为自己可用的‘Makefile’文件的过程如下:
  1.用户 login 入主控节点 (如carrot), 并转入适当子目录下, 如包括MPI应用程序test.f 的子目录下。
  2.将文件拷入子目录 % cp /usr/local/mpich/examples/Makefile.in 下。
  3. 由 ‘Makefile.in’ 产生 ‘Makefile’ 文件:% mpireconfig Makefile。
  4. 按需要修改Makefile。
  上述过程产生的 Makefile 中包含一个Fortram程序 (pi3.f) 和两个C语言程序 (cpi.c和cpilog.c) 的编译命令, 按需要加入或修改所需要的内容, 如按 pi3.f 的编译命令加入test.f 编译所需内容或将 pi3 改为 test, 以备编译 test.f 之需。xlc 与 xlf 的编译选项也应按需要修改。
  编译有关程序只需使用下述命令:
    % make
  则 ‘Makefile’ 中所有列入的程序均被编译, 若只编译 test.f, 则需键入命令:
    % make test
  这时只编译test.f并生成目标test。
mpif77和 mpicc
  MPICH提供了两个命令 (mpif77和mpicc) 来编译和链接Fortran或C语言程序, 用户可使用此二命令编译MPI应用程序, 特别是当程序只包含少量文件时。mpif77 (mpicc) 与一般Fortran (或C) 编译命令使用方式类似, 可加入同样的选项,如:
    mpif77 -c foo.f
    mpicc -c foo.c 与
    mpif77 -o foo foo.o
    mpicc -o foo foo.o
  有时链接时需一些特殊库,应在链接时注明。
二.2000-I及3000
  MPI应用程序常常需要链接特殊的库和编译选项, 这时用户就要使用&makefile&。按需要修改makefile,主要是编译器路径的设置。编译有关程序只需使用下述命令:
    % make
  则 'makefile' 中所有列入的程序均被编译,若只编译test.f,则需键入命令
    % make test
  这时只编译test.f并生成目标文件test。
  用户可以用以下的Makefile文件模板作C程序的编译:
  # Makefile for compiling MPI programs on Dawning-3000 system.
  # This makefile is used to compile and link with MPI programs for BCL-1e
  # communication library and RMS resource management system written in C.
  CC = /usr/bin/cc
  CLINKER = /usr/bin/cc
  OPTFLAGS =
  LIBS = -L$(MPI_ROOT)/lib -L/cluster/bcl/lib -L/cluster/rms/lib -L/cluster/sdr/lib -lmpi -lbcl -lrms -lsdr
  INCLUDES = -I/cluster/bcl/include -I/cluster/rms/inc -I$(MPI_ROOT)/include
  default: hello-world
  hello-world: hello-world.o
  $(CLINKER) $(OPTFLAGS) ${INCLUDES} -o hello-world hello-world.o ${LIBS}
  /bin/rm -f *.o *~
  clean:
  /bin/rm -f *.o *~ $(default)
  $(CC) $(CFLAGS) ${INCLUDES} -c $*.c
  Fortran程序的Makefile文件模板如下:
  # Makefile for compiling MPI programs on Dawning-3000 system.
  # This makefile is used to compile and link with MPI programs for BCL-1e
  # communication library and RMS resource management system written in Fortran.
  F77 = /usr/bin/f77
  CLINKER = /usr/bin/f77
  OPTFLAGS =
  LIBS = -L$(MPI_ROOT)/lib -L/cluster/bcl/lib -L/cluster/rms/lib -L/cluster/sdr/lib -lmpi -lbcl -lrms -lsdr
  INCLUDES = -I/cluster/bcl/include -I/cluster/rms/inc -I$(MPI_ROOT)/include
  default: hello-world
  hello-world: hello-world.o
  $(CLINKER) $(OPTFLAGS) ${INCLUDES} -o hello-world hello-world.o ${LIBS}
  /bin/rm -f *.o *~
  clean:
  /bin/rm -f *.o *~ $(default)
  $(F77) $(CFLAGS) ${INCLUDES} -c $*.f
mpif77和mpicc
  如果用户设置了正确的MPI系统命令的执行路径,就可以直接地使用命令行方式mpicc或mpif77来编译C或Fortran程序,编译方式与cc和f77完全一致。
  MPI提供了两个命令 (mpif77和mpicc) 来简化编译和链接MPI Fortran或C语言程序的过程,用户可使用此二命令编译MPI应用程序,特别是当程序只包含少量文件时。mpif77 (mpicc) 与一般Fortran (或C) 编译命令使用方式类似, 可加入同样的选项(详细选项可见有关编译器选项的说明),如:
    mpif77 -c foo.f
    mpicc -c foo.c
    mpif77 -o foo foo.o
    mpicc -o foo foo.o
  有时链接时需一些特殊库, 应在链接时注明。使用mpicc和mpif77省略了有关MPI的路径设置。
运行MPI程序
  在曙光天潮1000A系统上, 所有MPI应用程序均应在计算节点 (即node1 - node 8或hnode1 - hnode8) 运行, 因此在应用程序编译好后, 用户应登录到适当节点, 运行应用程序。
  MPICH提供了如下方式来运行MPI程序, 现分述如下.
1.mpirun 命令
  命令mpirun -help会给出全部可用的选项, 适当地使用这些选项能更好地运行应用程序, 并改善系统运行状况。
  mpirun的基本格式为:
    mpirun [mpirun-options…] &progname& [options…]
  其中 [mpirun-options…], 主要选项如下:
    -np &np&      要加载的进程个数。
    -p4pg &pgfile&  按照pgfile文件中的要求加载用户进程。pgfile文件描述用户在那些结点上加载什么样的用户进程。该文件的格式为:
  第一行:&结点名& &0& &用户要加载的进程--允许使用绝对路径&
  第二行:&结点名& &1& &用户要加载的进程--允许使用绝对路径&
              ......
  第n行:&结点名& &1& &用户要加载的进程--允许使用绝对路径&
  其中n为用户要加载进程的个数。结点名可以相同,也可以不同。且用户使用此选项后, -np选项无效。
  最简单的运行一个MPI应用程序的例子是:
    % mpirun -np 4 a.out,它将在并行机上加载4个用户执行程序 --a.out。
  一般情况下最好用-p4pg选项,pgfile文件包含有关进程在哪些节点上运行的信息。如你已登录到节点node1, 并用4个节点执行你的并行程序 a. out, 执行文件的全路径是:/public/user1/example/a.out, 则pgfile内容如下:
  node1 0 /public/user1/example/a.out
  node2 1 /public/user1/example/a.out
  node3 1 /public/user1/example/a.out
  node4 1 /public/user1/example/a.out
  这时的执行命令为:
    % mpirun -p4pg pgfile a.out
  你也可以在一个节点(如node1)上模拟多进程并行程序的执行, 这时pgfile的一个例子是:
  node1 0 /public/user1/example/a.out
  node1 1 /public/user1/example/a.out
  node1 1 /public/user1/example/a.out
  node1 1 /public/user1/example/a.out
2.程序的直接执行
  用户也可以不用mpirun, 而直接运行目标程序(a.out),但此时需用pgfile,其命令格式如下:
    % a.out -p4pg pgfile
3.使用计算网
  使用计算网的优点是通信速度快, 程序运行性能得到改善。建议用户使用计算网来运行MPI应用程序,这时只需将pgfile中第一列的nodei (其中1≤i≤8) 改为hnodei。则pgfile内容将改为:
  hnode1 0 /public/user1/example/a.out
  hnode2 1 /public/user1/example/a.out
  hnode3 1 /public/user1/example/a.out
  hnode4 1 /public/user1/example/a.out
  则,用户进程a.out的加载命令为:
    %mpirun -p4pg pgfile a.out
  或者,
    %a.out -p4pg pgfile
二.2000-I及3000
  在曙光3000系统上,所有MPI应用程序均应在计算节点运行,因此在应用程序编译好后,使用mpirun命令运行MPI应用程序。mpirun命令完整的格式如下:
  mpirun [-h|-?|-help] [-sz size|-sz hXw] [-np nprocs] [-pl poolname] &progname [argument]&
  各个选项的值由用户从命令行中显示地指定,选项的含义如下:
  -help:显示帮助信息。
  -sz &size| hXw&
  指定物理节点的数目有两种指定形式。一是直接指定size值,另一种是指定物理节点的矩形域的长和宽。size值和h*w的值如果超过所在pool的节点数,sz项的值取pool的节点数,h*w值取整个pool。两者的缺省值分别为所在pool的节点数和整个pool。
  -np &nprocs&
  用户期望运行的进程数。进程数与实际申请的物理节点数没有任何联系,因为允许一个节点上运行同一个应用的多个进程。如果未指定,取实际sz项的值。
  -pl &poolname&
  应用程序执行的pool。应用程序的每次执行能且只能在一个pool中执行。缺省值为系统为用户设置的缺省的pool名(每个用户在创建时已自行指定或系统分配了一个缺省的pool)。
  在运行选项后,是用户的程序名。该可执行文件必须在所指定的或缺省的pool中的所有节点上能找到,并且与启动节点上的路径一致。用户程序名后的一切字符串都视为其参数(不包括被shell解释的重定向等,对shell解释的一些特殊字符,如需作为参数,应作相应的转换)。因此运行选项与用户程序名有先后的顺序,先运行选项,后用户程序名和参数。
  执行mpirun命令的一些简洁方式举例如下:
    mpirun [-np nprocs][-pl poolname] &progname [argument]&
  未显示指出物理节点数,缺省值是整个pool的节点数。表明该应用程序在整个pool的所有节点上运行。如果nprocs & pool的节点总数,每个节点上至少有一个进程;否则仅在该pool中nprocs个节点上执行,每个节点上运行一个进程。
    mpirun [-pl poolname] &progname [argument]&
  未显示指出物理节点数和进程数,两者的缺省值是pool的节点总数。
    mpirun [-np nprocs] &progname [argument]&
  未显示指出物理节点数和pool名,该程序在缺省的pool的所有节点上运行。
    mpirun [-pl poolname] &progname [argument]&
  未显示指出物理节点数和进程数,该程序在pool内所有节点上运行,每个节点上一个进程。
    mpirun &progname [argument]&
  在缺省的pool内的所有节点上运行该程序,每个节点上一个进程。
  用户调式MPI程序时,可以启动DCDB(Dawning Cluster DeBugger),在该环境下进行程序的调试。曙光3000安装有MPI版1.1版本(MPI_ch_p4),使用方法与曙光1000A上或任何网络环境上MPI的使用方法相同。MPI_ch_p4(MPI网络版)的系统路径在/cluster/mpi/net,在设置环境变量时要注意,具体运行方法参见曙光1000A。
[[i] 本帖最后由 system888net 于
16:40 编辑 [/i]]
&&nbsp|&&nbsp&&nbsp|&&nbsp&&nbsp|&&nbsp&&nbsp|&&nbsp
空间积分0 信誉积分136 UID阅读权限90积分9636帖子精华可用积分9636 专家积分190 在线时间312 小时注册时间最后登录
腰缠万贯, 积分 9636, 距离下一级还需 364 积分
帖子主题精华可用积分9636 专家积分190 在线时间312 小时注册时间最后登录
论坛徽章:0
回复 #1 system888net 的帖子
如果对于SSMP(共享存储多处理器)的系统上,如过从编程的难易程度来说,还是用openMP更加容易一些.&&当然两者都在发展,不排除互相的借鉴.
默默杀五毛
空间积分0 信誉积分604 UID阅读权限100积分1000帖子精华可用积分1000 专家积分1416 在线时间3388 小时注册时间最后登录
帖子主题精华可用积分1000 专家积分1416 在线时间3388 小时注册时间最后登录
论坛徽章:0
MPI_Init(… );
MPI_Finalize();
MPI_Comm_size(… );
MPI_Comm_rank(… );
MPI_Send(… );
MPI_Recv(… )复制代码#include &mpi.h&
#include &cstdio&
int main(int argc, char* argv[])
{
int npes,
MPI_Init(&argc, &argv);
MPI_Comm_size(MPI_COMM_WORLD,&npes);
MPI_Comm_rank(MPI_COMM_WORLD,&myrank);
printf(&Hello World! from process %d out of %d\n&,myrank,npes);
MPI_Finalize();
return 0;
}复制代码
我没有曙光超级计算机,不能实验,只能 YY 一下。
没觉得有什么障碍,传说中那种神秘一点都没有,和网络编程的区别不大,我觉得(因为我不懂网络编程,所以看见 send recv 就觉得差不多)
空间积分0 信誉积分136 UID阅读权限90积分9636帖子精华可用积分9636 专家积分190 在线时间312 小时注册时间最后登录
腰缠万贯, 积分 9636, 距离下一级还需 364 积分
帖子主题精华可用积分9636 专家积分190 在线时间312 小时注册时间最后登录
论坛徽章:0
回复 #3 prolj 的帖子
当联系实际后就会复杂起来了!
默默杀五毛
空间积分0 信誉积分604 UID阅读权限100积分1000帖子精华可用积分1000 专家积分1416 在线时间3388 小时注册时间最后登录
帖子主题精华可用积分1000 专家积分1416 在线时间3388 小时注册时间最后登录
论坛徽章:0
原帖由 system888net 于
23:53 发表
当联系实际后就会复杂起来了!
人工进行数据依赖分析,确定并行粒度,程序的通用性... 不过 MPI 这种需要 Gird 的一般人没有环境,也就体会不到了。
空间积分0 信誉积分-3 UID9041057阅读权限30积分1516帖子精华可用积分1516 专家积分0 在线时间18 小时注册时间最后登录
家境小康, 积分 1516, 距离下一级还需 484 积分
帖子主题精华可用积分1516 专家积分0 在线时间18 小时注册时间最后登录
论坛徽章:0
空间积分0 信誉积分136 UID阅读权限90积分9636帖子精华可用积分9636 专家积分190 在线时间312 小时注册时间最后登录
腰缠万贯, 积分 9636, 距离下一级还需 364 积分
帖子主题精华可用积分9636 专家积分190 在线时间312 小时注册时间最后登录
论坛徽章:0
原帖由 prolj 于
03:51 发表
人工进行数据依赖分析,确定并行粒度,程序的通用性... 不过 MPI 这种需要 Gird 的一般人没有环境,也就体会不到了。
说的对,原理性的东西也谈不上多难,而是要解决实际问题的时候考虑的就会多很多(这取决于实际情况).
默默杀五毛
空间积分0 信誉积分604 UID阅读权限100积分1000帖子精华可用积分1000 专家积分1416 在线时间3388 小时注册时间最后登录
帖子主题精华可用积分1000 专家积分1416 在线时间3388 小时注册时间最后登录
论坛徽章:0
原帖由 system888net 于
12:41 发表
说的对,原理性的东西也谈不上多难,而是要解决实际问题的时候考虑的就会多很多(这取决于实际情况).
也就是因此,现在做理论的人也要把理论模型做出来 demo 才可以被认可。现实和理想,从不一样。理论和工业应用,还是有差距的。
MPI 好?不好?总是一种现实的模型,不过这个门槛比较高,不是技术门槛,是¥的门槛,不是做 Gird 的谁没事在一个 PC 上写 MPI 啊,没有需求无法激起思路不说,明明是 Gird 环境下的东西,你在一个 PC 上能怎么样啊?
顺便再水一下,有一小部分“学者”的成就,就是本着自己有国家的东西可以用,别人跨不了这个门槛没法去做。其实换个人,只要不是很傻,也可以做到。
北京皓辰网域网络信息技术有限公司. 版权所有 京ICP证:060528号 北京市公安局海淀分局网监中心备案编号:
广播电视节目制作经营许可证(京) 字第1234号
中国互联网协会会员&&联系我们:
感谢所有关心和支持过ChinaUnix的朋友们
转载本站内容请注明原作者名及出处

我要回帖

更多关于 ios用什么语言开发 的文章

 

随机推荐