Настройка MPI Windows, пример программы

Все исходники / Язык программирования C++ / OS Windows / Параллельные вычисления / Стандарт MPI / Настройка MPI Windows, пример программы
Оглавление:
  1. MPI стандарт для параллельного программирования
  2. Установка среды MPI Windows
  3. Создание проекта в Visual Studio для приложения MPI
  4. Подключение заголовочных файлов MS-MPI в проект на С++
  5. Подключение компонуемых библиотек MS-MPI в проект на С++
  6. Программный код приложения MPI
  7. Тестирование параллельных процессов MPI
  8. Команда запуска параллельных процессов
  9. Исходник запуска программы на MPI

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

Скорость вычисления одного процессора связана с его тактовой частотой, чем частота выше, тем быстрее процессор может выполнять запущенную задачу. Но тактовая частота ограниченный ресурс и ограничения связаны не только с технологией изготовления, но и скоростью движения электронов.

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

MS-MPI — это реализация стандарта интерфейса передачи сообщений компании Майкрософт для разработки и запуска параллельных приложений на платформе Windows.

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

Установка среды MPI Windows

Для функционирования интерфейса передачи сообщений MPI на операционной системе Windows необходима установка пакетов MS-MPI, описание и ссылки для загрузки пакетов находятся на: Message Passing Interface Windows. Для скачивания предлагаются два файла: msmpisetup.exe – установщик MS-MPI msmpisdk.msi - комплект разработки программного обеспечения (SDK). На странице загрузки размещены также и инструкции по установке MS-MPI с помощью данных файлов.

Успешную установку пакетов и создания набора переменных среды MS-MPI можно проверить в командной строке запущенной от имени администратора командой set MSMPI. При правильной установке в консоли напечатаются переменные среды и их физические пути.

Проверка установки пакетов MS-MPI
Результат проверки

Создание проекта в Visual Studio для приложения MPI

Для тестирования среды для высокопроизводительных вычислений по стандарту MPI создадим проект консольного приложения на языке С++. Приложение будет инициировать функциональность MPI, выводить служебные сообщения и по завершению работы финализировать все состояния, связанные со средой MPI.

Создание проекта в Visual Studio происходит в несколько шагов: выбор типа проекта, задание имени и расположения файлов проекта на вашем компьютере. Ниже скриншоты наглядно показывают эти этапы.

Выбор типа проекта в Visual Studio
Выбор типа проекта в Visual Studio
Настройка имени и расположения проекта
Настройка имени и расположения проекта

Подключение заголовочных файлов MS-MPI в проект на С++

Подключение компонуемых библиотек и заголовочных файлов происходит в диалоговом окне свойств проекта. Вызвать окно можно щелкнув на элемент Свойства контекстного меню строки имени проекта.

Доступ к заголовочным файлам прописываются на вкладке Свойства конфигурации-> Дополнительные каталоги включаемых файлов. Прописываем доступ через переменные среды для 64-разрядной и 32-разрядной версии приложения соответственно: $(MSMPI_INC);$(MSMPI_INC)\x64
$(MSMPI_INC);$(MSMPI_INC)\x86
Вместо переменных среды можно прописывать абсолютные пути. Теперь можно добавить в исходный файл проекта С++ директиву: #include "mpi.h"

Добавление заголовочных файлов в проект C++
Добавление заголовочных файлов в проект C++

Подключение компонуемых библиотек MS-MPI в проект на С++

После прописывания доступа к заголовочным файлам подключаем также компонуемые библиотеки на вкладке Свойства конфигурации-> Компоновщик-> Дополнительные зависимости (между названиями обязателен разделитель ;):
msmpi.lib
и Свойства конфигурации-> Компоновщик-> Дополнительные каталоги библиотек, для 64-разрядной и 32-разрядной версии соответственно:
$(MSMPI_LIB64)
$(MSMPI_LIB32).

Подключение компонуемых библиотек C++ Visual Studio
Подключение компонуемых библиотек C++ Visual Studio

Программный код приложения MPI

Для тестового запуска напишем минимальный программный код инициализации среды параллельный вычислений MPI и ее завершения. Если всё было подключено правильно приложение запустится без ошибок.

Листинг кода первого запуска приложения MPI:
#include 
#include "mpi.h"

int main()
{
    // Инициализация среды параллельных вычислений MPI.
    MPI_Init(NULL, NULL);

    // -----
    // Размещение программного кода параллельной программы.
    // -----

    // Завершение работы среды параллельных вычислений MPI
    MPI_Finalize();

    // Приостановка консольного окна перед закрытием для 
    // тестирования программного кода в студии.
    std::cin.get();
}

При первом запуске приложения в среде высокопроизводительны вычислений MS-MPI операционная система Windows выбросит предупредительное окно брандмауэра с запросом на разрешение передачи сообщений между процессами параллельных приложений. Для полноценной работы приложений MPI необходимо разрешить доступ.

 Запрос брандмауэра на разблокирование всех функций приложения MPI
Запрос брандмауэра на разблокирование всех функций приложения MPI

Тестирование параллельных процессов MPI

Добавим еще немного кода чтобы оживить программу и создать смысл запуска N-ого количества процессов одновременно. Каждый процесс в группе имеет свой уникальный номер, называемый рангом. Ранг процесса MPI — это целое число в диапазоне [0, N-1], где N — количество процессов в группе.

Теперь каждый запущенный процесс будет печатать свой ранг в группе, а процесс с рангом 0 дополнительно выведет количество размер группы. Функция MPI_Comm_rank(MPI_Comm comm, int *rank) позволит каждому процессу получить свой уникальный ранг.

Листинг кода программы тестирования параллельных процессов MPI:
#include 
#include "mpi.h"

int main()
{
    // Инициализация среды параллельных вычислений MPI.
    MPI_Init(NULL, NULL);

    // Получение ранга текущего процесса в группе запущенных приложений.
    // MPI_COMM_WORLD - коммуникатор, объединяющий все процессы параллельной программы.
    int rank = -1;
    MPI_Comm_rank(MPI_COMM_WORLD, &rank);

    // Получение количества процессов в группе.
    int count_processes = -1;
    MPI_Comm_size(MPI_COMM_WORLD, &count_processes);

    // Вывод ранга (идентификатора) текущего процесса.
    // Экземпляр ранга 0 дополнительно выводит 
    // количество процессов в группе.
    if (rank == 0)
    {
        std::cout
            << "This is - " << rank
            << " proccess \n"
            << "Number of processors - " << count_processes << "\n"
            << "-------------------------------\n";
    }
    else
    {
        std::cout
            << "This is - " << rank
            << " proccess \n"
            << "-------------------------------\n";
    }

    // Завершение работы среды параллельных вычислений MPI
    MPI_Finalize();

    // Приостановка консольного окна перед закрытием для 
    // тестирования программного кода в студии.
    //std::cin.get();
}

Команда запуска параллельных процессов

В составе пакетов MS-MPI устанавливается утилита mpiexec.exe, которая осуществляет запуск программ, написанных для среды MPI. По умолчанию mpiexec.exe устанавливается в каталог C:\Program Files\Microsoft MPI\Bin, путь к каталогу доступен через переменную среды MSMPI_BIN.

Командная строка для тестирования параллельных процессов открывается в папке нахождения приложения MPI. Для этого удобно в адресной строке проводника Windows, находясь в папке приложения, набрать команду cmd. Запуск N-ого количества параллельных процессов осуществляется командой:
mpiexec -n N название_файла_программы_MPI
Т. е. для запуска 8 параллельных процессов такая команда:
mpiexec -n 8 StartMPI.exe
Если не указывать опцию -n и запустить программу MPI командой:
mpiexec StartMPI.exe
то запустится количество одновременных процессов равное количеству процессоров или ядер процессора аппаратного устройства. Для справки по опциям и аргументам запуска программ MPI служит команда:
mpiexec -help

Скриншот запуска 8 параллельных процессов MPI

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

Исходник запуска программы на MPI

Архивный файл исходника содержит проект приложения параллельных вычислений MPI на языке С++. Исходник написан в среде MS Visual Studio 2022. Процессы запущенной программы в среде MPI выводят свои ранги и размер группы.

Скачать исходник

Тема: «Настройка MPI Windows, пример программы» Язык программирования С++ startmpi-vs17.zip Размер:539 КбайтЗагрузки:149