'

Параллельное программирование для ресурсоёмких задач численного моделирования в физике

Понравилась презентация – покажи это...





Слайд 0

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


Слайд 1

Лекция № 5


Слайд 2

Содержание лекции Общие рекомендации по программированию с OpenMP Общие принципы сеточных методов


Слайд 3

Зависимость по данным Для эффективного распараллеливания необходимо обеспечить независимость по данным между петлями (итерациями) циклов операторов do/for Если зависимости по данным между петлями циклов отсутствуют, то они называются независимыми по данным Часто зависимости по данным между петлями циклов могут быть исключены с помощью модификации алгоритмов Пример рекурсии с зависимостью по данным Элементарное распараллеливание


Слайд 4

Зависимость по данным Reduction Распараллеливание осуществляется с помощью применения конструкции reduction к циклу do


Слайд 5

Зависимость по данным Циклы с условными выходами не распараллеливаются Вложенные циклы: в следующем примере Распараллеливание возможно только на самом верхнем уровне по k


Слайд 6

Проблемы отладки OpenMP программ: условия состязательности (race conditions) При работе программ с общей памятью возникает ряд специфических ошибок, одна из которых связана с так называемыми условиями состязательности (race conditions) Эти ошибки состоят в непредсказуемом времени завершении параллельных потоков и возникновении в результате этого непредсказуемых результатов вычислений Пример Результат в этом примере зависит от того как и в какой последовательности выполняются параллельные потоки


Слайд 7

Проблемы отладки OpenMP программ: мертвая блокировка (deadlock) В процессе выполнения программ с общей памятью возможна ситуация, когда поток ожидает освобождения доступа к объекту, который никогда не будет открыт В следующем примере видно, что такая ситуация возникает, когда объект А заблокирован в одном потоке, а объект В в другом В случае, если оба объекта заблокированы в одном потоке, то возникает условие состязательности Пример


Слайд 8

Проблемы отладки OpenMP программ: некоторые дополнительные опасные ситуации Используемые в программах библиотеки должны быть безопасны с точки зрения потокового выполнения. Стандартные библиотеки всегда удовлетворяют этому требованию Следует иметь ввиду, что операции ввода/вывода в параллельных потоках завершаются в непредсказуемом порядке Следует внимательно прослеживать пересечение в параллельных потоках переменных типа private с глобальными переменными Следует тщательно отслеживать однозначность значений переменных в общей памяти. Для этого при необходимости следует пользоваться функцией FLUSH Следует помнить, что предложение NOWAIT удаляет неявные барьеры (barriers) Средства отладки OpenMP программ: Intel Thread Checker и Intel VTune Performance Analyzer (работает под Windows и Linux и позволяет вести отладку с Windows-компьютера на удаленных Linux кластерах)


Слайд 9

Настройка программ в OpenMP: основные стратегии Если есть возможность, то сперва следует воспользоваться средством авто-распараллеливания программы Для нахождения наиболее трудоемких участков программы следует воспользоваться возможностью профилирования (profiling) Затем следует добавить в программу инструкции OpenMP для распараллеливания наиболее затратных участков программы В случае неэффективного распараллеливания конструкций do/for следует учесть Высокую стоимость инициализации параллельных потоков (порядка 1000 операций деления) Неэффективность распараллеливания небольших циклов Несбалансированность потоков Многочисленные ссылки к переменным в общей памяти Ограниченный объем кэша Высокую стоимость операции синхронизации Высокую стоимость доступа к удаленной общей памяти (на NUMA-компьютерах) При распараллеливании вложенных циклов следует сперва распараллеливать внешние петли При распараллеливании циклов следует иметь в виду, что петли циклов по объему вычислений могут быть зачастую “треугольными” и порождать несбалансированные параллельные потоки. Чтобы избежать несбалансированности при работе программы следует использовать инструкцию schedule


Слайд 10

Настройка программ в OpenMP: пример распараллеливания Исходная программа Параллельная программа


Слайд 11

Настройка программ в OpenMP: автоматическое распараллеливание Основные современные языки программирования имеют возможности автоматического распараллеливания программ в OpenMP: –openmp –parallel – par_report[0|1|2|3] –par_threshold[x], (0<=x<=100) В автоматическом режиме распараллеливаются только циклы По результатам автоматического распараллеливания транслятор генерирует сообщения Следует проанализировать сообщения транслятора и понять почему и по каким причинам некоторые циклы не распараллелены


Слайд 12

Настройка программ в OpenMP: иерархия памяти Современные параллельные системы имеют следующую иерархию памяти Регистры Кэш 1-го уровня Кэш 2-го уровня Кэш 3-го уровня Локальную память Удаленную память (с доступом через interconnect) Время доступа к памяти существенно возрастает при движении по иерархии сверху вниз В связи с этим становиться актуальной задачи эффективности загрузки кэша и регистров, а также минимизация доступа к удаленной памяти Для более эффективной загрузки кэша следует принимать дополнительные меры по выравниванию строк (в C/C++) или столбцов (в FORTRAN) массивов Для более эффективного распараллеливания циклов следует по возможности обеспечить независимость петель вложенных циклов


Слайд 13

Настройка программ в OpenMP: настройка кэша Для эффективного использования кэш памяти рекомендуется использовать многомерные массивы в одномерном виде Вложенные циклы следует модифицировать так, чтобы обеспечить последовательный быстрый доступ к элементам массива без скачков по индексам На NUMA (non-uniform memory access) платформах важно учитывать следующие особенности Где запущены потоки Какие данные загружены в локальную память Стоимость доступа к удаленной памяти Для NUMA платформ вышеперечисленные возможности сильно зависят от архитектуры систем OpenMP предоставляет следующие возможности по управлению потоками Запуск потока на определенном процессоре Размещение данных в определенном месте памяти Эти задачи решаются с помощью системных инструкций, которые могут быть различными на различных платформах и зависеть от загруженного системного программного обеспечения


Слайд 14

Общие принципы сеточных методов


Слайд 15

Параллельные методы решения дифференциальных уравнений в частных производных например


Слайд 16

Принципы распределения данных Ленточное разделение области расчетов


Слайд 17

Эффект сериализации (serialization) Причина в интенсивной синхронизации


Слайд 18

Эффект состязания потоков (race condition) Возможность неоднозначности вычислений


Слайд 19

Проблема взаимоблокировки


Слайд 20

Исключение неоднозначности вычислений Схема чередования обработки четных и нечетных строк Шахматное разбиение


Слайд 21

Волновые схемы параллельных вычислений методов волновой обработки данных (wavefront или hyperplane methods)


Слайд 22

Организация волны вычислений при ленточной схеме разделения данных


Слайд 23

Блочное представление сетки расчетов Увеличение эффективности использования кэша


Слайд 24


×

HTML:





Ссылка: