Скачать презентацию
Идет загрузка презентации. Пожалуйста, подождите
Презентация была опубликована 11 лет назад пользователемВероника Фролова
1 Е.Ю. Алексеева Механико-математический факультет Южно-Уральского государственного университета
3 Содержание лекции n Основные принципы OpenMP (продолжение) n Синхронизация в OpenMP n Дополнительные возможности OpenMP n Обзор Cluster OpenMP Механико-математический факультет Южно-Уральского государственного университета
4 Использование потоков (общее адресное пространство) Пульсирующий (fork-join) параллелизм Главный поток по мере необходимости инициирует параллельные потоки Параллелизм включается в обычную последовательную программу, которая сохраняет свою работоспособность в обычном режиме Принцип организации Механико-математический факультет Южно-Уральского государственного университета
5 Разделение работы (work-sharing constructs) Do/for - распараллеливание циклов (параллелизм данных) Sections - функциональное распараллеливание Single - директива для указания последовательного выполнения кода Механико-математический факультет Южно-Уральского государственного университета
6 Совместимость директив и их параметров Механико-математический факультет Южно-Уральского государственного университета
7 Переменные окружения OpenMP OMP_NUM_THREADS - определяет число нитей для исполнения параллельных областей приложения. OMP_SCHEDULE - определяет способ распределения итераций в цикле, если в директиве DO использовано предложение SCHEDULE(RUNTIME). OMP_DYNAMIC - разрешает или запрещает динамическое изменение числа нитей. OMP_NESTED - разрешает или запрещает вложенный параллелизм. Пример Механико-математический факультет Южно-Уральского государственного университета
8 Задание переменных окружения с помощью функций runtime OpenMP (void) omp_set_num_threads(int num_threads) – задает число потоков в области параллельных вычислений int omp_get_num_threads() – возвращает количество потоков в текущий момент int omp_get_max_threads() – возвращает максимальное количество потоков, которое может быть возвращено функцией omp_get_num_threads int_omp_get_thread_num() – возвращает номер потока от 0 до количество потоков - 1 int omp_get_num_procs() – возвращает количество процессоров доступных программе (int/logical) omp_in_parallel() – возвращает TRUE из параллельной области программы и FALSE из последовательной (void) omp_set_dynamic( TRUE | FALSE ) – определяет или отменяет динамический режим (int/logical) omp_get_dynamic() – возвращает TRUE, если режим динамический, и FALSE в противном случае (void) omp_set_nested( TRUE | FALSE ) – определяет или отменяет вложенный режим для параллельной обработки (int/logical) omp_get_nested() – возвращает TRUE, если режим вложенный, и FALSE в противном случае Механико-математический факультет Южно-Уральского государственного университета
9 Синхронизация в OpenMP Типы синхронизации в OpenMP critical atomic barrier master ordered flush Механико-математический факультет Южно-Уральского государственного университета
10 Синхронизация в OpenMP: тип critical Поток описанный как critical section выполняется в монопольном режиме процессора Синтаксис C/C++ #pragma omp critical [ (name) ] structured_block FORTRAN !$omp critical [ (name) ] structured_block !$omp end critical [ (name) ] Разные критические секции независимы, если они имеют разные имена Не поименованные критические секции относятся к одной и той же секции Механико-математический факультет Южно-Уральского государственного университета
11 Синхронизация в OpenMP: тип atomic Предотвращает прерывания доступа, чтения и записи данных, находящихся в общей памяти, со стороны других потоков Синтаксис C/C++ #pragma omp atomic statement FORTRAN !$omp atomic statement Является альтернативой reduction Применяется только для операторов следующих непосредственно за описанием Очень дорогая операция с точки зрения временных затрат при выполнении программы Выполняется автоматически по умолчанию при завершении циклов в параллельном режиме. Исключается командой nowait Механико-математический факультет Южно-Уральского государственного университета
12 Синхронизация в OpenMP: тип barrier Устанавливает режим ожидания завершения работы всех потоков по достижению barrier Синтаксис C/C++ #pragma omp barrier FORTRAN !$omp barrier Механико-математический факультет Южно-Уральского государственного университета
13 Синхронизация в OpenMP: тип master В этом случае следующий за описанием блок выполняется только в главном потоке. Остальные потоки обходят этот блок без неявного режима barrier Синтаксис C/C++ #pragma omp master structured_block FORTRAN !$omp master structured_block !$omp end master Механико-математический факультет Южно-Уральского государственного университета
14 Синхронизация в OpenMP: тип ordered В этом случае в следующем за описанием блоке циклы выполняются в порядке, как в последовательной программе Синтаксис C/C++ #pragma omp ordered structured_block FORTRAN !$omp ordered structured_block !$omp end ordered Механико-математический факультет Южно-Уральского государственного университета
15 Синхронизация в OpenMP: тип flush В этом случае значения всех общих переменных потоков должны быть сброшены в память Синтаксис C/C++ #pragma omp flush(var1 [, var2]…) FORTRAN !$omp flush(var1 [, var2]…) Механико-математический факультет Южно-Уральского государственного университета
16 Дополнительные возможности Механико-математический факультет Южно-Уральского государственного университета
17 Дополнительные возможности: миграция данных с помощью директивы threadprivate в Fortran Директива threadprivate позволяет сохранять данные параллельных потоков на протяжении всей программы Для этого необходимо поместить переменные в common блок, а затем описать этот блок с помощью директивы threadprivate В процессе миграции сохраняется соответствие между значениями мигрирующих переменных и номерами потоков Синтаксис FORTRAN !$omp threadprivate (/cb/[,/cb2/…]) Механико-математический факультет Южно-Уральского государственного университета
18 Дополнительные возможности: миграция данных с помощью директивы threadprivate в С/С++ Синтаксис С/С++ #pragma omp threadprivate (cb1 [, cb2]…) Элементами списка не могут быть ссылки или переменные не полностью определенные, а также адреса констант Нельзя использовать элементы списка в всех директивах OpenMP кроме copyin, schedule и if Нельзя использовать threadprivate в динамическом режиме работы программы Механико-математический факультет Южно-Уральского государственного университета
19 Дополнительные возможности OpenMP: передача данных при миграции С помощью выражения copyin можно просто передавать данные из главного потока в параллельный Синтаксис C/C++ copyin (var1 [,var2]…) FORTRAN copyin (/cb/[,/cb2/…]) На FORTRAN в copyin задаются имена common блоков, в которых описаны мигрирующие переменные, а в С/C+ - имена самих переменных Механико-математический факультет Южно-Уральского государственного университета
20 Дополнительные возможности OpenMP: функции блокировки C/C++ void omp_init_lock(omp_lock_t *lock) – блокирует объект с указателем lock void omp_destroy_lock(omp_lock_t *lock) – гарантирует, что объект с указателем lock не инициализирован void omp_set_lock(omp_lock_t *lock) – блокирует выполнение потока до тех пор, пока объект открыт для операций чтения или записи, после их завершения блокирует объект и продолжает выполнение потока void omp_unset_lock(omp_lock_t *lock) – открывает заблокированный объект int omp_test_lock(omp_lock_t *lock) – пытается заблокировать объект не прерывая выполнения потока (возвращает TRUE или ненулевое значение, если попытка завершилась успешно, в противном случае возвращает 0) необходимо включение #include FORTRAN subroutine omp_init_lock(omp_lock_t lock) subroutine omp_destroy_lock(omp_lock_t lock) subroutine omp_set_lock(omp_lock_t lock) subroutine omp_unset_lock(omp_lock_t lock) logical omp_test_lock(omp_lock_t *lock) переменная lock должна быть целочисленной типа KIND и иметь размерность достаточную для записи адреса Механико-математический факультет Южно-Уральского государственного университета
21 Общие рекомендации Механико-математический факультет Южно-Уральского государственного университета
22 Зависимость по данным Для эффективного распараллеливания необходимо обеспечить независимость по данным между петлями (итерациями) циклов операторов do/for Если зависимости по данным между петлями циклов отсутствуют, то они называются независимыми по данным Часто зависимости по данным между петлями циклов могут быть исключены с помощью модификации алгоритмов Пример рекурсии с зависимостью по данным Элементарное распараллеливание Механико-математический факультет Южно-Уральского государственного университета
23 Зависимость по данным Reduction Распараллеливание осуществляется с помощью применения конструкции reduction к циклу do Механико-математический факультет Южно-Уральского государственного университета
24 Зависимость по данным Циклы с условными выходами не распараллеливаются Вложенные циклы: в следующем примере Распараллеливание возможно только на самом верхнем уровне по k Механико-математический факультет Южно-Уральского государственного университета
25 Проблемы отладки OpenMP программ: условия состязательности (race conditions) При работе программ с общей памятью возникает ряд специфических ошибок, одна из которых связана с так называемыми условиями состязательности (race conditions) Эти ошибки состоят в непредсказуемом времени завершении параллельных потоков и возникновении в результате этого непредсказуемых результатов вычислений Пример Результат в этом примере зависит от того как и в какой последовательности выполняются параллельные потоки Механико-математический факультет Южно-Уральского государственного университета
26 Проблемы отладки OpenMP программ: мертвая блокировка (deadlock) В процессе выполнения программ с общей памятью возможна ситуация, когда поток ожидает освобождения доступа к объекту, который никогда не будет открыт В следующем примере видно, что такая ситуация возникает, когда объект А заблокирован в одном потоке, а объект В в другом В случае, если оба объекта заблокированы в одном потоке, то возникает условие состязательности Пример Механико-математический факультет Южно-Уральского государственного университета
27 Проблемы отладки OpenMP программ: некоторые дополнительные опасные ситуации Используемые в программах библиотеки должны быть безопасны с точки зрения потокового выполнения. Стандартные библиотеки всегда удовлетворяют этому требованию Следует иметь ввиду, что операции ввода/вывода в параллельных потоках завершаются в непредсказуемом порядке Следует внимательно прослеживать пересечение в параллельных потоках переменных типа private с глобальными переменными Следует тщательно отслеживать однозначность значений переменных в общей памяти. Для этого при необходимости следует пользоваться функцией FLUSH Следует помнить, что предложение NOWAIT удаляет неявные барьеры (barriers) Средства отладки OpenMP программ: Intel Thread Checker и Intel VTune Performance Analyzer (работает под Windows и Linux и позволяет вести отладку с Windows-компьютера на удаленных Linux кластерах) Механико-математический факультет Южно-Уральского государственного университета
28 Настройка программ в OpenMP: основные стратегии Если есть возможность, то сперва следует воспользоваться средством авто-распараллеливания программы Для нахождения наиболее трудоемких участков программы следует воспользоваться возможностью профилирования (profiling) Затем следует добавить в программу инструкции OpenMP для распараллеливания наиболее затратных участков программы В случае неэффективного распараллеливания конструкций do/for следует учесть Высокую стоимость инициализации параллельных потоков (порядка 1000 операций деления) Неэффективность распараллеливания небольших циклов Несбалансированность потоков Многочисленные ссылки к переменным в общей памяти Ограниченный объем кэша Высокую стоимость операции синхронизации Высокую стоимость доступа к удаленной общей памяти (на NUMA-компьютерах) При распараллеливании вложенных циклов следует сперва распараллеливать внешние петли При распараллеливании циклов следует иметь в виду, что петли циклов по объему вычислений могут быть зачастую треугольными и порождать несбалансированные параллельные потоки. Чтобы избежать несбалансированности при работе программы следует использовать инструкцию schedule Механико-математический факультет Южно-Уральского государственного университета
29 Настройка программ в OpenMP: пример распараллеливания Исходная программа Параллельная программа Механико-математический факультет Южно-Уральского государственного университета
30 Настройка программ в OpenMP: автоматическое распараллеливание Основные современные языки программирования имеют возможности автоматического распараллеливания программ в OpenMP: –openmp –parallel – par_report[0|1|2|3] – par_threshold[x], (0
31 Настройка программ в OpenMP: иерархия памяти Современные параллельные системы имеют следующую иерархию памяти Регистры Кэш 1-го уровня Кэш 2-го уровня Кэш 3-го уровня Локальную память Удаленную память (с доступом через interconnect) Время доступа к памяти существенно возрастает при движении по иерархии сверху вниз В связи с этим становиться актуальной задачи эффективности загрузки кэша и регистров, а также минимизация доступа к удаленной памяти Для более эффективной загрузки кэша следует принимать дополнительные меры по выравниванию строк (в C/C++) или столбцов (в FORTRAN) массивов Для более эффективного распараллеливания циклов следует по возможности обеспечить независимость петель вложенных циклов Механико-математический факультет Южно-Уральского государственного университета
32 Настройка программ в OpenMP: настройка кэша Для эффективного использования кэш памяти рекомендуется использовать многомерные массивы в одномерном виде Вложенные циклы следует модифицировать так, чтобы обеспечить последовательный быстрый доступ к элементам массива без скачков по индексам На NUMA (non-uniform memory access) платформах важно учитывать следующие особенности Где запущены потоки Какие данные загружены в локальную память Стоимость доступа к удаленной памяти Для NUMA платформ вышеперечисленные возможности сильно зависят от архитектуры систем OpenMP предоставляет следующие возможности по управлению потоками Запуск потока на определенном процессоре Размещение данных в определенном месте памяти Эти задачи решаются с помощью системных инструкций, которые могут быть различными на различных платформах и зависеть от загруженного системного программного обеспечения Механико-математический факультет Южно-Уральского государственного университета
33 Обзор Intel Cluster OpenMP Механико-математический факультет Южно-Уральского государственного университета
34 Intel Cluster OpenMP - простое средство, требующее незначительного изменения кода для расширения параллелелизма OpenMP на кластерные системы под ОС Linux, базирующиеся на 64-разрядной архитектуре Intel. Директива sharable определяет переменные, на которые ссылаются несколько нитей, и доступ к которым должен обрабатываться как раз механизмом DSM. Механизм DSM синхронизации переменных на разных узлах Механико-математический факультет Южно-Уральского государственного университета
35 Преимущества Cluster OpenMP Переносимость и гибкость упрощает и снижает стоимость разработки приложений: Упрощает распределение последовательного или OpenMP кода по узлам. Позволяет использовать один и тот же код приложений для последовательных, многоядерных и кластерных систем. Требует совсем незначительного изменения кода, что упрощает отладку. Позволяет слегка измененному коду OpenMP выполняться на большем числе процессоров без вложений в аппаратную составляющую SMP. Представляет собой альтернативу MPI, которая может быть быстрее освоена и применена. Механико-математический факультет Южно-Уральского государственного университета
36 Пример #include main() { #pragma omp parallel { #pragma omp critical printf(hello world\n); } icc -cluster-openmp hello.c –o hello./hello hello world Механико-математический факультет Южно-Уральского государственного университета
37 Механизм DSM Механико-математический факультет Южно-Уральского государственного университета
38 Пример #include static int x; #pragma intel omp sharable(x) int main() { x = 0; #pragma omp parallel { #pragma omp critical x++; } printf("%d should equal %d\n", omp_get_max_threads(), x); } Механико-математический факультет Южно-Уральского государственного университета
Еще похожие презентации в нашем архиве:
© 2024 MyShared Inc.
All rights reserved.