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

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

Многоядерность и многопоточность

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

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

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

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

Ниже показана диаграмма увеличения количества вычислений в зависимости от числа ядер на компьютере в COMSOL Multiphysics. Время расчёта значительно уменьшается, когда задействованы все 8 ядер. Очевидным преимуществом является то, что вы можете запускать больше расчётов за такое же количество времени. Это приводит к приросту производительности. Для выбранной модели ниже производительность возросла в 6.5 раз на восьмиядерном компьютере.

Количество проводимы расчетов в день в зависимости от числа ядер
Диаграмма количества циклов моделирования в день в зависимости от числа ядер для модели высокочастотного нагрева, которая изображена ниже. Параметры вычислительного сервера: два процессора Intel® Xeon® E5-2609 и 64 Гб DDR3 @ 1600 МГц.

Пример расчёта модели высокочастотного нагрева в режиме вычислений с совместно используемой памятью
Модель, для которой было проанализировано ускорение вычислений за счет распараллеливания. Красно-белая шкала показывает градиент температуры в градусах Цельсия, а зелёными стрелками изображено магнитное поле. Модель содержит почти 1.4 миллиона степеней свободы. Для расчёта был выбран прямой решатель PARDISO, требующий в данном случае 52 Гб оперативной памяти. Обратите внимание, что в модели присутствует мультифизическая связь. Более простая версия модели доступна в Галереи приложений.

Что такое совместно используемая память?

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

Чтобы было понятней, вы можете представить себе конференц-зал со столом, вокруг которого происходит заседание. Вся информация, необходимая для встречи, разложена перед участниками на столе. Каждый участник может читать или писать на любом документе, на котором пожелает. Следовательно, вся информация находится в общем доступе, в то время, как каждый участник может выбрать собственную часть задачи.

Эта аналогия очень упрощённая, зато даёт нам общее представление о том, как работает совместная память. На самом деле, существуют гораздо более сложные процессы, о которых нужно помнить при работе с совместно используемой памятью. Очевидно, что необходимо использовать некоторые механизмы синхронизации. Также может произойти «конфликт ресурсов», когда, например, один документ понадобится сразу 50 участникам. Это первое объяснение того, почему ускорение на вышеприведённом рисунке постепенно уменьшается и, в конечном счёте, достигнет насыщения в определённой точке.

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

Зачем применять совместно используемую память?

Как говорилось ранее в статье, распараллеливание — основной способ ускорения вычислений. Следовательно, программисту необходимо определить, как главный процесс может быть распределён между потоками. Это справедливо в случае задач, которые могут выполняться параллельно без каких-либо взаимосвязей.

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

Однако, есть задачи и алгоритмы, для которых трудно или даже невозможно использовать метод параллельных вычислений. Одним из таких примеров является последовательность Фибоначчи: F(n) = F(n-1) + F(n-2), являющаяся нераспараллеливаемой и рекурсивной задачей, в которой каждый последующий шаг зависит от предыдущего. Есть ещё несколько примеров, для которых важен порядок расчёта и, следовательно, не эффективно параллельное вычисление и многоядерность. Например, нестационарные задачи (во временной области) и исследования взаимосвязанного типа (использующие решение предыдущего шага в качестве начальных данных для следующего, например, нелинейный рэмпинг параметра).

Скорее всего лишь немногие из нас целыми днями используют компьютеры и программное обеспечение для расчёта последовательности Фибоначчи. Зато решение системы линейных уравнений, которое необходимо для моделирования методом конечных элементов, является, в значительной степени, распараллеливаемой задачей. Поэтому почти каждая задача, в которой необходимо рассчитать матрицу, выигрывает от использования многоядерных компьютеров, даже если эта матрица является частью более сложной задачи, такой как зависящий от времени расчёт, например. COMSOL Multiphysics в основном в большинстве моделей рассчитывает матрично-векторные операции, в этом случае есть преимущества при вычислениях с совместно используемой памятью на многоядерных процессорах. Для указанных ранее нестационарных задач (во временной области) и исследований взаимосвязанного типа каждый отдельный временной и параметрический шаг может быть выполнен в параллельном режиме. Для масштабируемости таких типов исследований лежащая в основе физика должна иметь большое количество степеней свободы.

Более того, вы должны иметь ввиду, что общее ускорение вычислений ограничивается частью алгоритма, которую нельзя распараллелить. Это наблюдение хорошо известно, как закон Амдала. Экстраполируя часть, которую нельзя распараллелить в вышеприведённой модели, мы видим, что даже на машине с бесконечным числом ядер ускорение не может превысить значения в 30 раз (что все равно впечатляет!). Результатом будет примерно 60 расчетов в день.

Как COMSOL Multiphysics использует преимущества многоядерного компьютера

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

Тем не менее бывают случаи, когда вам необходимо оставить несколько ядер для других приложений и задач. В таком случае вы можете изменить количество ядер, использующихся в COMSOL Multiphysics, пройдя в меню Preferences (Настройки) и Multicore and Cluster Computing (Многоядерные и кластерные вычисления). Более того, в гибридных параллельных вычислениях может быть полезно задавать ряд специальных настроек в гидридном режиме расчетов.

В последующих публикациях блога мы подробнее рассмотрим эту тему.

Дополнительные ресурсы


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

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


Теги

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