并行算法讲义 联系客服

发布时间 : 星期日 文章并行算法讲义更新完毕开始阅读d6ac36768e9951e79b8927da

· 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 一些名词与概念

程序与代码: 我们这里说的程序不是指以文件形式存在的源代码、 可执行代码等,而是指为了完成一个计算任务而进行的一次运行过程;