Что нужно знать о вычислениях с распределённой памятью

В предыдущей части нашей серии о гибридном моделировании мы рассмотрели базовые принципы расчётов с совместно используемой памятью. В этой статье мы разберём другую составляющую гибридных параллельных вычислений, а именно — вычисления с использованием распределённой памяти.

Процессы и кластеры

В предыдущей части мы узнали, что вычисления с совместной памятью — это использование потоков для разделения задачи на несколько небольших частей, которые могут выполняться параллельно в каждом узле кластера. Память разделена между всеми потоками, отсюда и название — совместно используемая память. Напротив, распараллеливание в вычислениях с распределённой памятью осуществляется через несколько процессов, разделённых на потоки. Каждому процессу выделяется индивидуальный объём памяти, к которому остальные не имеют доступа. Все эти процессы, распределённые между несколькими компьютерами, процессорами и/или ядрами, являются небольшими частями, которые вместе составляют параллельную программу с распределённой памятью.

Проще говоря, в этом случае память используется не совместно, а распределяется (ознакомьтесь с диаграммой в первой части серии о Гибридном Моделировании).

Чтобы лучше понимать, почему была разработана концепция распределённых вычислений, необходимо иметь представление о базовых принципах кластерных расчётов. Память и производительность компьютера ограничены его характеристиками. Чтобы повысить производительность и увеличить объём доступной памяти, учёные начали объединять несколько компьютеров в так называемые кластеры.

Разделение задачи

Идея физического распределения процессов между компьютерами в кластере привела к новым сложностям при распараллеливании. Каждую задачу необходимо разбить на части. Следовательно, данные необходимо разделить и распределить на соответствующие процессы. Рассмотрим задачу матричного типа, в которой выполняются операции над огромным массивом. Этот массив можно разделить на блоки (разделённые либо частично совмещённые). Каждый процесс будет обрабатывать свой собственный блок. Разумеется, операции и данные по каждому блоку могут быть связаны между собой.

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

Цель состоит в том, чтобы максимально локализировать данные и операции, чтобы поддерживать как можно более низкий уровень связи.

Speeding up communications distributed memory computing copy Что нужно знать о вычислениях с распределённой памятью
Количество сообщений, необходимых в случае «от всех ко всем» может быть описано полным графом. Увеличение числа сообщений квадратично по отношению к числу используемых вычислительных узлов.

Ускорение вычислений или решение более сложных задач

Ученый, который работает на компьютерном кластере, может извлечь выгоду из дополнительных ресурсов двумя способами.

Во-первых, с увеличенным объёмом памяти и большей вычислительной мощностью можно рассчитать более сложную задачу за такой же промежуток времени за счёт добавления дополнительных процессов, сохраняя при этом рабочую нагрузку (то есть размер подзадачи и количество вычислений) на каждый процесс. Это называется слабым масштабированием.

Во-вторых, можно оставить размер задачи как есть, но распределить его подзадачи для большего числа процессов. В этом случае каждый процесс будет иметь дело с меньшей рабочей нагрузкой и может быстрее выполнять свои задачи. В оптимальном случае уменьшение времени вычисления задачи фиксированного размера, распределённой по P процессам, будет в P раз. Вместо одного расчета будет сделано P циклов моделирования за такую же единицу времени (час, день и т.д.). Такой метод называется сильным масштабированием.

Иными словами, вычисления с распределённой памятью помогают вам решать более сложные задачи за такой же период времени либо быстрее рассчитывать задачи фиксированного размера.

Проблема передачи данных

Давайте теперь более подробно рассмотрим передачу сообщений. Откуда процессы знают, что делают другие части программы? Мы уже знаем, что между собой процессы напрямую обмениваются информацией и переменными. Это, в свою очередь, приводит к некоторым недостаткам, особенно в отношении времени, которое требуется для отправки по сети.

Чтобы лучше понять принцип работы, опять вспомним аналогию с воображаемым конференц-залом, которую мы рассматривали в заметке про совместно используемую память.

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

В новой аналогии каждый шаг системы связи может быть серьёзной проблемой ("узким горлышком"), замедляющей общий процесс. Если бы мы могли сократить количество этих шагов, которые необходимы (например, ускорить взаимодействие, установив телефоны в офисы или используя более быструю сеть), то стало бы возможным тратить меньше времени на ожидание сообщения и больше на само численное моделирование. В вычислениях с распределённой памятью проблемным местом является метод передачи электронных данных между узлами. Современный стандарт для обеспечения высокой пропускной способности и низкой задержки — это Infiniband (Высокоскоростная коммутируемая компьютерная сеть). Она позволяет передавать сообщения намного быстрее, чем стандарт ethernet.

Зачем использовать вычисления с распределённой памятью?

Вычисления с распределённой памятью имеют ряд преимуществ. Одна из причин такая же, как и в случае с совместно используемой памятью. При добавлении дополнительных ядер, сокетов или узлов в кластере можно запускать всё больше и больше процессов и использовать преимущества дополнительных ресурсов. Можно использовать полученную вычислительную мощность для более быстрого моделирования.

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

Number of simulations graph Что нужно знать о вычислениях с распределённой памятью
Диаграмма количества циклов моделирования в день в зависимости от числа процессов для модели глушителя, которая изображена ниже. Использовалась сеть стандарта ethernet со скоростью 1 Гб/с. Первые четыре процесса выполняются на одном компьютере, после чего используется сеть ethernet. Небольшая разница в количестве расчетов за день между 4 и 5 процессами возникает из-за медленной передачи данных по сети даже для параметрической задачи. Параметры вычислительного узла: Intel® Xeon® E5-2609 и 64 Гб DDR3 @1600 МГц.

Однако, мы должны помнить и про ограничения. В случае вычислений с распределённой памятью также существуют задачи, для которых этот метод не подходит. На этот раз нам необходимо учитывать объём пересылаемых данных, который требуется для решения задачи.

Рассмотрим, к примеру, нестационарную задачу, в которой огромное количество частиц взаимодействуют таким образом, что после каждого следующего шага все частицы должны иметь информацию друг о друге. Полагая, что каждая частица рассчитывается собственным процессом, количество передаваемых данных в таком примере может быть описано полными графами (изображёнными выше), а число переданных сообщений на итерацию быстро растёт по мере увеличения частиц и процессов. Напротив, параметрическое исследование (parametric sweep), в котором значения параметров могут вычисляться независимо друг от друга, практически не требует передачи данных.

Muffler model Что нужно знать о вычислениях с распределённой памятью
Модель, для которой было проанализировано ускорение вычислений за счет распараллеливания. Это небольшая параметрическая модель (750.000 степеней свободы) использует прямой решатель PARDISO. Доступна в Галерее моделей и приложений.

Как COMSOL использует преимущества вычислений с распределённой памятью

Пользователи, у которых есть доступ к плавающей сетевой лицензии (floating network license — FNL) имеют возможность использовать функцию вычислений с распределённой памятью в COMSOL на любом персональном многоядерном компьютере, на кластере или даже в облаке. Решатели в программном обеспечении COMSOL могут использоваться в распределённом режиме с настройками по умолчанию (без каких-либо дополнительных регулировок). Следовательно, вы можете проводить расчеты более сложных моделей за такое же количество времени или ускорить решение при фиксированном размере задачи. В любом случае COMSOL Multiphysics поможет вам повысить производительность исследований.

Функционал по автоматическому распределению также очень полезен при параметрических исследованиях. В этом случае вы можете автоматически распределять расчёты, соответствующие разным значениями параметров, по всем процессам, доступным для использования при запуске COMSOL Multiphysics. Поскольку отдельные расчёты в таком исследовании могут быть проведены независимо друг от друга, такой тип вычислениий называется «естественно параллельной задачей». В этом случае ускорение с хорошим сетевым соединением соответствует числу процессов.

Мы рекомендуем ознакомиться со справочным руководством COMSOL, в котором подробно описаны настройки для вычислений с распределённой памятью. В нём вы найдёте конкретные примеры использования COMSOL в распределённом режиме. Также можете обратиться к пользовательскому руководству вашего кластера для высокопроизводительных вычислений, чтобы получить более подробную информацию о запуске расчетных задач.

В следующей части мы углубимся в теорию гибридного моделирования. Следите за обновлениями!


Загрузка комментариев...

Темы публикаций


Теги

3D печать Cерия "Гибридное моделирование" Введение в среду разработки приложений Видео Волновые электромагнитные процессы Глазами пользователя Графен Интернет вещей Кластеры Моделирование высокочастотных электромагнитных явлений на различных пространственных масштабах Модуль AC/DC Модуль CFD Модуль MEMS Модуль Акустика Модуль Геометрическая оптика Модуль Механика конструкций Модуль Нелинейные конструкционные материалы Модуль Оптимизация Модуль Плазма Модуль Радиочастоты Модуль Роторная динамика Модуль Химические реакции Охлаждение испарением Пищевые технологии Рубрика Решатели Серия "Геотермальная энергия" Серия "Конструкционные материалы" Серия "Электрические машины" Серия “Моделирование зубчатых передач” Сертифицированные консультанты Термовязкостная акустика Технический контент Указания по применению модуле Теплопередача модуль Вычислительная гидродинамика физика спорта