Начиная с этого понедельника в течение двух недель у меня начинаются занятия в Летней суперкомпьютерной академии МГУ, куда меня послали на работе. В качестве направления (на сайте это называется треком), по которому я буду учиться, выбрал параллельное программирование с использованием MPI (Message Passing Interface) и OpenMP. Судя по всему, изначально подразумевалось, что те, кто будет проходить обучение в этой академии, уже должны уметь пользоваться этими библиотеками, а на лекциях и практике будут рассказывать более углубленные вещи. По крайней мере в прошлые годы для поступления в эту академию нужно было проходить тестирование, которое в этом году отменили.
До сих пор об MPI и OpenMP я имел представление только на уровне «да, есть такие библиотеки», хотя некоторые исходники с использованием OpenMP еще видел издалека и представлял, что распараллеливание происходит с помощью команд #pragma… В общем, чтобы не совсем опозориться, где-то месяц назад начал судорожно читать книги про OpenMP и особенно MPI. OpenMP — это все-таки более простая вещь, если есть опыт программирования обычных многопоточных приложений, а вот MPI мозг выворачивает наизнанку. Если с использованием OpenMP программу можно постепенно из последовательной сделать параллельной, то при использовании MPI программу нужно изначально писать с расчетом на эту библиотеку.
Так что основной упор за последний месяц сделал именно на MPI, который не особо полезен на обычных настольных компьютерах, но без него не обойтись при расчетах на суперкомпьютерах с распределенной памятью, когда память не одна на все процессоры, а каждый процессор может обращаться к своему блоку памяти. Поэтому в MPI, в отличие от OpenMP, распараллеливание происходит не по потокам (знаю, что их правильнее называть нитями, но я уже слишком привык к такому неправильному переводу слова «thread», распространенному в нашей литературе), а по процессам. Программа, написанная с использованием MPI — это по сути несколько одновременно запущенных программ (или одинаковых, или разных), обменивающихся между собой данными, и задача программиста описать, какой процесс, что делает.
Возвращаясь к книжкам. После того, как стало ясно, что мне предстоит, я скачал (за одно это слово пока еще не расстреливают? А то я не успеваю следить за потоком незамутненного сознания наших депутатов) несколько книг:
- А. С. Антонов — Параллельное программирование с использованием технологии MPI.
- Г. И. Шпаковский, Н. В. Серикова — Программирование для многопроцессорных систем в стандарте MPI.
- В. Д. Корнеев — Параллельное программирование в MPI.
Читать далее ‘Книги про параллельные вычисления с использованием MPI’ »