Main Content

本页采用了机器翻译。点击此处可查看英文原文。

UNIX 系统上使用不同的 MPI 版本

编译 MPI

在 Linux® 操作系统上,您可以使用与 Parallel Computing Toolbox™ 提供的 MPI 编译不同的 MPI 编译。本主题概述了创建用于通用调度器接口的 MPI 编译的步骤。如果您已经有了其他 MPI 版本,请继续使用您的 MPI 编译

  1. 将 MPI 源解压到机器上的目标文件系统中。例如,假设您已经下载了 mpich2-distro.tgz 并想要将其解压到 /opt 进行编译:

    # cd /opt
    # mkdir mpich2 && cd mpich2
    # tar zxvf path/to/mpich2-distro.tgz
    # cd mpich2-1.4.1p1
  2. 使用 enable-shared 选项编译您的 MPI(这很重要,因为您必须编译一个共享库 MPI,二进制兼容 R2013b 到 R2018b 的 MPICH2-1.4.1p1,或 R2019a 及更高版本的 MPICH3.2.1)。例如,以下命令使用 nemesis 通道设备和 gforker 启动器编译 MPI。

    #./configure -prefix=/opt/mpich2/mpich2-1.4.1p1 \
     --enable-shared --with-device=ch3:nemesis \
     --with-pm=gforker 2>&1 | tee log
    # make 2>&1 | tee -a log
    # make install 2>&1 | tee -a log

使用您的 MPI 编译

当您的 MPI 编译准备就绪时,此阶段将重点介绍将其与通用调度器一起使用的步骤。要使您的集群与不同的 MPI 编译一起工作,请按照以下步骤操作。

  1. 通过运行 mpiexec 可执行文件来测试您的编译。编译应该准备好测试其 bin/mpiexeclib/libmpich.so 是否在 MPI 安装位置可用。

    遵循编译 MPI 中的示例、/opt/mpich2/mpich2-1.4.1p1/bin/mpiexec/opt/mpich2/mpich2-1.4.1p1/lib/libmpich.so 已准备就绪,因此您可以使用以下命令测试编译:

    $ /opt/mpich2/mpich2-1.4.1p1/bin/mpiexec -n 4 hostname
  2. 创建一个 mpiLibConf (Parallel Computing Toolbox) 函数来指示 Parallel Computing Toolbox 使用您的新 MPI。编写 mpiLibConf.m 以返回适合您的编译的信息。例如:

    function [primary, extras] = mpiLibConf
    primary = '/opt/mpich2/mpich2-1.4.1p1/lib/libmpich.so';
    extras  = {};

    primary 路径必须在集群上有效;并且您的 mpiLibConf.m 文件在集群工作进程路径上的位置必须高于 matlabroot/toolbox/parallel/mpi。(为此目的将 mpiLibConf.m 作为附加文件发送是行不通的。您可以通过将文件移动到路径上的文件夹中,或者让调度器在其命令中使用 cd 来在工作进程程序路径上获取 mpiLibConf.m 函数,以便它从包含该函数的文件夹内启动 MATLAB® 工作进程。)

  3. 确定必要的守护进程和命令行选项。

    • 确定所有必要的守护进程(通常像 mpdbootsmpd)。本节中的 gforker 编译示例使用不需要在集群上运行任何服务或守护进程的 MPI,但它只能使用本地机器。

    • 确定要传递给 mpiexec 正确命令行选项。

  4. 要设置集群以使用新的 MPI 编译,请修改通信作业包装器脚本以选择正确的 mpiexec。此外,包装脚本中可能有一个阶段用于启动 MPI 进程管理器守护进程。

    通信作业包装器脚本必须:

    • 确定调度器分配哪些节点。

    • 启动所需的守护进程。例如,对于 MPD 进程管理器来说,这意味着调用 "mpdboot -f <nodefile>"

    • 定义使用哪个 mpiexec 可执行文件来启动工作进程。

    • 停止守护进程。例如,对于 MPD 进程管理器来说,这意味着调用 "mpdallexit"

    有关通信作业包装器脚本的示例,请参阅Sample Plugin Scripts (Parallel Computing Toolbox)