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