Spec-Zone.ru › CMake 3.17

FindMPI

Поиск реализации Message Passing Interface (MPI).

Message Passing Interface (MPI) — это библиотека, используемая для написания высокопроизводительных распределённых параллельных приложений, обычно развертываемых на кластере. MPI — это стандартный интерфейс (определённый форумом MPI), для которого доступно множество реализаций.

Переменные для использования MPI

Модуль предоставляет компоненты C, CXX, MPICXX и Fortran. Каждый из них управляет различными языками MPI для поиска. Разница между CXX и MPICXX заключается в том, что CXX относится к API MPI C, используемому из C++, а MPICXX относится к API MPI-2 C++, который был удалён в MPI-3.

В зависимости от включённых компонентов будут установлены следующие переменные:

MPI_FOUND

Переменная, указывающая, что настройки MPI для всех запрошенных языков найдены. Если компоненты не указаны, это истинно, если настройки MPI для всех включённых языков были обнаружены. Обратите внимание, что компонент MPICXX не влияет на эту переменную.

MPI_VERSION

Минимальная версия MPI, обнаруженная среди запрошенных языков, или всех включённых языков, если компоненты не были указаны.

Этот модуль установит следующие переменные для каждого языка в вашем проекте, где <lang> — это один из C, CXX или Fortran:

MPI_<lang>_FOUND

Переменная, указывающая, что настройки MPI для <lang> были найдены и что простые тестовые программы MPI компилируются с заданными настройками.

MPI_<lang>_COMPILER

Компилятор MPI для <lang>, если такая программа существует.

MPI_<lang>_COMPILE_OPTIONS

Опции компиляции для программ MPI на <lang>, заданные в виде списка.

MPI_<lang>_COMPILE_DEFINITIONS

Определения компиляции для программ MPI на <lang>, заданные в виде списка.

MPI_<lang>_INCLUDE_DIRS

Путь(и) к заголовочному файлу MPI.

MPI_<lang>_LINK_FLAGS

Флаги компоновщика для программ MPI.

MPI_<lang>_LIBRARIES

Все библиотеки для компоновки программ MPI.

Кроме того, определены следующие цели IMPORTED:

MPI::MPI_<lang>

Цель для использования MPI из <lang>.

Следующие переменные, указывающие, какие библиотек присутствуют, будут определены:

MPI_MPICXX_FOUND

Переменная, указывающая, присутствуют ли MPI-2 C++ bindings (введены в MPI-2, удалены с MPI-3).

MPI_Fortran_HAVE_F77_HEADER

Истина, если заголовочный файл Fortran 77 mpif.h доступен.

MPI_Fortran_HAVE_F90_MODULE

Истина, если модуль Fortran 90 mpi может быть использован для доступа к MPI (только MPI-2 и выше).

MPI_Fortran_HAVE_F08_MODULE

Истина, если Fortran 2008 mpi_f08 доступен для программ MPI (только MPI-3 и выше).

Если возможно, этот модуль определит версию MPI. Возможности определения версии MPI были введены с MPI-1.2 и поэтому не могут быть найдены для более старых версий MPI.

MPI_<lang>_VERSION_MAJOR

Главная версия MPI, реализованная для <lang> распределением MPI.

MPI_<lang>_VERSION_MINOR

Дополнительная версия MPI, реализованная для <lang> распределением MPI.

MPI_<lang>_VERSION

Версия MPI, реализованная для <lang> распределением MPI.

Обратите внимание, что нет переменной для C bindings, доступных через mpi.h, так как стандарты MPI всегда требовали, чтобы этот binding работал как в коде C, так и в коде C++.

Для запуска программ MPI модуль устанавливает следующие переменные

MPIEXEC_EXECUTABLE

Исполняемый файл для запуска программ MPI, если такой существует.

MPIEXEC_NUMPROC_FLAG

Флаг для передачи mpiexec перед передачей количества процессоров для запуска.

MPIEXEC_MAX_NUMPROCS

Количество процессоров MPI для использования. По умолчанию равно количеству процессоров, обнаруженных на системе.

MPIEXEC_PREFLAGS

Флаги, передаваемые mpiexec непосредственно перед запуском исполняемого файла.

MPIEXEC_POSTFLAGS

Флаги, передаваемые mpiexec после других флагов.

Переменные для поиска MPI

Этот модуль выполняет поиск реализации MPI в четыре этапа:

  1. Поиск MPIEXEC_EXECUTABLE и, если он найден, используется его базовая директория.
  2. Проверка, поддерживает ли компилятор MPI. Это так, если пользователь передал оболочку компилятора как CMAKE_<LANG>_COMPILER или если он находится на системе Cray.
  3. Попытка найти оболочку компилятора MPI и определить информацию о компиляторе из неё.
  4. Попытка найти реализацию MPI, которая не поставляется с такой оболочкой, путем угадывания настроек. В настоящее время поддерживаются только Microsoft MPI и MPICH2 в Windows.

Для управления этапом MPIEXEC_EXECUTABLE можно установить следующие переменные:

MPIEXEC_EXECUTABLE

Вручную укажите расположение mpiexec.

MPI_HOME

Укажите базовый каталог установки MPI.

ENV{MPI_HOME}

Переменная среды для указания базового каталога установки MPI.

ENV{I_MPI_ROOT}

Переменная среды для указания базового каталога установки MPI.

Для управления шагом с оболочкой компилятора можно установить следующие переменные:

MPI_<lang>_COMPILER

Поиск указанной оболочки компилятора и её использование.

MPI_<lang>_COMPILER_FLAGS

Флаги, передаваемые оболочке компилятора MPI во время опроса. Некоторые оболочки компиляторов поддерживают подключение отладочных или трассировочных библиотек, если передаётся определённый флаг, и эта переменная может быть использована для их получения.

MPI_COMPILER_FLAGS

Используется для инициализации MPI_<lang>_COMPILER_FLAGS, если не указан специфичный для языка флаг. По умолчанию пустая.

MPI_EXECUTABLE_SUFFIX

Суффикс, добавляемый ко всем именам, которые ищутся. Например, вы можете установить его в .mpich или .openmpi для предпочтения одного из них в Debian и его производных.

Для управления этапом угадывания можно установить следующую переменную:

MPI_GUESS_LIBRARY_NAME

Допустимые значения MSMPI и MPICH2. Если установлено, то будет искаться только указанная библиотека. По умолчанию MSMPI будет предпочтительнее MPICH2, если оба доступны. Также это устанавливает MPI_SKIP_COMPILER_WRAPPER в true, что может быть переопределено.

Каждый из этапов поиска можно пропустить, используя следующие управляющие переменные:

MPI_ASSUME_NO_BUILTIN_MPI

Если истина, модуль предполагает, что сам компилятор не предоставляет реализацию MPI, и переходит к шагу 2.

MPI_SKIP_COMPILER_WRAPPER

Если истина, оболочка компилятора не будет искаться.

MPI_SKIP_GUESSING

Если истина, этап угадывания будет пропущен.

Кроме того, доступна следующая управляющая переменная для изменения поведения поиска:

MPI_CXX_SKIP_MPICXX

Добавление определений, которые отключат MPI-2 C++ bindings. В настоящее время поддерживаются MPICH, Open MPI, Platform MPI и их производные, например MVAPICH или Intel MPI.

Если процедура поиска завершается неудачей для переменной MPI_<lang>_WORKS, значит настройки, обнаруженные или переданные модулю, не сработали, и даже простая тестовая программа MPI не смогла скомпилироваться.

Если все эти параметры не достаточны для поиска правильной реализации MPI, пользователь может отключить весь процесс автоопределения, указав список библиотек в MPI_<lang>_LIBRARIES и список каталогов включаемых файлов в MPI_<lang>_ADDITIONAL_INCLUDE_DIRS . Любые другие переменные могут быть установлены в дополнение к этим двум. Затем модуль проверит настройки MPI и сохранит их в кэше.

Переменные кэша для MPI

Переменная MPI_<lang>_INCLUDE_DIRS будет составлена из следующих переменных. Для C и CXX:

MPI_<lang>_HEADER_DIR

Расположение заголовочного файла mpi.h на диске.

Для Fortran:

MPI_Fortran_F77_HEADER_DIR

Расположение заголовочного файла Fortran 77 mpif.h, если он существует.

MPI_Fortran_MODULE_DIR

Расположение модулей mpi или mpi_f08, если они доступны.

Для всех языков дополнительно учитываются следующие переменные:

MPI_<lang>_ADDITIONAL_INCLUDE_DIRS

Список путей, необходимых дополнительно к обычным каталогам включаемых файлов.

MPI_<include_name>_INCLUDE_DIR

Переменные пути к папкам включаемых файлов, на которые ссылается <include_name>.

MPI_<lang>_ADDITIONAL_INCLUDE_VARS

Список библиотек <include_name>, которые будут добавлены в места расположения включаемых файлов для <lang>.

Переменная MPI_<lang>_LIBRARIES будет составлена из следующих переменных:

MPI_<lib_name>_LIBRARY

Расположение библиотеки <lib_name> для использования с MPI.

MPI_<lang>_LIB_NAMES

Список путей <lib_name>, которые будут добавлены к местам расположения файлов заголовков для <lang>.

Использование mpiexec

При использовании MPIEXEC_EXECUTABLE для выполнения приложений MPI, обычно следует использовать все флаги MPIEXEC_EXECUTABLE следующим образом:

${MPIEXEC_EXECUTABLE} ${MPIEXEC_NUMPROC_FLAG} ${MPIEXEC_MAX_NUMPROCS}
  ${MPIEXEC_PREFLAGS} EXECUTABLE ${MPIEXEC_POSTFLAGS} ARGS

где EXECUTABLE — это программа MPI, а ARGS — это аргументы, которые нужно передать программе MPI.

Дополнительные переменные для использования MPI

Модуль может выполнять некоторые расширенные проверки функций по явным запросам.

Важно: Следующие проверки не могут быть выполнены без выполнения программы тестирования MPI. Учтите особые соображения для поведения try_run() во время кросс-компиляции. Кроме того, выполнение программы MPI может вызвать дополнительные проблемы, например, уведомление о брандмауэре на некоторых системах. Вы должны включить эти проверки только в том случае, если вам абсолютно необходима эта информация.

Если следующие переменные установлены в значение true, соответственно выполняется поиск:

MPI_DETERMINE_Fortran_CAPABILITIES

Определить для всех доступных библиотек Fortran значения MPI_SUBARRAYS_SUPPORTED и MPI_ASYNC_PROTECTS_NONBLOCKING и сделать их доступными как MPI_Fortran_<binding>_SUBARRAYS и MPI_Fortran_<binding>_ASYNCPROT, где <binding> — это одно из F77_HEADER, F90_MODULE и F08_MODULE.

MPI_DETERMINE_LIBRARY_VERSION

Для каждого языка найти вывод MPI_Get_library_version и сделать его доступным как MPI_<lang>_LIBRARY_VERSION_STRING. Эта информация обычно связана с компонентом времени выполнения реализации MPI и может отличаться в зависимости от <lang>. Обратите внимание, что возвращаемое значение полностью определено реализацией. Эта информация может использоваться для идентификации поставщика MPI и, например, для выбора правильной из нескольких сторонних библиотек, соответствующей поставщику MPI.

Обратная совместимость

Для обеспечения обратной совместимости со старыми версиями FindMPI эти переменные установлены, но устарели:

MPI_COMPILER        MPI_LIBRARY        MPI_EXTRA_LIBRARY
MPI_COMPILE_FLAGS   MPI_INCLUDE_PATH   MPI_LINK_FLAGS
MPI_LIBRARIES

В новых проектах, пожалуйста, используйте эквиваленты MPI_<lang>_XXX. Кроме того, следующие переменные устарели:

MPI_<lang>_COMPILE_FLAGS

Вместо этого используйте MPI_<lang>_COMPILE_OPTIONS и MPI_<lang>_COMPILE_DEFINITIONS.

MPI_<lang>_INCLUDE_PATH

Для потребления используйте MPI_<lang>_INCLUDE_DIRS и для указания папок используйте MPI_<lang>_ADDITIONAL_INCLUDE_DIRS.

MPIEXEC

Используйте MPIEXEC_EXECUTABLE вместо этого.

© 2000–2020 Kitware, Inc. and Contributors
Licensed under the BSD 3-clause License.
https://cmake.org/cmake/help/v3.17/module/FindMPI.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API