8. 模块化组件架构(MCA)

Open MPI是一个高度可定制的系统;它可以通过配置文件、命令行参数和环境变量进行配置。Open MPI配置系统的主要功能是通过模块化组件架构(MCA)实现的。

  • 本节介绍MCA本身以及如何在运行时设置MCA参数。

  • 本文档后续章节将介绍Open MPI功能的不同部分,以及可用于影响Open MPI行为的MCA参数具体名称和取值。

注意

PMIx和PRRTE软件包同样采用MCA框架进行配置、组件化以及运行时调优。


8.1. 术语

模块化组件架构(MCA)是Open MPI大部分功能的核心支撑。它由一系列项目框架组件模块组成,这些元素在运行时进行组装,从而构建出一个MPI实现方案。

MCA 参数(也称为 MCA 变量)用于在运行时自定义 Open MPI 的行为。

以下将逐一描述这些实体。

8.1.1. 项目

一个项目本质上是Open MPI代码库中的最高抽象层划分。

注意

遗憾的是,“项目”这个词被赋予了多重含义。它可以指代与特定软件包开发相关的整个Open MPI社区中的代码/资源/人员,但也可以用来表示Open MPI代码库中的一个主要顶级代码部分。

在本文档中,“项目”指的是后者:Open MPI代码库中的一个主要顶级代码部分。

Open MPI v5.0.x 版本中包含以下项目

  • 开放可移植性访问层(OPAL): 底层操作系统与架构的可移植性代码。

  • Open MPI (OMPI): MPI API及其支持的基础架构。

  • OpenSHMEM (OSHMEM): OpenSHMEM API及其支持的基础架构。

注意

Open MPI的早期版本还包含一个Open MPI运行时环境(ORTE)项目。ORTE最终演变为独立的PMIx运行时参考环境(PRRTE),现在被视为Open MPI的第三方依赖项,而非其包含的子项目之一。

更多信息请参阅PMIx和PRRTE的作用

8.1.2. 框架

MCA框架在运行时管理零个或多个组件,并针对特定任务(例如提供MPI集体操作功能)。尽管每个MCA框架仅支持单一类型的组件,但它可以支持该类型的多个组件。

用户可能希望或需要自定义的一些更常见框架包括以下内容:

  • btl: 字节传输层;这些组件专门用作ob1 PML组件的底层传输协议。

  • coll: MPI 集合通信算法

  • io: MPI I/O

  • mtl: MPI匹配传输层(MTL);这些组件专门用作cm PML组件的底层传输。

  • pml: 点对点消息传递层(PML)。这些组件用于实现MPI点对点消息传递功能。

Open MPI 包含许多框架;具体集合因不同版本而异。您可以使用ompi_info(1)命令查看 Open MPI v5.0.x 中包含的所有框架列表。

8.1.3. 组件

MCA组件是对框架正式接口的一种实现。它是一个独立的代码集合,可以打包成插件,在运行时和/或编译时插入到Open MPI代码库中。

注意

对于Open MPI中的"component"概念,合适的同义词可以是"插件"或"附加组件"。

不同版本的Open MPI所包含的组件集可能有所不同。Open MPI的代码库支持许多组件,但并非所有组件都会在您的系统中出现或可用。您可以使用ompi_info(1)命令来查看系统中Open MPI v5.0.x版本包含哪些组件。

8.1.4. 模块

MCA模块是组件的一个实例(从C++中"实例"一词的概念来看;MCA组件类似于C++类)。例如,如果运行Open MPI应用程序的节点有两个以太网网卡,那么该Open MPI应用程序将包含一个TCP MPI点对点组件,但会有两个TCP点对点模块

8.1.5. 参数(变量)

MCA 参数(有时也称为MCA 变量)是Open MPI运行时调优的基本单元。它们是简单的"键=值"对,在Open MPI中被广泛使用。开发者遵循的一般经验法则是:

  1. 对于重要的数值,不要使用常量,而是将其设为MCA参数。

  2. 如果一个任务可以通过多种用户可识别的方式实现,应尽可能多地实现这些方式,并使用MCA参数在运行时进行选择。

例如,一个容易描述的MCA参数是TCP有线传输中短消息与长消息的分界点。"短"消息会立即发送,而"长"消息则采用会合协议。这两种协议之间的决策依据是消息的总大小(以字节为单位)。通过将此值设为MCA参数,用户或系统管理员可以在运行时根据特定环境或硬件配置调整到合理数值(例如,适用于1Gbps以太网的值可能不适用于100千兆以太网,而25千兆以太网甚至可能需要第三个不同的值)。


8.2. 设置MCA参数值

MCA参数可以通过多种不同的方式进行设置。

基本原理

提供多种设置MCA参数的方法,例如允许系统管理员根据其硬件/环境对Open MPI安装进行微调,这样普通用户只需使用默认值(由系统管理员设置)。

高性能计算(HPC)环境及其上运行的应用程序往往具有独特性。通过MCA参数提供广泛的运行时调优能力,可以实现对Open MPI的定制化配置,以满足每个系统/用户/应用程序的特定需求。

以下是设置MCA参数的不同方法,按优先级顺序列出:

  1. 命令行参数

  2. 环境变量

  3. 调整MCA参数文件

  4. 配置文件

危险

由于PMIx和PRRTE项目都从Open MPI独立发展而来(详见此部分),它们各自拥有用于设置MCA参数的MCA系统。

因此,以下关于MCA参数的所有信息同样适用于PMIx和PRRTE。

8.2.1. 命令行参数

最高优先级的方法是在命令行中设置MCA参数。例如:

shell$ mpirun --mca mpi_show_handle_leaks 1 -np 4 a.out

这将在运行带有四个进程的a.out之前,将MCA参数mpi_show_handle_leaks的值设置为1。通常,命令行上使用的格式是--mca

注意

当设置包含空格的值时,需要使用引号以确保shell理解多个标记是单个值。例如:

shell$ mpirun --mca param "value with multiple words" ...

警告

通过命令行设置Open MPI MCA参数需要使用--mca命令行选项。当通过配置文件设置特定于PMIx和PRRTE的MCA参数时,请使用不同的命令行选项:

Open MPI

--mca

PMIx

--pmixmca

PRRTE

--prtemca

8.2.2. 环境变量

接下来,会搜索环境变量。任何名为OMPI_MCA_的环境变量都将被使用。例如,以下命令与之前的示例效果相同(适用于sh类shell):

shell$ export OMPI_MCA_mpi_show_handle_leaks=1
shell$ mpirun -np 4 a.out

注意

与命令行参数类似,为包含多个单词的环境变量赋值时需要使用shell引号,例如:

shell$ export OMPI_MCA_param="value with multiple words"

警告

通过环境变量设置Open MPI MCA参数时,需要在参数名前添加前缀OMPI_MCA_。当通过环境变量设置特定于PMIx和PRRTE的MCA参数时,请使用不同的前缀:

Open MPI

OMPI_MCA_

PMIx

PMIX_MCA_

PRRTE

PRRTE_MCA_

8.2.3. 调整MCA参数文件

错误

待办事项:需要检查整个这一部分的正确性。

简单的文本文件可用于为特定应用程序设置MCA参数值。

mpirun --tune 命令行选项允许用户通过单个文件同时指定MCA参数和环境变量。

在调优参数文件中设置的MCA参数将覆盖全局参数文件(例如$HOME/.openmpi/mca-params.conf)中提供的任何MCA参数,但不会覆盖命令行或环境参数。

假设有一个调优参数文件名为foo.conf,它与应用程序a.out位于同一目录下。用户通常会这样运行该应用程序:

shell$ mpirun -np 2 a.out

要使用经过调优的参数文件foo.conf,该命令行需更改为:

shell$ mpirun -np 2 --tune foo.conf a.out

如果需要使用多个调优参数文件,可以将它们进行关联。假设存在另一个名为bar.conf的调优参数文件,可以通过以下方式将其添加到命令行中:

shell$ mpirun -np 2 --tune foo.conf,bar.conf a.out

调优文件的内容包含一行或多行,每行可以包含零个或多个-x–mca选项。不允许包含注释。例如,以下是一个调优文件示例:

-x envvar1=value1 -mca param1 value1 -x envvar2
-mca param2 value2
-x envvar3

等同于:

shell$ mpirun \
    -x envvar1=value1 -mca param1 value1 -x envvar2 \
    -mca param2 value2
    -x envvar3 \
    ...rest of mpirun command line...

尽管调优参数文件的典型用例是通过命令行指定,但它们也可以作为MCA参数在环境中设置。MCA参数mca_base_envvar_file_prefix包含一个逗号分隔的调优参数文件列表,其格式与传递给--tune命令行选项时完全一致。MCA参数mca_base_envvar_file_path则指定了搜索相对路径调优文件的路径。

错误

待办事项:检查这些MCA变量名称^^是否正确。

8.2.4. 配置文件

最后,可以使用简单的配置文件来设置MCA参数值。每行设置一个参数(允许添加注释)。例如:

# This is a comment
# Set the same MCA parameter as in previous examples
mpi_show_handle_leaks = 1

请注意,在MCA参数文件中设置多词值时不需要使用引号。实际上,如果在MCA参数文件中使用引号,它们将被视为值本身的一部分。例如:

# The following two values are different:
param1 = value with multiple words
param2 = "value with multiple words"

默认情况下,会按顺序搜索以下两个文件:

  1. $HOME/.openmpi/mca-params.conf: 用户提供的参数值具有最高优先级。

  2. $prefix/etc/openmpi-mca-params.conf: 系统提供的默认值具有较低的优先级。

更具体地说,MCA参数mca_param_files指定了一个以冒号分隔的文件路径列表,用于搜索MCA参数。左侧的文件优先级较低;右侧的文件优先级较高。

注意

请注意,与组件类似,这些参数文件在其"可见"范围内有效(参见此常见问题条目)。具体来说,Open MPI不会在启动时读取这些文件中的所有值并将其发送给作业中的所有节点。相反,这些文件是在每个节点上的进程启动时分别读取的。

这是预期行为: 它允许按节点进行定制,这在异构环境中尤为重要。

错误

待办事项:需要检查此表格的正确性。

警告

通过配置文件设置Open MPI MCA参数 默认需要编辑mca-params.confopenmpi-mca-params.conf文件。当通过配置文件 设置PMIx和PRRTE特定的MCA参数时, 默认情况下应将它们设置在不同的文件中:

Open MPI

$HOME/.openmpi/mca-params.conf$prefix/etc/openmpi-mca-params.conf

PMIx

$HOME/.pmix/mca-params.conf$prefix/etc/openpmix-mca-params.conf

PRRTE

$HOME/.prrte/mca-params.conf$prefix/etc/prte-mca-params.conf


8.3. 显示MCA参数值

MCA参数是Open MPI的"生命线"。MCA参数用于控制Open MPI的细节和大规模行为,并贯穿于整个代码库中。

这就引出了一个重要问题:由于MCA参数可以通过文件、环境变量、命令行甚至Open MPI内部进行设置,那么我该如何确切知道当前任务实际使用的是哪些MCA参数及其具体值呢?

当然,一种方法是使用ompi_info(1)命令,该命令在其他文档中有详细说明(你可以使用man ompi_infoompi_info --help来获取关于该命令的更多信息)。然而,这仍然不能完全解答问题,因为ompi_info并不是一个MPI进程。

为了帮助缓解这个问题,Open MPI提供了MCA参数mpi_show_mca_params,该参数指示MPI_COMM_WORLD中排名为0的进程报告MCA参数的名称、该进程看到的当前值以及设置该值的来源。该参数可以接受多个值来定义要报告的MCA参数:

  • all: 报告所有MCA参数。注意:这通常会生成一个相当长的参数列表,因为它包含Open MPI内部定义的所有默认参数。

  • default: 处于默认设置的MCA参数 - 即所有在Open MPI内部设置为默认值的MCA参数

  • file: 通过文件设置值的MCA参数

  • api: 使用Open MPI内部API设置的MCA参数,可能是为了覆盖用户指定的不兼容条件集

  • enviro: 从本地环境或命令行获取值的MCA参数。Open MPI将环境变量和命令行参数视为等同,因此目前无法区分这两种来源

这些选项可以通过逗号分隔以任意顺序组合。

以下是该参数生成的输出示例:

shell$ mpirun --mca mpi_show_mca_params enviro hello_c
[local-hostname:12345] mpi_show_mca_params=enviro (environment)
Hello, World, I am 0 of 1

请注意,除了用户实际设置的参数外,还会显示Open MPI自身为内部使用而设置的多个MCA参数。

由于此选项的输出可能较长,且记录作业使用的MCA参数有助于长期保存,因此提供了一个配套的MCA参数mpi_show_mca_params_file。如果同时设置了mpi_show_mca_params_file,MCA参数的输出列表将被重定向到指定文件中,而非打印到标准输出。例如:

shell$ mpirun --mca mpi_show_mca_params enviro \
    --mca mpi_show_mca_param_file /tmp/foo.txt hello_c
Hello, World, I am 0 of 1
shell$ cat /tmp/foo.txt
#
# This file was automatically generated on Sun Feb  7 14:34:31 2021
# by MPI_COMM_WORLD rank 0 (out of a total of 16) on savbu-usnic-a
#
mpi_show_mca_params=enviro (environment)
mpi_show_mca_params_file=/tmp/foo.txt (environment)

8.4. 运行时选择使用的Open MPI组件

每个MCA框架都有一个顶级MCA参数,用于指导在运行时选择使用哪些组件。具体来说,每个框架都有一个同名的MCA参数,可用于在给定运行中包含排除组件。

例如,btl MCA参数用于控制使用哪些BTL组件。它接受以逗号分隔的组件名称列表,并可以选择性地以^作为前缀。例如:

注意

字节传输层(BTL)框架被用作ob1点对点消息传递层(PML)组件的底层网络传输协议。

# Tell Open MPI to include *only* the BTL components listed here and
# implicitly ignore all the rest:
shell$ mpirun --mca btl self,sm,usnic ...

# Tell Open MPI to exclude the tcp and uct BTL components
# and implicitly include all the rest
shell$ mpirun --mca btl ^tcp,uct ...

请注意,^符号只能作为整个逗号分隔列表的前缀使用,因为包含与排除行为是互斥的。具体来说,由于排除行为意味着"使用除这些之外的所有组件",将其与未指定时的默认包含行为(即"使用所有这些组件")混合使用是没有意义的。因此,类似以下写法:

shell$ mpirun --mca btl self,sm,usnic,^tcp ...

这是没有意义的——并且会导致错误——因为它既表示“仅使用selfsmusnic组件”,又表示“使用除tcp之外的所有组件”。这两个表述显然是相互矛盾的。


8.5. 通用MCA参数

Open MPI 提供了大量可用的MCA参数。用户可以通过ompi_info(1)命令查看所有可用的MCA参数。

注意

同样地,您可以使用pmix_info(1)prte_info(1)命令分别查看PMIx和PRRTE项目中所有可用的MCA参数。

这些命令的文档未包含在Open MPI文档中,但它们都与ompi_info(1)非常相似。

然而,这些MCA参数中的绝大多数对大多数用户来说并不实用。事实上,最终用户常用的MCA参数只有少数几个。如ompi_info(1)手册页所述,MCA参数被分为九个级别,对应MPI标准的工具支持详细级别。一般来说:

  • 级别1-3面向最终用户。

    • 这些参数通常用于影响Open MPI作业是否能正确运行。

    提示

    1-3级的参数可能适用于大多数终端用户。

  • 第4-6级面向应用程序调优人员。

    • 这些参数通常用于调整Open MPI作业的性能。

  • 第7-9级面向MPI实现者。

    • 这些参数较为深奥,主要面向那些深入参与Open MPI代码库内部实现工作的开发者。

虽然完整的MCA参数列表可在ompi_info(1)命令输出中查看,但以下常用参数列表特此列出,以便通过互联网搜索轻松找到:

  • 各个框架名称被用作MCA参数来选择将使用哪些组件。例如,btl MCA参数用于从btl框架中选择要使用的组件,coll MCA参数用于选择使用哪些coll组件,依此类推。

  • 带有_base_verbose后缀的独立框架名称(例如btl_base_verbosecoll_base_verbose等)可用于设置该框架中所有组件的通用详细级别。

    • 这在排查运行时为何某些组件被选中或未被选中时非常有用。

  • 许多与网络相关的组件支持"包含"和"排除"类型的参数(例如btl_tcp_if_includebtl_tcp_if_exclude)。"include"参数指定要使用的明确网络接口集;"exclude"参数指定要忽略的明确网络接口集。请检查ompi_info(1)输出的完整列表,查看您正在使用的网络相关组件是否具有"包含"和"排除"网络接口参数。

    重要提示

    您只能使用"include""exclude"参数——它们是互斥的。

  • mca_base_component_show_load_errors: 默认情况下,Open MPI 在运行时如果无法打开DSO组件会发出警告信息。这种情况通常发生在DSO所需的共享库不可用时。

    基本原理

    在Open MPI的早期版本中,组件默认构建为动态共享对象(DSO)(而非包含在其父库中,例如libmpi.so)。在配置错误的系统上,有时会缺少网络加速库,这意味着高性能计算(HPC)级别的网络组件在运行时无法打开。因此,Open MPI通常会回退到TCP作为网络传输协议,这通常会导致最终用户应用程序性能不佳。

    让Open MPI对加载失败发出警告是有用的,因为它能提醒用户配置错误。

    注意

    默认情况下,Open MPI v5.0.x将所有组件包含在其基础库中(例如在Linux系统中,libmpi.so包含了与Open MPI一起构建的所有组件,因此无需动态加载任何组件),并且不会将其组件构建为动态共享对象(DSOs)。

    此MCA参数影响组件DSO无法打开时的行为。

    该MCA参数可接受四种通用值:

    1. yes 或布尔值 "true"(例如 1):Open MPI 将 对每个加载失败的组件 DSO 发出警告。

    2. no 或布尔值 "false"(例如 0):Open MPI 将 永远不会发出关于加载失败的组件 DSO 的警告。

    3. 一个以逗号分隔的框架和/或组件列表:Open MPI 将对任何无法打开且与该列表中标记匹配的动态组件发出警告。"匹配"的定义如下:

      • 如果列表中的令牌仅是一个框架名称,则该框架中的任何组件都将匹配。

      • 如果列表中的令牌同时指定了框架名称和组件名称(格式为framework/component),那么只有指定框架中的指定组件才会匹配。

      例如,如果此MCA参数的值为 accelerator,btl/uct,那么当加速器框架中的任何组件或UCT BTL在运行时加载失败时,Open MPI会发出警告。

    4. 该值也可以是一个^字符后跟一个以逗号分隔的框架[/组件]值列表:这与以逗号分隔的令牌列表类似,不同之处在于它只会发出关于未能加载且与列表中令牌不匹配的动态组件的警告。

      例如,如果此MCA参数的值为^accelerator,btl/uct,那么Open MPI将仅对既不在加速器框架中也不是UCT BTL的DSO加载失败发出警告。

8.6. Open MPI 4.x 与 5.x 版本间 MCA 参数变更

当Open MPI 从使用ORTE切换为PRRTE作为其运行时环境时,部分MCA参数被重新命名以提高一致性和/或允许更灵活的行为。以下列出的已弃用Open MPI MCA参数目前已被对应的新PRRTE参数替代,但可能在未来的版本中移除。

注意

在以下列出的所有情况中,已弃用的MCA参数是Open MPI的MCA参数,这意味着其对应的环境变量前缀为OMPI_MCA_(例如OMPI_MCA_orte_xml_output)。然而,对应的新MCA参数是PRRTE的MCA参数,这意味着其对应的环境变量前缀为PRTE_MCA_(例如PRTE_MCA_output)。

重要

是的,PRTE_MCA_环境变量前缀中只有一个R查看此说明了解PRRTE名称中何时使用一个R或两个R。

行为

已弃用的MCA参数

替换为

控制流输出的缓冲

orte_ess_base_stream_buffering

取值:0 | 1 | 2

ompi_stream_buffering

值:相同

输出关于启动进度的简要定期报告

orte_report_launch_progress

取值:布尔型

state_base_show_launch_progress

值:相同

以XML格式提供所有输出

orte_xml_output

取值:布尔型

output

值: xml

使用[job,rank]标记所有输出

orte_tag_output

取值:布尔型

output

值: tag

为所有应用程序进程输出添加时间戳

orte_timestamp_output

取值:布尔型

output

值: timestamp

将应用程序进程的输出重定向到文件名/作业/排名/stdout/stderr/stdddiag。

orte_output_filename

值:

output

值: file=

在启动前显示详细进程映射图

rmaps_base_display_devel_map

取值:布尔型

display

值: map-devel

在启动前将拓扑结构显示为进程映射的一部分

rmaps_base_display_topo_with_map

取值:

display

值: topo=

是否将进程绑定信息报告到标准错误输出

hwloc_base_report_bindings

取值:布尔型

display

值: bind

在启动前显示进程映射图

rmaps_base_display_map

取值:布尔型

display

值: map

显示此作业正在使用的分配情况

orte_display_alloc

取值:布尔型

display

值: allocation

不要在本地节点上运行任何MPI应用程序

rmaps_base_no_schedule_local

取值:布尔型

rmaps_default_mapping_policy

值: []:nolocal

节点允许超额订阅,即使在托管系统中,处理单元也可能过载

rmaps_base_oversubscribe

取值:布尔型

rmaps_default_mapping_policy

值: []:oversubscribe

节点不应被过度订阅,即使系统支持此类操作

rmaps_base_no_oversubscribe

取值:布尔型

rmaps_default_mapping_policy

值: []:nooversubscribe

将硬件线程视为独立的CPU

hwloc_base_use_hwthreads_as_cpus

取值:布尔型

rmaps_default_mapping_policy

值: []:hwtcpus

逗号分隔的范围列表,指定分配给此任务的逻辑CPU

hwloc_base_cpu_set

值:

rmaps_default_mapping_policy

值: pe-list=

将进程绑定到的处理器ID列表

hwloc_base_cpu_list

值:

rmaps_default_mapping_policy

值: pe-list=

将进程绑定到核心

hwloc_base_bind_to_core

取值:布尔型

hwloc_default_binding_policy

值: core

将进程绑定到套接字

hwloc_base_bind_to_socket

取值:布尔型

hwloc_default_binding_policy

值: package

是否按节点轮询映射和排名进程

rmaps_base_bynode

取值:布尔型

rmaps_default_mapping_policy

值: node

是否按核心轮询映射和排名进程

rmaps_base_bycore

取值:布尔型

rmaps_default_mapping_policy

值: core

是否按槽位轮询映射和排名进程

rmaps_base_byslot

取值:布尔型

rmaps_default_mapping_policy

值: slot

每个进程使用的CPU数量

rmaps_base_cpus_per_rank

值:

rmaps_default_mapping_policy

值: []:pe=

在所有分配的节点上每个节点启动n个进程

rmaps_ppr_n_pernode

值:

rmaps_default_mapping_policy

值: ppr::node

在每个可用节点上启动一个进程

rmaps_ppr_pernode

取值:布尔型

rmaps_default_mapping_policy

值: ppr:1:node

在所有分配的节点上每个插槽启动n个进程

rmaps_ppr_n_persocket

值:整数

rmaps_default_mapping_policy

值: ppr::package

给定资源类型上进程数量的逗号分隔列表

rmaps_ppr_pattern

值: <value>

rmaps_default_mapping_policy

值: ppr:

提供一个rankfile文件

orte_rankfile

值:

rmaps_default_mapping_policy

值: rankfile:file=

8.6.1. 示例

上表中许多参数的转换较为直接,涉及整数或布尔值时尤其如此。但部分转换需要将布尔值替换为新参数的值,甚至需要为新参数构建更复杂的复合值。下文将展示所有这些转换类型的示例。

8.6.1.1. 简单值,仅MCA参数名称发生变化

# Old environment variable: (integer value)
export OMPI_MCA_orte_ess_base_stream_buffering=2

# New environment variable: (integer value)
export PRTE_MCA_ompi_stream_buffering=2
# Old environment variable: (boolean value)
export OMPI_MCA_orte_report_launch_progress=1

# New environment variable: (boolean value)
export PRTE_MCA_state_base_show_launch_progress=1

8.6.1.2. 将布尔值转换为变量的参数

# Old environment variable: (boolean value)
export OMPI_MCA_orte_xml_output=1

# New environment variable: (parameter value)
export PRTE_MCA_output=xml
# Old environment variables: (boolean value)
export OMPI_MCA_orte_xml_output=1
export OMPI_MCA_orte_timestamp_output=1

# New environment variable: (parameter value)
export PRTE_MCA_output=xml,timestamp
# Old environment variable: (boolean value)
export OMPI_MCA_rmaps_base_display_devel_map=1

# New environment variable: (parameter value)
export PRTE_MCA_display=map-devel
# Old environment variables: (boolean value)
export OMPI_MCA_rmaps_base_display_devel_map=1
export OMPI_MCA_rmaps_base_report_bindings=1

# New environment variable: (parameter value)
export PRTE_MCA_display=map-devel,bind

8.6.1.3. 将字符串值转换为变量参数

# Old environment variable: (string value)
export OMPI_MCA_orte_output_filename=output.txt

# New environment variable: (parameter value)
export PRTE_MCA_output=file=output.txt
# Old environment variables: (boolean value)
export OMPI_MCA_orte_xml_output=1
export OMPI_MCA_orte_timestamp_output=1

# Old environment variable: (string value)
export OMPI_MCA_orte_output_filename=output.txt

# New environment variable: (parameter value)
export PRTE_MCA_output=xml,timestamp,file=output.txt
# Old environment variable: (string value)
export OMPI_MCA_rmaps_base_display_topo_with_map=node

# New environment variable: (parameter value)
export PRTE_MCA_display=topo=node
# Old environment variables: (boolean value)
export OMPI_MCA_rmaps_base_display_devel_map=1
export OMPI_MCA_rmaps_base_report_bindings=1

# Old environment variable: (string value)
export OMPI_MCA_rmaps_base_display_topo_with_map=node

# New environment variable: (parameter value)
export PRTE_MCA_display=map-devel,bind,topo=node

8.6.1.4. 转换映射参数

映射参数以前以rmaps_base_hwloc_base_为前缀 (以及orte_rankfile参数)。这些参数已更新为 rmaps_default_mapping_policyhwloc_default_binding_policy 参数,以保持一致性并表明它们是进程的默认映射。 部分旧参数现在成为新参数的值,部分则变为后缀,如下例所示。

以下示例展示了从旧布尔参数到新参数值的转换:

# Old environment variable: (boolean value)
export OMPI_MCA_rmaps_base_bycore=1

# New environment variable: (parameter value)
export PRTE_MCA_rmaps_default_mapping_policy=core
# Old environment variable: (boolean value)
export OMPI_MCA_hwloc_base_bind_to_socket=1

# New environment variable: (parameter value)
export PRTE_MCA_hwloc_default_binding_policy=package

以下示例展示了将具有整数值或字符串值的旧参数转换为具有相同值的新参数值的过程:

# Old environment variable: (string value)
export OMPI_MCA_hwloc_base_cpu_set=1,3,8

# New environment variable: (parameter value)
export PRTE_MCA_rmaps_default_mapping_policy=pe-list=1,3,8
# Old environment variable: (integer value)
export OMPI_MCA_rmaps_ppr_n_persocket=4

# New environment variable: (parameter value)
export PRTE_MCA_rmaps_default_mapping_policy=ppr:4:package
# Old environment variable: (string value)
export OMPI_MCA_orte_rankfile=rankfile.txt

# New environment variable: (parameter value)
export PRTE_MCA_rmaps_default_mapping_policy=rankfile:file=rankfile.txt

以下示例展示了从旧参数到新参数值后缀的映射转换:

# Old environment variable: (boolean value)
export OMPI_MCA_hwloc_base_use_hwthreads_as_cpus=1

# New environment variable: (standalone suffix)
export PRTE_MCA_rmaps_default_mapping_policy=:hwtcpus
# Old environment variable: (boolean value)
export OMPI_MCA_rmaps_base_oversubscribe=1

# New environment variable: (standalone suffix)
export PRTE_MCA_rmaps_default_mapping_policy=:oversubscribe

以下示例展示了从旧参数到带有值的参数组合后缀的转换:

# Old environment variable: (string value)
export OMPI_MCA_hwloc_base_cpu_set=1,3,8

# Old environment variable: (boolean value)
export OMPI_MCA_rmaps_base_oversubscribe=1

# New environment variable: (suffix on value)
export PRTE_MCA_rmaps_default_mapping_policy=pe-list=1,3,8:oversubscribe
# Old environment variable: (integer value)
export OMPI_MCA_rmaps_ppr_n_persocket=4

# Old environment variable: (boolean value)
export OMPI_MCA_hwloc_base_use_hwthreads_as_cpus=1

# New environment variable: (suffix on value)
export PRTE_MCA_rmaps_default_mapping_policy=ppr:4:package:hwtcpus

可以在映射值后附加多个后缀:

# Old environment variable: (integer value)
export OMPI_MCA_rmaps_ppr_n_persocket=4

# Old environment variables: (boolean value)
export OMPI_MCA_hwloc_base_use_hwthreads_as_cpus=1
export OMPI_MCA_rmaps_base_oversubscribe=1

# New environment variable: (suffix on value)
export PRTE_MCA_rmaps_default_mapping_policy=ppr:4:package:hwtcpus:oversubscribe