17.2.344. MPI_T

Open MPI的MPI_T接口 - 概述信息

17.2.344.1. 描述

关于Open MPI的MPI_T接口实现,有几个值得注意的特定事项。

17.2.344.1.1. MPI_T 控制变量

Open MPI 对 MPI_T 控制变量("cvar")API 的实现是其底层模块化组件架构(MCA)参数/变量的接口。简而言之:使用 MPI_T cvar 接口是另一种获取/设置 Open MPI MCA 参数的机制。

按照优先级从高到低的顺序,Open MPI 提供了以下机制来设置 MCA 参数:

  1. MPI_T接口具有最高优先级。具体来说:通过MPI_T接口设置的值将覆盖所有其他设置。

  2. mpirun(1) / mpiexec(1) 命令行(例如通过 --mca 参数)。

  3. 环境变量。

  4. 参数文件的优先级最低。具体而言:通过参数文件设置的值可以被其他任何MCA变量设置机制覆盖。

17.2.344.1.2. MPI初始化

应用程序可以在MPI初始化之前使用MPI_T接口来设置MCA参数。在MPI初始化前设置MPI级别的MCA参数可能会影响MPI的初始化方式(例如,通过影响所选择的框架和组件)。

以下示例在调用MPI_Init之前设置pml和btl MCA参数,以强制选择特定的PML和BTL组件:

int provided, index, count;
MPI_T_cvar_handle pml_handle, btl_handle;
char pml_value[64], btl_value[64];

MPI_T_init_thread(MPI_THREAD_SINGLE, &provided);

MPI_T_cvar_get_index("pml", &index);
MPI_T_cvar_handle_alloc(index, NULL, &pml_handle, &count);
MPI_T_cvar_write(pml_handle, "ob1");

MPI_T_cvar_get_index("btl", &index);
MPI_T_cvar_handle_alloc(index, NULL, &btl_handle, &count);
MPI_T_cvar_write(btl_handle, "tcp,vader,self");

MPI_T_cvar_read(pml_handle, pml_value);
MPI_T_cvar_read(btl_handle, btl_value);
printf("Set value of cvars: PML: %s, BTL: %s\n",
       pml_value, btl_value);

MPI_T_cvar_handle_free(&pml_handle);
MPI_T_cvar_handle_free(&btl_handle);

MPI_Init(NULL, NULL);

// ...

MPI_Finalize();

MPI_T_finalize();

请注意,一旦MPI初始化完成,大多数Open MPI配置变量将变为只读状态。

例如,在MPI初始化后,就无法再设置PML和BTL选择机制。这是因为许多MCA参数仅在MPI初始化期间使用;无论如何,在MPI已经初始化后再设置它们将毫无意义。

17.2.344.1.3. MPI_T 分类

Open MPI的MPI_T类别采用分层结构组织:

  1. 层级(或“项目”)。Open MPI中有两个层级:

    • ompi: 该层包含与MPI特性相关的cvars、pvars及子类别。

    • opal: 这一层通常包含cvars、pvars以及底层构建的子类别,例如操作系统问题、网络问题等。

  2. 框架或部分。

    • 在大多数情况下,层次结构中的下一级是Open MPI MCA框架。

      • 例如,你可以在opal层下找到btl框架(因为它与底层网络相关)。

      • 此外,pml框架位于ompi层之下(因为它涉及点对点消息传递的MPI语义)。

    • 然而,在该层之下还存在一些非MCA框架实体。

      • 例如,在opal和ompi层下都有一个mpi部分,用于通用的/核心MPI构造。

  3. 组件。

    • 如果相关,层次结构中的第三级是MCA组件。

    • 例如,tcp组件可以在opal层的opal框架下找到。

另请参阅