在 UNIX 系统上使用不同的 MPI 版本
编译 MPI
在 Linux® 操作系统上,您可以使用与 Parallel Computing Toolbox™ 提供的 MPI 编译不同的 MPI 编译。本主题概述了创建用于通用调度器接口的 MPI 编译的步骤。如果您已经有了其他 MPI 版本,请继续使用您的 MPI 编译。
将 MPI 源解压到机器上的目标文件系统中。例如,假设您已经下载了
mpich2-distro.tgz
并想要将其解压到/opt
进行编译:# cd /opt # mkdir mpich2 && cd mpich2 # tar zxvf path/to/mpich2-distro.tgz # cd mpich2-1.4.1p1
使用
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 编译一起工作,请按照以下步骤操作。
通过运行
mpiexec
可执行文件来测试您的编译。编译应该准备好测试其bin/mpiexec
和lib/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
创建一个
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/mpimpiLibConf.m
作为附加文件发送是行不通的。您可以通过将文件移动到路径上的文件夹中,或者让调度器在其命令中使用cd
来在工作进程程序路径上获取mpiLibConf.m
函数,以便它从包含该函数的文件夹内启动 MATLAB® 工作进程。)确定必要的守护进程和命令行选项。
确定所有必要的守护进程(通常像
mpdboot
或smpd
)。本节中的gforker
编译示例使用不需要在集群上运行任何服务或守护进程的 MPI,但它只能使用本地机器。确定要传递给
mpiexec
正确命令行选项。
要设置集群以使用新的 MPI 编译,请修改通信作业包装器脚本以选择正确的
mpiexec
。此外,包装脚本中可能有一个阶段用于启动 MPI 进程管理器守护进程。通信作业包装器脚本必须:
确定调度器分配哪些节点。
启动所需的守护进程。例如,对于 MPD 进程管理器来说,这意味着调用
"mpdboot -f <nodefile>"
。定义使用哪个
mpiexec
可执行文件来启动工作进程。停止守护进程。例如,对于 MPD 进程管理器来说,这意味着调用
"mpdallexit"
。
有关通信作业包装器脚本的示例,请参阅Sample Plugin Scripts (Parallel Computing Toolbox)。