Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
VOPROSY_Kolesnikov.docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
613.39 Кб
Скачать
  1. Спорідненість та відмінності технології OpenMp та mpi

Наиболее распространенными на сегодня базовыми технологиями параллельного программирования являются технологии MPI и OpenMP.

Технология MPI менее требовательна к аппаратуре связи между процессорами, на которой она может быть эффективно реализована, но гораздо более требовательна к программисту, труднее в применении, нежели технология OpenMP.

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

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

OpenMP – промышленный стандарт для программирования общей памяти. Основанный на комбинации директив компилятора, библиотечных процедур и переменных окружающей среды это используется, чтобы определить параллелизм на машинах совместно используемой памяти. Коммуникация неявна, и OpenMP приложения относительно легки в имплементации. Теоретически, OpenMP лучше использует архитектуру общей памяти. Программирование времени исполнения возможно, и потому эффективен как мелкозернистый, так и крупнозернистый параллелизм. Коды OpenMP, однако, будут исполняться только на машинах с общей памятью, и политика размещения данных может стать причиной проблем. Для крупнозернистого параллелизма часто требуется стратегия параллелизации, подобная стратегии MPI, а также внешняя синхронизация.

  1. Критичні секції в OpenMp програмах

С помощью директив critical (critical ... end critical) оформляется критическая секция программы.

#pragma omp critical [(<имя_критической_секции>)]

В каждый момент времени в критической секции может находиться не более одной нити. Если критическая секция уже выполняется какой-либо нитью, то все другие нити, выполнившие директиву для секции с данным именем, будут заблокированы, пока вошедшая нить не закончит выполнение данной критической секции. Как только работавшая нить выйдет из критической секции, одна из заблокированных на входе нитей войдет в неё. Если на входе в критическую секцию стояло несколько нитей, то случайным образом выбирается одна из них, а остальные заблокированные нити продолжают ожидание. Все неименованные критические секции условно ассоциируются с одним и тем же именем. Все критические секции, имеющие одно и тоже имя, рассматриваются единой секцией, даже если находятся в разных параллельных областях. Побочные входы и выходы из критической секции запрещены. С директивой critical порядок вывода результатов может быть произвольным, но это всегда будет на-бор одних и тех же чисел от 0 до OMP_NUM_THREADS-1.

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]