4.9.2. 安装选项

以下是可与configure一起使用的通用安装命令行选项:

  • --prefix=DIR: 将Open MPI安装到名为DIR的基础目录中。因此,Open MPI的可执行文件将存放在DIR/bin中,头文件存放在DIR/include中,库文件存放在DIR/lib中等。

    注意

    更多关于安装前缀的信息,请参阅installation location部分。

  • --disable-shared: 默认情况下,Open MPI和OpenSHMEM会构建共享库,所有组件都包含在这些共享库中。此开关会禁用此默认行为;它通常仅在与--enable-static一起使用时才有意义。具体来说,此选项意味着--enable-static;启用静态库和禁用共享库是两个独立的选项。

    提示

    See this section 获取关于此CLI选项的打包建议。

  • --enable-static: 将MPI和OpenSHMEM构建为静态库,并静态链接所有组件。请注意,此选项意味着--disable-shared;启用静态库和禁用共享库是两个独立的选项。

    请务必阅读下方关于--without-memory-manager的描述;它可能会对--enable-static产生一些影响。

    提示

    参见本节获取关于此命令行选项的打包建议。

  • --disable-wrapper-runpath / --disable-wrapper-rpath: 默认情况下,包装器编译器(如mpicc)在支持的系统上链接用户可执行文件时,会显式添加"runpath"和"rpath"链接器标志。这意味着创建的可执行文件将在应用程序本身中包含对OpenMPI库位置的引用。这样用户就不需要设置LD_LIBRARY_PATH来查找OpenMPI的库,当这些库安装在运行时链接器默认不搜索的位置时,这个功能会很有帮助。

    使用--disable-wrapper-r*path选项将阻止包装器显式添加这两个链接器标志中的一个或全部。

    注意

    默认情况下,包装器编译器优先采用"runpath"行为而非"rpath"行为。

    • 使用 --disable-wrapper-runpath 会改变这一默认行为:包装器将不再添加显式的"runpath"链接器标志。不过,如果平台支持的话,"rpath"标志可能仍会被添加。

    • 同时使用 --disable-wrapper-runpath --disable-wrapper-rpath 将阻止包装器 显式添加"runpath""rpath"链接器 标志。

    警告

    即使包装器编译器没有显式添加"runpath"或"rpath"链接器标志,本地编译器、链接器和/或操作系统在链接时可能会隐式启用"runpath"或"rpath"行为。

    重要

    命令行选项--disable-wrapper-runpath--disable-wrapper-rpath影响 包装编译器在构建MPI/SHMEM应用程序时使用的标志。这些选项不会影响Open MPI或OpenSHMEM的构建方式(包括包装编译器本身的构建)。

    有关“rpath”和“runpath”如何影响Open MPI自身构建和链接的详细信息,请参阅链接器“rpath”和“runpath”功能部分。

    当启用“runpath”或“rpath”行为中的任意一种时,应用程序会将OpenMPI库的文件系统路径位置硬编码到OpenMPI/OpenSHMEM应用中。"runpath"与"rpath"行为之间最显著的区别在于:

    • 运行路径

      1. 运行时链接器首先在LD_LIBRARY_PATH环境变量指定的路径中搜索相关的Open MPI/OpenSHMEM库。

      2. 如果在那里没有找到,运行时链接器会回退检查相关Open MPI/OpenSHMEM库的硬编码位置。

    • rpath

      1. 运行时链接器首先检查相关Open MPI/OpenSHMEM库的硬编码位置。

      2. 如果在那里没有找到,运行时链接器会回退到在LD_LIBRARY_PATH环境变量中搜索相关的Open MPI/OpenSHMEM库路径。

    警告

    “runpath”与“rpath”之间还存在其他细微差异,这些内容超出了本文档的范围。如需了解更多信息,建议查阅其他资料。

    例如,可以在一个名为"Linux上构建和使用共享库//共享库:动态链接器"的Linux课程幻灯片中找到一套不错的解释说明。

    例如,假设您安装了Open MPI vA.B.0版本,并基于此版本编译/链接了您的MPI/OpenSHMEM应用程序。之后,您又将Open MPI vA.B.1安装到不同的路径前缀下(例如/opt/openmpi/A.B.1对比/opt/openmpi/A.B.0),同时保留了旧版本的安装。

    在运行路径情况下,您可以设置LD_LIBRARY_PATH环境变量指向A.B.1安装目录,这样您的MPI应用程序就会使用这些库,因为运行时会优先搜索LD_LIBRARY_PATH中的路径。

    在rpath情况下,由于运行时链接器会优先搜索硬编码在MPI应用程序中的/opt/openmpi/A.B.0路径,您的应用程序将使用A.B.0安装中的库(无论LD_LIBRARY_PATH环境变量的值如何)。

    请注意,在两种情况下,如果您移除原始的A.B.0版本安装,并将LD_LIBRARY_PATH设置为指向A.B.1版本的安装目录,您的应用程序将会使用A.B.1版本的库文件。

    如上所述,可以通过--disable-wrapper-rpath禁用runpath/rpath行为。

    注意

    您还可以自定义包装编译器使用的编译器/链接器标志来构建Open MPI/OpenSHMEM应用程序。

  • --enable-dlopen: 允许Open MPI在运行时将组件作为独立的动态共享对象(DSOs)加载。此选项默认启用。

    该选项的反向操作,--disable-dlopen,会导致以下情况:

    1. Open MPI 在运行时不会尝试打开任何动态共享对象(DSO)。

    2. configure 的行为如同设置了 --enable-mca-static 参数。

    3. configure 将忽略 --enable-mca-dso 参数。

    有关更多信息,请参阅--enable-mca-static / --enable-mca-dso的描述。

    注意

    此选项不会改变Open MPI库(例如libmpi)的构建方式。您可以通过--enable|disable-static--enable|disable-shared参数来更改Open MPI构建静态库还是动态库。

  • --enable-mca-dso[=LIST]--enable-mca-static[=LIST] 这两个选项,连同 --enable-mca-no-build,共同控制着Open MPI框架和组件的构建方式。

    提示

    See this section 获取关于这些命令行选项的打包建议。

    --enable-mca-dso选项用于指定哪些框架和/或组件应构建为动态共享对象(DSO)。具体来说,DSO会作为"插件"构建在Open MPI核心库之外,并在运行时由Open MPI加载。

    --enable-mca-static选项用于指定哪些框架和/或组件作为Open MPI核心库的一部分构建(即它们不会构建为动态共享对象DSO,因此在运行时无需单独发现和加载)。

    这两个选项可以通过以下两种方式之一使用:

    1. --enable-mca-OPTION (无参数值)

    2. --enable-mca-OPTION=LIST

    --enable-mca-OPTION=no--disable-mca-OPTION 都是合法的选项,但不会影响下文描述的选择逻辑。只有肯定性选项才会改变选择过程。

    如果未指定LIST(例如使用不带LIST--enable-mca-dso),或者如果LIST是特殊值yes,则将选择所有组件。如果指定了LIST,则它是一个以逗号分隔的Open MPI框架和/或框架+组件元组列表。例如:

    • btl 指定整个BTL框架

    • btl-tcp 仅指定BTL框架中的TCP组件

    • mtl,btl-tcp 指定了整个MTL框架以及BTL框架中的TCP组件

    Open MPI的configure脚本在评估每个组件时会使用这两个选项的值,通过按顺序评估以下条件来决定应如何构建:

    1. 如果某个组件的构建行为已通过这两个选项指定,configure将使用该行为。

    2. 否则,如果组件位于某个框架中,且该框架的构建行为已通过这两个选项指定,configure将使用该行为。

    3. 否则,configure 将使用全局默认的构建行为。

    在选择的每个层级中,如果组件被指定同时构建为静态和动态共享对象(DSO)组件,静态选项将优先。

    注意

    从Open MPI v5.0.x版本开始,configure的全局默认设置是将所有组件构建为静态库(即作为Open MPI核心库的一部分,而非动态共享对象)。在Open MPI v5.0.0之前,全局默认行为是将大多数组件构建为动态共享对象。

    重要

    如果指定了--disable-dlopen选项,那么 Open MPI将无法在运行时搜索DSO, 并且--enable-mca-dso选项的值 将被静默忽略。

    一些示例:

    1. 默认将所有组件构建为静态库(即作为Open MPI核心库的一部分,不使用动态共享对象DSO):

      shell$ ./configure
      
    2. 将所有组件构建为动态共享对象(DSO):

      shell$ ./configure --enable-mca-dso
      
    3. 将所有组件构建为静态库,除了TCP BTL,它将构建为动态共享对象(DSO):

      shell$ ./configure --enable-mca-dso=btl-tcp
      
    4. 将所有组件构建为静态库,除了所有BTL组件,它们将被构建为动态共享对象(DSO):

      shell$ ./configure --enable-mca-dso=btl
      
    5. 将所有组件构建为静态库,除了所有MTL组件和TCP BTL组件,它们将被构建为动态共享对象(DSO):

      shell$ ./configure --enable-mca-dso=mtl,btl-tcp
      
    6. 将所有BTL构建为静态库,除了TCP BTL,因为选项比选项更具体:

      shell$ ./configure --enable-mca-dso=btl --enable-mca-static=btl-tcp
      
    7. 将TCP BTL构建为静态,因为同级别的静态选项总是优先:

      shell$ ./configure --enable-mca-dso=btl-tcp --enable-mca-static=btl-tcp
      
  • --enable-mca-no-build=LIST: 以逗号分隔的<框架>-<组件>对列表,这些组件将不会被构建。例如,--enable-mca-no-build=threads-qthreads,pml-monitoring将禁用构建qthreads线程组件和monitoring PML组件。

    注意

    此选项通常仅对原本会被构建的组件有效。例如,如果您使用的机器不支持Libfabric,则无需指定:

    shell$ ./configure --enable-mca-no-build=cm-ofi
    

    因为configure脚本会自动检测到您不支持Libfabric,并自动跳过ofi CM组件。

  • --with-show-load-errors=VALUE: 设置mca_base_component_show_load_errors MCA变量的默认值。MCA变量mca_base_component_show_load_errors仍然可以通过常规的MCA变量设置机制在运行时被覆盖;此配置选项仅设置默认值。

    该选项的no/none值适用于Open MPI打包人员,他们倾向于在其软件包中启用对多种不同类型网络和系统的支持。例如,考虑一个打包人员在其Open MPI软件包中同时包含对FOO和BAR网络的支持,两者都需要支持库(libFOO.solibBAR.so)。如果最终用户只有BAR硬件,他们的系统上可能只有libBAR.so可用——而没有libFOO.so。默认禁用加载错误将防止用户看到关于FOO组件因libFOO.so不可用而加载失败的潜在混淆警告。

    相反,该选项的yes/all值适用于系统管理员,他们倾向于构建针对其特定环境的Open MPI,并且包含很少(如果有的话)不需要的组件。在这种情况下,他们可能希望警告用户FOO网络组件加载失败(例如,如果libFOO.so错误地不可用),因为Open MPI可能会默默地故障转移到较慢的MPI通信网络路径。

    注意

    有关mca_base_component_show_load_errors MCA变量的详细信息,请参阅common MCA parameters部分。

  • --with-platform=FILE: 从FILE文件中加载构建配置选项。命令行中未包含在FILE中的选项也会被使用。命令行和FILE中重复的选项会被FILE中的内容覆盖。

  • --with-libmpi-name=STRING: 将libmpi.*libmpi_FOO.*(其中FOO是安装在lib目录中的Fortran支持库之一)替换为libSTRING.*libSTRING_FOO.*。这个选项是为Open MPI的第三方打包者提供的便利机制,他们可能出于自身目的需要重命名这些库。建议Open MPI的普通用户使用此选项。