Open MPI 能成功编译,不代表远程节点已经能启动进程;能够启动进程,也不代表 MPI 的初始化和通信都正常。官方的安装验收方法是逐层增加条件:先启动普通程序,再运行不进行消息通信的 MPI 程序,最后运行真正收发消息的程序。这样每一步失败时,都能缩小需要检查的范围。
本文完整译写 Open MPI 5.0.4 的安装验收文档,并合并同版安装、编译、启动与 Slurm 快速入门,核对官方发行清单及 v5.0.4 示例源码。原页由 Open MPI Community 维护,没有个人作者署名。本次核对日期为 2026 年 10 月 5 日;5.0.4 是本文锁定的复现版本,不是当前最新版本。所有命令仅作说明,本次未安装、编译或启动任何 MPI 作业。

先确认正在验收哪一套安装
安装目录中的 $prefix/bin/ompi_info 可以查看 Open MPI 的配置。不给参数时,它输出安装信息摘要。它还特别适合确认已安装的组件、组件可用的运行时参数及其默认值。
ompi_info
ompi_info --all
ompi_info --parsable
ompi_info --param all all --level 9
--all 展示大量安装信息;--parsable 采用便于程序解析的格式。--param FRAMEWORK COMPONENT 用于限定框架和组件:两个位置都写 all 时显示全部组件的参数,也可以写具体框架或具体组件名称。
默认情况下,ompi_info 只显示级别 1 的 MCA 参数。这些参数会影响 MPI 进程能否正常运行,例如网络接口选择。--level LEVEL 会显示从级别 1 到指定级别的参数,最高级别为 9。因此,要查看某个组件全部可调参数,可以使用 ompi_info --param FRAMEWORK COMPONENT --level 9,把框架和组件名换成当前安装实际提供的名称。MCA 的完整原理与调参方式应参阅同版的 MCA 和运行时调优章节,而不是凭参数名称批量修改。
如果机器上安装过多套 MPI,应先核对 mpirun、mpicc 与 ompi_info 是否来自同一个前缀,以及远程节点加载的库是否对应同一套环境。下面的只读命令是为验收增加的编辑建议:
command -v mpirun
command -v mpicc
command -v ompi_info
mpirun --version
补齐安装来源与构建记录
二进制包可以用,但需要核对功能与版本
Open MPI 社区本身不发布二进制安装包,许多 Linux 发行版与其他下游维护者会提供。可以先查看当前系统的软件包列表与文档。原文也给出 macOS 的两个入口:
# Homebrew
brew install openmpi
# MacPorts
port install openmpi
这两个命令表示相应包管理器的安装方式,不保证今天安装到的恰好是 5.0.4。下游包也可能缺少目标网络互连等特定功能,或者版本较旧。如果验收要求固定版本与构建选项,宜记录包版本、构建来源,必要时改用官方源代码发行包。
源代码包必须来自正式发行渠道
官方安装文档明确提醒:不要把 GitHub 自动生成的源码压缩包当作 Open MPI 正式发行包。那些自动归档不完整,不能按普通发行包的流程正常构建。克隆 Git 得到的是开发者副本,还需要按照开发者指南准备,不能直接套用以下快速入门。
官方 5.0 系列下载页列出的 5.0.4 发布日期为 2024 年 7 月 18 日。可以选择 openmpi-5.0.4.tar.bz2。该包在发行页列出的 SHA-256 是:
64526852cdd88b2d30e022087c16ab3e03806c451b10cd691d5c1ac887d8ef9d
下载后应在自己的环境中对照发行页校验。本次只核对了发行清单,没有下载该安装包或计算其本地哈希,不能把上面的发布值当成本次文件检验结果。
Open MPI 使用传统的 configure 加 make 流程。下面把原文的通用占位符替换为一个位于用户目录的独立安装前缀,便于理解;并行度 4 只是示例,应按可用资源调整:
# 以下按 Bash 编写;pipefail 防止 tee 掩盖前一条命令的失败
set -o pipefail
tar xf openmpi-5.0.4.tar.bz2
cd openmpi-5.0.4
./configure --prefix="$HOME/opt/openmpi-5.0.4" 2>&1 | tee config.out
make -j 4 all 2>&1 | tee make.out
make install 2>&1 | tee install.out
原文使用 2>&1 | tee 保留配置、构建和安装日志。这里增加 Bash 的 pipefail,因为默认管道状态可能只反映 tee 是否成功,而掩盖前面构建命令的失败。需要检查各阶段退出状态与日志,再继续下一步。安装到系统目录可能需要管理员权限;本文示例选择独立用户前缀,不要求用 root 启动 MPI。
官方也完整支持 VPATH 构建,即把构建产物放在单独目录。另一种目录布局是:
tar xf openmpi-5.0.4.tar.bz2
cd openmpi-5.0.4
mkdir build
cd build
../configure --prefix="$HOME/opt/openmpi-5.0.4" 2>&1 | tee config.out
make -j 4 all 2>&1 | tee make.out
make install 2>&1 | tee install.out
该段沿用上一段 Bash 的管道设置,作为替代布局使用,不要在已经存在同名构建目录时机械重复。快速入门不能涵盖所有平台;特定 HPC 网络互连、工具链与计算环境可能需要额外配置选项,必须以对应安装章节为准。
使用包装编译器构建示例
Open MPI 提供的包装编译器负责添加正确的头文件、编译和链接参数,再调用真正的后端编译器。它们本身不解析源代码,也不代替编译器执行语言编译。仅在链接命令末尾补一个 -lmpi 并不足以保证获得正确的 Open MPI 可执行程序。
| 语言 | MPI | OpenSHMEM |
|---|---|---|
| C | mpicc | oshcc |
| C++ | mpic++ | oshc++ |
| Fortran | mpifort | oshfort |
在区分大小写的文件系统上还提供 mpiCC 和 oshCC 名称。旧的 mpif77、mpif90 仍以指向 mpifort 的符号链接存在,但官方建议更新构建脚本,统一使用 mpifort。
mpicc hello_world_mpi.c -o hello_world_mpi -g
oshcc hello_shmem.c -o hello_shmem -g
这两行是编译快速入门的通用示例,源文件必须真实存在。对于正式包里的现成验收程序,在 examples/ 目录构建明确的目标即可:
make hello_c ring_c
v5.0.4 的 examples/Makefile 用 MPICC = mpicc 编译这两个 C 程序。默认的 all 还会构建其他 C 示例,并根据安装的语言绑定继续构建 Fortran、Java 或 OpenSHMEM 示例;只验收 C MPI 时,明确给出上面两个目标能减少无关条件。
启动前,把单机、多机和调度环境分清楚
mpirun 与 mpiexec 在 Open MPI 中等价。以下三个命令都启动同一程序的两个进程:
mpirun -n 2 mpi-hello-world
mpiexec -n 2 mpi-hello-world
mpiexec -n 1 mpi-hello-world : -n 1 mpi-hello-world
常用选项包括:--hostfile 指定主机文件,兼容名称为 --machinefile;--host 指定主机或主机列表;-n 指定进程数;--mca 设置 MCA 参数;--wdir DIRECTORY 设置被启动程序的工作目录;-x ENV_VARIABLE_NAME 导出一个环境变量,多次使用可以导出多个变量。若不指定工作目录,通常沿用当前目录;某节点上没有该目录时会退回家目录。完整可用选项以该安装的 mpirun --help 和手册为准。
在单机开发时,mpirun -n 6 mpi-hello-world 会启动 6 份可执行程序。未指定 -n 时,简单的本机环境默认按处理器核心数而非超线程数启动。单机成功只能说明单机条件,不能代替跨节点验收。
无调度器的多机环境
官方列出三个基本条件:能够无交互登录远程节点;远程节点能够找到 Open MPI 可执行文件,例如通过 PATH;能够找到 Open MPI 动态库,例如通过合适的库搜索路径。无交互登录不意味着关闭 SSH 主机身份验证,应该使用已有授权和正确验证的 SSH 配置。
主机文件每行写一个主机名,还可以附上 slots。原文示例为:
node1.example.com
node2.example.com
node3.example.com slots=2
node4.example.com slots=10
如果这四个节点各有 16 个物理核心,且不另设进程数,则前两台各使用 16 个 slot,第三台 2 个,第四台 10 个,总共 44 个进程。原启动快速入门的说明列表最后一项误写成 node2;根据主机文件,该项应为 node4,本文已修正。slots 表示可分配的进程容量,不是服务器硬件探测值。
下面的验收示例改用更小的两节点文件 hosts.txt,每台一个 slot,主机名应替换为有权使用的真实节点:
node1.example.com slots=1
node2.example.com slots=1
需要主机文件的启动方式,如果没有指定主机文件,会在本机启动全部进程。调度环境则通常不需要手写主机文件,Open MPI 会接收调度器分配的节点与数量。示例程序和其依赖必须在远程节点可访问;仅本机目录中存在一个二进制文件,并不能让另一台机器自动得到它。
原文补充:Open MPI 的 mpirun 是 PRRTE prun 的薄封装;启动快速入门为简洁起见统一使用 mpirun 名称描述。
第一层:启动普通进程
先让 mpirun 启动与 MPI 无关的程序,例如 hostname 或 uptime,并确认输出来自多个目标节点:
mpirun --hostfile hosts.txt -n 2 hostname
mpirun --hostfile hosts.txt -n 2 uptime
这一层关注启动器、远程登录、可执行路径和节点分配。如果连普通进程都无法启动,继续修改 MPI 消息代码通常不是有效的排查方向。还要核对输出是否真的覆盖两个节点;两行输出本身不能证明多机启动成功。
第二层:初始化 MPI,但不发送应用消息
使用正式发行包里的 hello_c:
mpirun --hostfile hosts.txt -n 2 ./hello_c
v5.0.4 的 hello_c.c 依次执行 MPI_Init、取得 rank 和总进程数、读取库版本、打印信息,最后 MPI_Finalize。它没有应用层的 MPI_Send 或 MPI_Recv。下面保留该示例的完整程序:
/*
* Copyright (c) 2004-2006 The Trustees of Indiana University and Indiana
* University Research and Technology
* Corporation. All rights reserved.
* Copyright (c) 2006 Cisco Systems, Inc. All rights reserved.
* Sample MPI "hello world" application in C
*/
#include <stdio.h>
#include "mpi.h"
int main(int argc, char* argv[])
{
int rank, size, len;
char version[MPI_MAX_LIBRARY_VERSION_STRING];
MPI_Init(&argc, &argv);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
MPI_Comm_size(MPI_COMM_WORLD, &size);
MPI_Get_library_version(version, &len);
printf("Hello, world, I am %d of %d, (%s, %d)\n",
rank, size, version, len);
MPI_Finalize();
return 0;
}
各进程应能完成初始化并退出,输出中的总进程数应与启动配置一致,库版本也应符合正在验收的安装。并行标准输出的先后顺序不能当作 rank 的运行顺序保证。这个程序帮助区分“远程进程可启动”和“MPI 运行时可以初始化”,仍未验证应用消息通道。
第三层:运行真正收发消息的环形程序
随后运行 ring_c,仍保持多节点配置:
mpirun --hostfile hosts.txt -n 2 ./ring_c
它让整数消息沿 rank 构成的环传递。每个进程的下一站是 (rank + 1) % size,上一站是 (rank + size - 1) % size。rank 0 先发出数值 10;消息每绕回 rank 0 一次就递减。各进程收到 0 后仍先把 0 传给下一站,再退出,确保其他进程也能收到退出信号。最后 rank 0 还要接收末进程传回来的那次 0 消息。
以下完整保留核心程序逻辑,并把原来的英文说明注释整理为中文:
/*
* Copyright (c) 2004-2006 The Trustees of Indiana University and Indiana
* University Research and Technology
* Corporation. All rights reserved.
* Copyright (c) 2006 Cisco Systems, Inc. All rights reserved.
* Simple ring test program in C.
* 中文说明整理;通信逻辑保持 v5.0.4 示例。
*/
#include <stdio.h>
#include "mpi.h"
int main(int argc, char *argv[])
{
int rank, size, next, prev, message, tag = 201;
MPI_Init(&argc, &argv);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
MPI_Comm_size(MPI_COMM_WORLD, &size);
next = (rank + 1) % size;
prev = (rank + size - 1) % size;
if (0 == rank) {
message = 10;
printf("Process 0 sending %d to %d, tag %d (%d processes in ring)\n",
message, next, tag, size);
MPI_Send(&message, 1, MPI_INT, next, tag, MPI_COMM_WORLD);
printf("Process 0 sent to %d\n", next);
}
/* 每次经过 rank 0 递减;先传递 0,再退出。 */
while (1) {
MPI_Recv(&message, 1, MPI_INT, prev, tag, MPI_COMM_WORLD,
MPI_STATUS_IGNORE);
if (0 == rank) {
--message;
printf("Process 0 decremented value: %d\n", message);
}
MPI_Send(&message, 1, MPI_INT, next, tag, MPI_COMM_WORLD);
if (0 == message) {
printf("Process %d exiting\n", rank);
break;
}
}
/* 收下最后一个进程额外发回的退出消息。 */
if (0 == rank) {
MPI_Recv(&message, 1, MPI_INT, prev, tag, MPI_COMM_WORLD,
MPI_STATUS_IGNORE);
}
MPI_Finalize();
return 0;
}
该示例应使用至少两个进程进行这里的多节点验收。不要用“单进程对自身发送也许能靠缓冲完成”代替通信正确性的依据。本文没有修改示例的错误处理或超时机制;如果节点、通信路径或运行环境出问题,它可能等待不返回。所有进程正常结束且消息递减完成,是这一层的预期观察项,不是本次已经取得的结果。
安装了 OpenSHMEM 时,继续完成另外三层
原验收文档还列出三项 OpenSHMEM 检查:用 oshrun 启动普通程序;运行只初始化、不做 OpenSHMEM 通信的简单程序;运行进行少量远程数据操作的程序。这三项不能在全文整理时省略。
需要指出原文命名与同版本源码的差异:验收页写的是 hello_shmem.c 与 ring_shmem.c,其中第二个 SHMEM 步骤还写成了“trivial MPI program”。v5.0.4 实际示例文件为 hello_oshmem_c.c 与 ring_oshmem_c.c,对应 Makefile 目标是 hello_oshmem 和 ring_oshmem;它们是 OpenSHMEM 程序。应按发行包里的真实文件与目标操作:
make hello_oshmem ring_oshmem
oshrun --hostfile hosts.txt -n 2 hostname
oshrun --hostfile hosts.txt -n 2 ./hello_oshmem
oshrun --hostfile hosts.txt -n 2 ./ring_oshmem
Makefile 在这一部分使用 shmemcc 包装器。hello 示例调用 shmem_init,读取处理元素数量、当前 PE 编号、实现名称与版本,然后 shmem_finalize。ring 示例以静态对称变量 rbuf 接收数据,通过 shmem_int_put 传递消息,并用 shmem_int_wait_until 等待指定值。原页以 put/get 概括通信检查,但实际这份 ring 示例使用 put 与等待,没有调用 get。
如果安装时没有构建 OpenSHMEM,不能把“相关命令不存在”说成上述 MPI 三项均失败;应在验收记录中说明没有包含这一功能,也不能声称完成了原文的全部六项检查。所有适用测试成功,是构建和安装正确的良好迹象,而不是覆盖全部硬件路径、错误场景和性能指标的完整认证。
在 Slurm 分配内完成同样的验收
Open MPI 5.0.4 支持使用功能较完整的 mpirun,也支持 Slurm 的直接启动。官方建议,除非有充分理由使用 srun,否则在 Slurm 作业内优先用 mpirun。旧版中直接启动可能更快的比较,不能原样推广到 5.0.x。
mpirun 会从 Slurm 获得节点、slot 和进程分配信息,不必再次指定 --hostfile、--host 或 -n。原文的交互示例是:
salloc -n 4
mpirun mpi-hello-world
4 个 slot 可以位于一个或多个节点上,所以验收跨节点通信时,还应按集群规则申请至少两个节点。例如下面把分配要求写成两个节点、四个任务,取得分配后再逐层执行:
salloc -N 2 -n 4
mpirun hostname
mpirun ./hello_c
mpirun ./ring_c
不要在没有取得分配时把计算负载直接放到登录节点。批处理同样可以把 mpirun ./hello_c 放进 #!/bin/sh 脚本,再用 sbatch -n 4 my_script.sh 提交;MPI 启动器会使用调度器提供的信息。通用启动快速入门还展示了 sbatch -n 40 的例子,原理相同;节点由调度器选定。需要只使用分配的一部分资源时,可再按启动手册调整参数。
直接用 srun 则要求 Slurm 已构建并安装 PMIx 插件。先检查:
srun --mpi=list
输出应包含可用的 pmix 类型,可能还列出 pmix_v4 等具体版本。仅有 pmi2 并不够:Open MPI 5.0.0 及以后不支持 PMI-2。确认 PMIx 条件后,原文的直接启动形式为:
srun -N 4 --mpi=pmix mpi-hello-world
也可以在批处理脚本内使用 srun --mpi=pmix mpi-hello-world,让 sbatch 设置节点、进程数、分区等 Slurm 参数。这里的 -N 4 是节点数,不是总进程数,不能与 -n 4 混用含义。
同版 Slurm 章节另有一项历史兼容性提醒:Slurm 20.11.0 至 20.11.2 曾引入随后在 20.11.3 撤回的行为变化,SchedMD 建议 Open MPI 用户避开这三个版本。这里保留其适用范围,不把它扩写成对所有 Slurm 20.11 版本的判断。
把结果记到正确层级
| 检查 | 主要观察 | 不能据此推出 |
|---|---|---|
| ompi_info | 版本、前缀、组件、参数 | 远程节点已经可用 |
| hostname / uptime | 目标节点真正启动普通进程 | MPI 初始化或消息收发正常 |
| hello_c | 初始化、rank、进程数、库版本、正常退出 | 应用消息通道已验证 |
| ring_c | 消息绕环、递减、所有进程退出 | 所有网络传输、规模与性能均通过 |
| OpenSHMEM 三项 | 相应运行时和远程数据操作 | 未安装的功能也已经验收 |
静态审核发现并修正了构建管道退出状态、文档旧文件名和节点列表笔误;保留了所有实质检查层级。示例源码使用固定格式字符串和固定消息缓冲,没有发现此范围内的命令注入或明文密钥,但未逐条处理 MPI 错误返回,也不提供超时与生产故障恢复。检查结果不等于“无漏洞”。
本次没有修改网络或 SSH 配置,没有执行安装、编译、远程启动、Slurm 提交和 OpenSHMEM 程序。真正的验收记录应写明安装来源、命令、节点分配、退出状态和观察到的输出,不能仅把本教程复制为“已通过”报告。
来源与许可
- Validating your installation:配置检查与全部六项测试。
- Installing Open MPI;Building MPI applications。
- Launching MPI applications;Launching with Slurm。
- v5.0.4 examples:Makefile、MPI 和 OpenSHMEM 示例源码。
文档版权标示为 © 2003–2024 The Open MPI Community。本文展示的 C MPI 示例保留 Indiana University 相关机构和 Cisco Systems 的原始版权归属;OpenSHMEM 源文件还标有 Mellanox Technologies 与 Cisco Systems 等归属。完整许可在文末公开保留,并可查阅 v5.0.4 LICENSE 和 官方许可页。中文译写、注释整理和原创示意图由未完纪整理制作。
上游代码版权与完整许可
以下保留对应上游版本的完整声明;第三方例外与附加通知按原文保留。
Most files in this release are marked with the copyrights of the
organizations who have edited them. The copyrights below are in no
particular order and generally reflect members of the Open MPI core
team who have contributed code to this release. The copyrights for
code used under license from other parties are included in the
corresponding files.
Copyright (c) 2004-2012 The Trustees of Indiana University and Indiana
University Research and Technology
Corporation. All rights reserved.
Copyright (c) 2004-2024 The University of Tennessee and The University
of Tennessee Research Foundation. All rights
reserved.
Copyright (c) 2004-2018 High Performance Computing Center Stuttgart,
University of Stuttgart. All rights reserved.
Copyright (c) 2004-2008 The Regents of the University of California.
All rights reserved.
Copyright (c) 2006-2018 Los Alamos National Security, LLC. All rights
reserved.
Copyright (c) 2006-2024 Cisco Systems, Inc. All rights reserved.
Copyright (c) 2006-2010 Voltaire, Inc. All rights reserved.
Copyright (c) 2006-2023 Sandia National Laboratories. All rights reserved.
Copyright (c) 2006-2010 Sun Microsystems, Inc. All rights reserved.
Use is subject to license terms.
Copyright (c) 2006-2023 The University of Houston. All rights reserved.
Copyright (c) 2006-2009 Myricom, Inc. All rights reserved.
Copyright (c) 2007-2017 UT-Battelle, LLC. All rights reserved.
Copyright (c) 2007-2023 IBM Corporation. All rights reserved.
Copyright (c) 1998-2005 Forschungszentrum Juelich, Juelich Supercomputing
Centre, Federal Republic of Germany
Copyright (c) 2005-2008 ZIH, TU Dresden, Federal Republic of Germany
Copyright (c) 2007 Evergrid, Inc. All rights reserved.
Copyright (c) 2008-2016 Chelsio, Inc. All rights reserved.
Copyright (c) 2008-2009 Institut National de Recherche en
Informatique. All rights reserved.
Copyright (c) 2007 Lawrence Livermore National Security, LLC.
All rights reserved.
Copyright (c) 2007-2019 Mellanox Technologies. All rights reserved.
Copyright (c) 2006-2010 QLogic Corporation. All rights reserved.
Copyright (c) 2008-2017 Oak Ridge National Labs. All rights reserved.
Copyright (c) 2006-2012 Oracle and/or its affiliates. All rights reserved.
Copyright (c) 2009-2015 Bull SAS. All rights reserved.
Copyright (c) 2010 ARM ltd. All rights reserved.
Copyright (c) 2016 ARM, Inc. All rights reserved.
Copyright (c) 2010-2011 Alex Brick <bricka@ccs.neu.edu>. All rights reserved.
Copyright (c) 2012 The University of Wisconsin-La Crosse. All rights reserved.
Copyright (c) 2013-2020 Intel, Inc. All rights reserved.
Copyright (c) 2011-2024 NVIDIA Corporation. All rights reserved.
Copyright (c) 2016-2018 Broadcom Limited. All rights reserved.
Copyright (c) 2011-2023 Fujitsu Limited. All rights reserved.
Copyright (c) 2014-2015 Hewlett-Packard Development Company, LP. All
rights reserved.
Copyright (c) 2013-2023 Research Organization for Information Science (RIST).
All rights reserved.
Copyright (c) 2017-2024 Amazon.com, Inc. or its affiliates. All Rights
reserved.
Copyright (c) 2018 DataDirect Networks. All rights reserved.
Copyright (c) 2018-2024 Triad National Security, LLC. All rights reserved.
Copyright (c) 2019-2023 Hewlett Packard Enterprise Development, LP.
Copyright (c) 2020-2023 Google, LLC. All rights reserved.
Copyright (c) 2002 University of Chicago
Copyright (c) 2001 Argonne National Laboratory
Copyright (c) 2020-2024 Cornelis Networks, Inc. All rights reserved.
Copyright (c) 2021 Nanook Consulting
Copyright (c) 2017-2019 Iowa State University Research Foundation, Inc.
All rights reserved.
$COPYRIGHT$
Additional copyrights may follow
$HEADER$
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:
- Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
- Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer listed
in this license in the documentation and/or other materials
provided with the distribution.
- Neither the name of the copyright holders nor the names of its
contributors may be used to endorse or promote products derived from
this software without specific prior written permission.
The copyright holders provide no reassurances that the source code
provided does not infringe any patent, copyright, or any other
intellectual property rights of third parties. The copyright holders
disclaim any liability to any recipient for claims brought against
recipient by any third party for infringement of that parties
intellectual property rights.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
----------------[Copyright from inclusion of MPICH code]----------------
The following is a notice of limited availability of the code, and disclaimer
which must be included in the prologue of the code and in all source listings
of the code.
Copyright Notice
+ 2002 University of Chicago
Permission is hereby granted to use, reproduce, prepare derivative works, and
to redistribute to others. This software was authored by:
Mathematics and Computer Science Division
Argonne National Laboratory, Argonne IL 60439
(and)
Department of Computer Science
University of Illinois at Urbana-Champaign
GOVERNMENT LICENSE
Portions of this material resulted from work developed under a U.S.
Government Contract and are subject to the following license: the Government
is granted for itself and others acting on its behalf a paid-up, nonexclusive,
irrevocable worldwide license in this computer software to reproduce, prepare
derivative works, and perform publicly and display publicly.
DISCLAIMER
This computer code material was prepared, in part, as an account of work
sponsored by an agency of the United States Government. Neither the United
States, nor the University of Chicago, nor any of their employees, makes any
warranty express or implied, or assumes any legal liability or responsibility
for the accuracy, completeness, or usefulness of any information, apparatus,
product, or process disclosed, or represents that its use would not infringe
privately owned rights.












暂无评论内容