
- •Основные архитектуры параллельных компьютеров
- •Классификация архитектур вычислительных систем. (Классификация Флинна)
- •Модели параллельного программирования. Основные свойства параллельных алгоритмов
- •Модель задача-канал. Основные свойства модели "задача/канал"
- •Модель передачи сообщений
- •Модель параллелизма данных
- •Модель разделяемой памяти
- •Понятие о детерминизме программы
- •Модульность. Виды композиции модулей и/или программ
- •10. Пример параллельного алгоритма: конечные разности.
- •11. Основные этапы разработки параллельной программы.
- •12. Декомпозиция. Цели. Виды декомпозиции. Итоги этапа декомпозиции.
- •Д екомпозиция по данным
- •Ф ункциональная декомпозиция
- •13. Коммуникация. Виды коммуникаций: локальные, глобальные,динамические, асинхронные. Распределенные коммуникации ивычисления. Итоги.
- •Локальные/глобальные.
- •Синхронные/асинхронные.
- •Статические/динамические.
- •С труктурные/неструктурные.
- •16. Анализ эффективности параллельных алгоритмов. Система показателей оценки характеристик параллельной программы. Асимптотический анализ. Эффективность параллельной программы
- •Система показателей оценки характеристик
- •Соглашения о терминах
- •Принятая в mpi нотация записи
- •23. Базовые функции mpi (минимальный набор)
- •24. Библиотека mpi. Организация приема/передачи данных между отдельными процессами
- •Функции приема/передачи сообщений с блокировкой
- •Основные функции приема/передачи сообщений без блокировки
- •Совмещенные прием/передача сообщений
- •25. Библиотека mpi. Коллективные функции
- •Функции коллективного обмена данными
- •26. Библиотека mpi. Глобальные вычислительные операции над распределенными данными
- •27. Библиотека mpi. Обеспечение модульности. Коммуникаторы, группы и области связи
- •Два взаимосвязанных механизма:
- •Основные понятия (группа):
- •Основные понятия (коммуникатор):
- •28. Библиотека mpi. Проблемы использования различных типов данных. Пользовательские типы данных
- •Пользовательские типы данных:
- •Характеристики типов:
- •29. Библиотека mpi. Производные типы данных и передача упакованных данных
- •Механизмы эффективной пересылки данные разных типов:
- •Производные типы данных:
- •Характеристики типов:
- •Передача упакованных данных:
- •Технология OpenMp. Стратегия подхода.
- •Директивы OpenMp. Формат записи директив.
- •Директивы OpenMp. Области видимости директив. Типы директив.
- •Директивы OpenMp. Определение параллельной области.
- •Директивы OpenMp. Распределение вычислений по потокам.
- •Директивы OpenMp. Синхронизация.
- •Директивы OpenMp. Управление областью видимости данных.
- •37. Библиотека функций OpenMp. Функции контроля параметров среды исполнения.
- •38. Библиотека функций OpenMp. Функции синхронизации.
- •39. Технология OpenMp. Переменные среды исполнения.
Директивы OpenMp. Формат записи директив.
Формат: # pragma omp имя_директивы [clause,…]
Пример: # pragma omp parallel default (shared) \
private (beta, pi)
Общий вид основных директив OpenMP на языке C/C++
# pragma omp parallel \
private (var1, var2, …) \
shared (var1, var2, …) \
firstprivate (var1, var2, …) \
lastprivate (var1, var2, …) \
copyin (var1, var2, …) \
reduction (operator: var1, var 2, …) \
if (expression) \
default (shared | none) \
{
[ Структурный блок программы]
В рассматриваемом фрагменте предложение OpenMP shared используется для описания общих переменных. Общие переменные позволяют организовать обмен данными между параллельными процессами в OpenMP. Предложение private используется для описания внутренних (локальных) переменных для каждого параллельного процесса. Предложение firstprivate применяется для описания внутренних переменных параллельных процессов, однако данные в эти переменные импортируются из главного потока.
Предложение reduction позволяет собрать вместе в главном потоке результаты вычислений частичных сумм, разностей и т. п. из параллельных потоков. Предложение if является условным оператором в параллельном блоке. И, наконец, предложение default определяет по умолчанию тип всех переменных в последующем параллельном структурном блоке программы. Символ \ - продолжение директивы на другой строке.
Структурный блок – последовательность инструкций с одной точкой входа в начале блока и с одной точкой выхода в конце блока.
Директивы OpenMp. Области видимости директив. Типы директив.
Параллельное
выполнение программы будет осуществляться
не только для программного блока,
непосредственно следующего за
директивой parallel,
но и для всех функций, вызываемых из
этого блока (см. рис.).
Для обозначения этих динамически-возникающих
параллельно выполняемых участков
программного кода в OpenMP используется
понятие параллельных
областей ( parallel
region ).
Ряд директив OpenMP допускает использование как непосредственно в блоках директивы, так и в параллельных областях. Такие директивы носят наименование отделяемых директив ( orphaned directives ).
Параллельный фрагмент ( parallel construct ) - блок программы, управляемый директивой parallel ; именно параллельные фрагменты, совместно с параллельными областями, представляют параллельно-выполняемую часть программы;
Параллельная область ( parallel region ) - параллельно выполняемые участки программного кода, динамически-возникающие в результате вызова функций из параллельных фрагментов – см.рис.
Параллельная секция ( parallel section ) - часть параллельного фрагмента, выделяемая для параллельного выполнения при помощи директивы section.
Типы директив:
Определение параллельной области
Разделение работы
Синхронизация
Директивы OpenMp. Определение параллельной области.
Директива parallel одна из основных. Правила, определяющие действия директивы:
Когда программа достигает директиву parallel, создается набор ( team ) из N потоков; исходный поток программы является основным потоком этого набора ( master thread ) и имеет номер 0.
Программный код блока, следующий за директивой, дублируется или может быть разделен при помощи директив между потоками для параллельного выполнения.
В конце программного блока директивы обеспечивается синхронизация потоков - выполняется ожидание окончания вычислений всех потоков; далее все потоки завершаются - дальнейшие вычисления продолжает выполнять только основной поток (в зависимости от среды реализации OpenMP потоки могут не завершаться, а приостанавливаться до начала следующего параллельного фрагмента - такой подход позволяет снизить затраты на создание и удаление потоков).
#pragma omp parallel [clause ...] newline
structured_block
clause
if (scalar_expression) private (list)
shared (list)
default (shared | none)
firstprivate (list)
reduction (operator: list)
copyin (list)
num_threads (scalar_expression)
Семантика parallel
Количество потоков (по убыванию старшинства)
omp_set_num_threads()
OMP_NUM_THREADS
Параметр реализации
Динамические потоки
По умолчанию количество потоков одинаковое – для активизации динамического режима функция omp_set_dynamic() или переменная OMP_DYNAMIC
Вложенность параллельных областей (во многих реализациях не обеспечивается)
по умолчанию во вложенной области создается один поток
управление – функция omp_set_nested() или переменная OMP_NESTED
Параметры (clause) – если условия в if не выполняются, то процессы не создаются.