当前位置:首页 > 并行算法讲义
· C 编译器 cc,gcc(GNU C) 等 · Fortran 编译器 f77,fc,g77(GNU Fortran),f90(Fortran 90)等 · 可用 man查看使用手册,如man cc,man f77等等 · 命令行形式:
% cc [options] files [options] % f77 [options] files [options] · 文件的类型由文件的扩展名决定 。C 源代码:C;
。Fortran 77 源代码: .f;
。带预处理的 Fortran 源代码: .F; 。Fortran 90 源代码: .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 · 例如:
o f77 -O2 -o prog file1.f file2.c file2.o file4.a o f77 -c file.f f77 -o out file.o
o f77 -c prog -I/usr/local/mpi/include file.f
f77 -o prog -L/usr/local/mpi/lib file.o -lmpi (等价于f77 -o prog file.o /usr/local/mpi/lib/libmpi.a) §1.3.2 实用1.4.具 make · 命今形式
make [_f Makefile] [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.f file2.f fil3.c file4.CC
f77 -O2 -o prog file1.f file2.f fil3.c file4.CC
其含义为: 如果目标 (prog) 不存在,或者任何一个依赖对象 (file1.f file2.f fil3.c file4.CC) 比目
标新,则执行指定的命令 · 宏定义
SRC=file1.f file2.f fil3.c prog: $(SRC)
f77 -O2 -o prog $(SRC)
环境变量可以在 Makefile 中作为宏使用,如 $(HOME) · 常用预定义的宏
。$@: 代表 标名 (上例中为 prog)
。$<: 笫一个依赖对象名 (上例中为 file1.f)
。$^: 全部依赖对象名(上例中为file1.f file2.f fil3.c) 。$?: 全部比 标新的依赖对象名
。$*: 用在隐式规则中,代表不含扩展名的依赖对象 · 隐式规:
prog: file1.o file2.o fil3.o f77 -O2 -o prog $? .c.o:
cc -O2 -c $*.c .f.o
f77 -O2 -c $*.f Makefile 实例 [Makefile.dummy] §1.4 消息传递编程平台 MPI · 由全世界1.4.业、 科研和政府部门联合建立的一个消息传递编程标准,以便为并行应用程序的设计
8
提供一个高效、 统一的编程环境 它是目前最为通用的并行编程方式,也是分布式并行系统的主
要编程环境。 · MPI 标准中定义了一组函数接口用于进程间的消息传递 这些函数的具体实现由各计算机厂商
或科研部门来完成。 · 除各厂商提供的 MPI 系统外,一些高校、 科研部门也在开发免费的通用 MPI 系统,其中最著名 的有
o MPICH (http://www.mcs.anl.gov/mpi/mpich) o LAM MPI (http://www.mpi.nd.edu/lam) 它们均提供源代码,并支持目前绝大部分的并行计算系统 (包括微机和1.4.作站机群) 实际上许多
厂商提供的 MPI 系统是在 MPICH 的基础亠优化产生的 · MPI 的笫一个标准 MPIl.0 于1994 年推出目最新的标准为2.2.5 版,于 2003 年推出 大部分 MPI
系统 前只实现了MPI spercification 1.1版中规定的内容 §1.4.1 MPI 程序的编译与运行 · MPI 程序的编译
%mpicc -O2 -o mpiprog mpisrc.c
%mpif77 -O2 -o mpiprog mpisrc1.f mpisrc2.o · MPI 程序的运行
% mpirun -np 4 mpiprog
如果要指定并行程序所运行的并行节点,则: % mpirun -np 4 -machinefile hosts mpiprog
MPI 程序实例 [/usr/local/lib/mpiintel/examples/pi3.f] §1.4.2 利用 MPICH 建立 MPI 程序开发与调试环境
MPICH 是目前最为流行的免费 MPI系统,它支持几乎所有的 Unix 及Windows 9x/NT/xp 环境,很
适合于用来建立自己的 MPI 程序调试环境 建议在 Linux 环境下安装 MPICH 从而形成一个 MPI
程序的开发调试环境 · mpich.tar.gz 的下载 http://www.mcs.anl.gov/mpi/mpich · 解开 MPICH 源代码
% tar xzpvf mpich.tar.gz 或
% gzip -dc mpich.tar.gz | tar xpvf - 或
% gzip -d mpich.tar.gz % tar xpvf mpich.tar
展开后的源代码位于目录mpich或 mpich.1.2.5中,其中的doc子 录含有 MPICH 的安装说
明及使用说明
· 配置 、 编译 MPICH
% cd mpich(或 mpich.1.2.5)
% ./configure -prefix=/usr/local/lib/mpich % make
9
如果使用的是 RedHat7.0 中发布的 gcc 2.96,在编译时会出错 建议安装kgcc 包,并在 configure 命令中加入选项 -cc=kgcc 来选择用 kgcc 编译 MPICH · 在单机上编译运行简单测试程序 % cd examples/basic
% ../../bin/mpicc -o cpi cpi.c (or make cpi) % ../../bin/mpirun -np 1 cpi % ../../bin/mpirun -np 4 cpi
检查文件 ~/.rhosts 或 /etc/hosts.equiv 是否存在并且其中包含本机的主机名,当文件不存在
或没有包含本机主机名的话需要创建一个文件并且 (或) 在其中加入本机主机名 否则上述最后
一条命令将产生 permission denied错误。 · 如果拥有超级用户权限,则可以以超级用户身份在目录mpich下运行 # make install
来将 MPICH 安装到 录 /usr/local/lib/mpich 下,以便其它用户也能使用 然后可以删除 mpich 目录。 · 使用 C shell 的用户应该在文件 ~/.cshrc.login中加入 setenv PATH ${PATH}:/usr/local/lib/mpich/bin
setenv MANPATH ${MANPATH}:/usr/local/lib/mpich/man 使用 Bourne shell 的用户应该在文件 ~/.bashrc 中加入 PATH=${PATH}:/usr/local/lib/mpich/bin export PATH
MANPATH=${MANPATH}:/usr/local/lib/mpich/man export MANPATH
以便可以直接使用/usr/local/lib/mpich/bin中的命令 (mpif77, mpicc, mpirun 等等),以及用 man 命
令来得到 MPI 函数的使用手册。 10
第二章 MPI基础知识 §2.1 下载 MPI标准的ps文档
MPI1.0、MPI1.1、MPI2.0 文档的下载:在网站http://www.mpi-forum.org上有关于MPI标准的所有文档。可以随时下载。注意其中的勘误文档的下载。
MPI2.0 的 postscrip 文档中只有 MPI1.2/2.0版新增加的内容,应该结合 MPI1.1的文档阅读。 §2.2 一些名词与概念
程序与代码: 我们这里说的程序不是指以文件形式存在的源代码、 可执行代码等,而是指为了完成一个计算任务而进行的一次运行过程;
共分享92篇相关文档