mpirun指令使用
以下是关于mpirun
使用的详细完整解释及示例:
一、简介
mpirun
是一个用于启动并行MPI(消息传递接口)程序的命令行工具。它能够管理进程的分布和执行,使得程序能够在多个处理器或节点上并行运行,从而提高计算效率。
二、常用参数解释
以下是mpirun
的一些常用参数及其功能:
-
-n <num>
:指定启动的进程数,这是最基本的参数,用于确定并行程序的规模。 -
--host <host_list>
:指定程序运行的节点列表,格式为node1:proc1,node2:proc2,...
,其中proc
是每个节点上的进程数。 -
--hostfile <filename>
:指定包含节点信息的文件,文件中每行定义一个节点及其可用的进程数。 -
-x <env_var>
:将指定的环境变量从当前环境传递到远程节点。 -
--allow-run-as-root
:允许以root用户身份运行mpirun
,在某些集群环境中可能需要此权限。 -
--bind-to <bind_type>
:指定进程绑定到硬件资源的方式,如core
(核心)、hwthread
(硬件线程)、none
(不绑定)等,以优化性能。 -
--map-by <map_type>
:控制进程如何映射到节点或核心上,例如node
(按节点映射)、core
(按核心映射)、ppr:<procs>:<type>
(每个节点或核心上指定数量的进程)。
三、示例
示例一:基本用法
在本地机器上启动一个简单的并行程序,使用4个进程:
bash复制
mpirun -n 4 ./my_parallel_program
这条命令会在本地启动4个进程来运行my_parallel_program
。
示例二:跨多个节点运行
假设有一个集群,包含节点node1、node2和node3,想要在这些节点上分别启动8、8和4个进程,可以使用以下命令:
bash复制
mpirun --host node1:8,node2:8,node3:4 ./my_mpi_program
或者,将节点信息写入一个名为hosts.txt
的文件中:
复制
node1 slots=8
node2 slots=8
node3 slots=4
然后使用--hostfile
参数:
bash复制
mpirun --hostfile hosts.txt ./my_mpi_program
示例三:设置环境变量
如果需要在运行时传递特定的环境变量,例如LD_PRELOAD
,可以使用-x
参数:
bash复制
mpirun -x LD_PRELOAD=/usr/lib64/libpil4dfs.so -n 4 ./my_program
示例四:进程绑定和映射
为了优化性能,可以将进程绑定到特定的硬件资源上。例如,将每个进程绑定到不同的核心上:
bash复制
mpirun -n 4 --bind-to core ./my_program
或者按节点映射进程,每个节点上运行2个进程:
bash复制
mpirun -n 4 --map-by node:pe=2 ./my_program
通过合理使用mpirun
的参数,可以根据不同的计算需求和硬件环境,灵活地配置并行程序的运行方式,以达到最佳的性能和效率。