Скорость вычисления одного процессора связана с его тактовой частотой, чем частота выше, тем быстрее процессор может выполнять запущенную задачу. Но тактовая частота ограниченный ресурс и ограничения связаны не только с технологией изготовления, но и скоростью движения электронов.
MPI (Message Passing Interface) - интерфейс передачи сообщений между процессами для организации согласованного параллельного вычисления одной задачи. Стандарт MPI предполагает использование для сложных вычислений множества процессоров одновременно.
MS-MPI — это реализация стандарта интерфейса передачи сообщений компании Майкрософт для разработки и запуска параллельных приложений на платформе Windows.
Необходимо отметить, что высокопроизводительный эффект вычислений от использования параллельных программ в среде MPI проявляется только на многопроцессорных системах и компьютерах с многоядерными процессорами.
Для функционирования интерфейса передачи сообщений MPI на операционной системе Windows необходима установка пакетов MS-MPI, описание и ссылки для загрузки пакетов находятся на: Message Passing Interface Windows. Для скачивания предлагаются два файла:
msmpisetup.exe – установщик MS-MPI
msmpisdk.msi - комплект разработки программного обеспечения (SDK).
На странице загрузки размещены также и инструкции по установке MS-MPI с помощью данных файлов.
Успешную установку пакетов и создания набора переменных среды MS-MPI можно проверить в командной строке запущенной от имени администратора командой set MSMPI. При правильной установке в консоли напечатаются переменные среды и их физические пути.
Для тестирования среды для высокопроизводительных вычислений по стандарту MPI создадим проект консольного приложения на языке С++. Приложение будет инициировать функциональность MPI, выводить служебные сообщения и по завершению работы финализировать все состояния, связанные со средой MPI.
Создание проекта в Visual Studio происходит в несколько шагов: выбор типа проекта, задание имени и расположения файлов проекта на вашем компьютере. Ниже скриншоты наглядно показывают эти этапы.
Выбор типа проекта в Visual Studio Настройка имени и расположения проекта
Подключение компонуемых библиотек и заголовочных файлов происходит в диалоговом окне свойств проекта. Вызвать окно можно щелкнув на элемент Свойства контекстного меню строки имени проекта.
Доступ к заголовочным файлам прописываются на вкладке Свойства конфигурации-> Дополнительные каталоги включаемых файлов. Прописываем доступ через переменные среды для 64-разрядной и 32-разрядной версии приложения соответственно:
$(MSMPI_INC);$(MSMPI_INC)\x64 $(MSMPI_INC);$(MSMPI_INC)\x86
Вместо переменных среды можно прописывать абсолютные пути. Теперь можно добавить в исходный файл проекта С++ директиву:
#include "mpi.h"
После прописывания доступа к заголовочным файлам подключаем также компонуемые библиотеки на вкладке Свойства конфигурации-> Компоновщик-> Дополнительные зависимости (между названиями обязателен разделитель ;): msmpi.lib
и Свойства конфигурации-> Компоновщик-> Дополнительные каталоги библиотек, для 64-разрядной и 32-разрядной версии соответственно: $(MSMPI_LIB64) $(MSMPI_LIB32).
Подключение компонуемых библиотек C++ Visual Studio
Для тестового запуска напишем минимальный программный код инициализации среды параллельный вычислений MPI и ее завершения. Если всё было подключено правильно приложение запустится без ошибок.
Листинг кода первого запуска приложения MPI:
#include
#include "mpi.h"
int main()
{
// Инициализация среды параллельных вычислений MPI.
MPI_Init(NULL, NULL);
// -----
// Размещение программного кода параллельной программы.
// -----
// Завершение работы среды параллельных вычислений MPI
MPI_Finalize();
// Приостановка консольного окна перед закрытием для
// тестирования программного кода в студии.
std::cin.get();
}
При первом запуске приложения в среде высокопроизводительны вычислений MS-MPI операционная система Windows выбросит предупредительное окно брандмауэра с запросом на разрешение передачи сообщений между процессами параллельных приложений. Для полноценной работы приложений 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 на языке С++. Исходник написан в среде MS Visual Studio 2022. Процессы запущенной программы в среде MPI выводят свои ранги и размер группы.
Скачать исходник
Тема: «Настройка MPI Windows, пример программы»
startmpi-vs17.zip
Размер:539 КбайтЗагрузки:245