Книги про параллельные вычисления с использованием MPI

Книги про параллельные вычисления с использованием MPI

Начиная с этого понедельника в течение двух недель у меня начинаются занятия в Летней суперкомпьютерной академии МГУ, куда меня послали на работе. В качестве направления (на сайте это называется треком), по которому я буду учиться, выбрал параллельное программирование с использованием MPI (Message Passing Interface) и OpenMP. Судя по всему, изначально подразумевалось, что те, кто будет проходить обучение в этой академии, уже должны уметь пользоваться этими библиотеками, а на лекциях и практике будут рассказывать более углубленные вещи. По крайней мере в прошлые годы для поступления в эту академию нужно было проходить тестирование, которое в этом году отменили.

До сих пор об MPI и OpenMP я имел представление только на уровне «да, есть такие библиотеки», хотя некоторые исходники с использованием OpenMP еще видел издалека и представлял, что распараллеливание происходит с помощью команд #pragma… В общем, чтобы не совсем опозориться, где-то месяц назад начал судорожно читать книги про OpenMP и особенно MPI. OpenMP — это все-таки более простая вещь, если есть опыт программирования обычных многопоточных приложений, а вот MPI мозг выворачивает наизнанку. Если с использованием OpenMP программу можно постепенно из последовательной сделать параллельной, то при использовании MPI программу нужно изначально писать с расчетом на эту библиотеку.

Так что основной упор за последний месяц сделал именно на MPI, который не особо полезен на обычных настольных компьютерах, но без него не обойтись при расчетах на суперкомпьютерах с распределенной памятью, когда память не одна на все процессоры, а каждый процессор может обращаться к своему блоку памяти. Поэтому в MPI, в отличие от OpenMP, распараллеливание происходит не по потокам (знаю, что их правильнее называть нитями, но я уже слишком привык к такому неправильному переводу слова «thread», распространенному в нашей литературе), а по процессам. Программа, написанная с использованием MPI — это по сути несколько одновременно запущенных программ (или одинаковых, или разных), обменивающихся между собой данными, и задача программиста описать, какой процесс, что делает.

Возвращаясь к книжкам. После того, как стало ясно, что мне предстоит, я скачал (за одно это слово пока еще не расстреливают? А то я не успеваю следить за потоком незамутненного сознания наших депутатов) несколько книг:

  • А. С. Антонов — Параллельное программирование с использованием технологии MPI.
  • Г. И. Шпаковский, Н. В. Серикова — Программирование для многопроцессорных систем в стандарте MPI.
  • В. Д. Корнеев — Параллельное программирование в MPI.

Не знаю насколько это удивительно, но все эти книги изданы в различных университетах: Московском, Минском и Новосибирском (точнее, в институте вычислительно математики и математической геофизики).

Первые две книги мне понравились, а последняя книга Корнеева написана просто ужасно, понять там что-то практически невозможно, иногда было такое ощущение, что читаешь перевод Google Translate. Читаешь предложение по словам, и не понимаешь, что имел в виду автор, используя то или иное слово. В общем, осилил я «Параллельное программирование в MPI» процентов на 20 и бросил, поэтому дальше я ее упоминать не буду. Зато книги Антонова и Шпаковского с Сериковой отлично дополняют друг друга.

Книга Антонова «Параллельное программирование с использованием технологии MPI» — это скорее учебная методичка на 70 страниц с описанием того, как использовать MPI (как компилировать программу, как ее потом запускать), после чего идет описание основных функций. Общее представление об MPI она дает хорошее, написана понятно.

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

Одновременно и плюс, и минус этой книжки — это примеры, которые с одной стороны очень лаконичны и показывают суть описываемой функции, но с другой стороны несколько оторваны от реальных вычислений, в них просто гоняются туда-сюда сообщения без каких-либо полезных вычислений, которые нужно ускорить. Лично я это считаю это скорее плюсом для книжки, которая должна показать, как пользоваться MPI, не отвлекаясь на какую-то обработку, которая не относится к библиотеке. Жаль только, что в книге нет где-нибудь в конце более жизненных примеров, чтобы посмотреть, как в реальных программах используют MPI с точки зрения архитектуры программы.

Другой момент, который немножко напрягал при чтении этой книги — это то, что все примеры и синтаксис функций написаны с использованием Фортрана, поэтому иногда возникали сомнения, как использовать ту или иную функцию в C, но если есть под рукой документация, то это не проблема.

Из-за краткости, эту книгу полезно держать под рукой в качестве шпаргалки по использованию MPI, если не смущает Фортран.

Книгу Шпаковского Сериковой «Программирование для многопроцессорных систем в стандарте MPI» я читал уже после книги/методички Антонова, и она во многом прояснила некоторые моменты, на которые не обращал внимания до этого.

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

Примеры в этой книге уже более приближены к практике, а отдельная глава посвящена решению конкретных задач — перемножению матриц, решению дифференциальных уравнений, подбор ключа для алгоритма шифрования DES (код для шифрования/расшифровки не приводится, но зато очень доходчиво описывается сам алгоритм) и решение линейных алгебраических уравнений. Понравилось, что перед каждой задачей очень понятно описывается теория, так что при чтении программы не возникает ощущения, что читаешь магическое заклинание, которое не понятно как и почему работает. И вообще программы разбиты на функции так, чтобы их можно было легко понять.

Примеры в этой книге написаны где-то на Фортране, а где-то на C, при этом в описании функций MPI приводится ее синтаксис сразу для двух этих языков программирования.

В целом с помощью этих книг можно хорошо разобраться с MPI, жаль только, что они написаны уже достаточно давно (2004 и 2002 года) и описывают стандарт MPI 1.1, говоря, что стандарт MPI 2 еще никто не реализовал. Интересно было бы почитать более современные книги, уж за 10 лет должно что-то измениться.

PS. Вы можете подписаться на новости сайта через RSS, Группу Вконтакте или Канал в Telegram.

Пожалуйста, оцените запись

УжасноПлохоТак себеХорошоОтлично (Количество голосов: 5, средняя оценка: 5,00)
Загрузка...

Leave a comment

Subscribe without commenting