Книга Мэттью Фаулера «Asyncio и конкурентное программирование на Python»

Недавно в издательстве ДМК вышла книга Мэттью Фаулера «Asyncio и конкурентное программирование на Python».

Как известно, у интерпретатора Python из-за наличия GIL (Global Interpreter Lock) имеются достаточно серьезные ограничения для полноценного использования всех ядер процессора. Для сложных вычислительных задач можно запускать несколько процессов со своим интерпретатором Python, каждый из которых обрабатывал бы свой собственный кусок данных, но создание нового процесса — достаточно тяжелая операция, и если ее делать часто, то производительность будет проседать. В то же время при некоторых низкоуровневых операциях (в основном это ввод-вывод) возможно написать код, который бы выполнялся параллельно, и именно в этом основная идея асинхронного программирования. Использование асинхронного программирования — это достаточно сложная область в любом языке программирования, а в Python все усложняется еще и тем, что нужно понимать, когда асинхронное программирование может дать какой-то выигрыш.

Книга Мэттью Фаулера рассматривает асинхронное и параллельное программирование (объединенные под одним термином «конкурентное программирование», что показывает аккуратность автора в терминологии) с разных сторон. Здесь будет рассказано и про асинхронщину, и про многопоточноть (в значении multithreading), и про прогопроцессность. Все это в конце концов рассматривается под тем углом, как для всего этого дела может помочь стандартная библиотека asyncio, которая в первую очередь ассоциируется именно с асинхронным программированием, хотя она позволяет использовать также пулы потоков и процессов.

Читать далее ‘Книга Мэттью Фаулера «Asyncio и конкурентное программирование на Python»’ »

Летняя суперкомпьютерная академия на факультете ВМК МГУ

logo

В прошлом посте я сказал о том, что у меня начинаются занятия в Летней суперкомпьютерной академии на факультете Вычислительной Математики и Кибернетики (ВМК) в МГУ, связанные с параллельными вычислениями. Вчера состоялось закрытие этого мериприятия, дале я расскажу о том, что там было в течение этих двух недель.

Занятия были разделены на две части. На первой неделе нам читали лекции по самым разным темам, касающихся параллельных вычислений, суперкомпьютеров и их применения. Рассказывали про архитектуры суперкомпьютеров, в том числе тех, которые установлены в МГУ. Была общая теория параллельных вычислений, где говорили о том, что можно сделать с алгоритмом для того, чтобы разорвать связи по данным, чтобы какие-то массивы можно было бы обрабатывать параллельно. Много говорили про Top500 — мировой рейтинг суперкомпьютеров, тем более, что буквально за несколько дней до начала академии появилась новая редакция этого рейтинга, где на первое место выскочил китайский суперкомпьютер Tianhe-2 с тремя миллионами ядер процессора (если быть точнее, то 3 120 000 ядер).

Несколько докладов было на тему того, когда же, наконец, будет достигнута производительность в один экзаплоп/с (1018 операций с плавающей точкой в секунду), а также о том, какие для этого проблемы надо решать (особенно это касается эноргопотребления). Tianhe-2 на сегодняшний день имеет производительность 33862.7 терафлоп/с, и при этом уже потребляет почти 18 МВт мощности, что равносильно потреблению какого-нибудь села или нескольких высотных жилых домов. Что экзафлоп будет достигнут в ближайшие годы никто не сомневается, споры идут только по поводу того, будет ли достигнута эта величины до 2020 года (называют года 2018-2019) или все-таки после (2021 — 2022 год).

Читать далее ‘Летняя суперкомпьютерная академия на факультете ВМК МГУ’ »

Книги про параллельные вычисления с использованием 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.

Читать далее ‘Книги про параллельные вычисления с использованием MPI’ »