Essays.club - Получите бесплатные рефераты, курсовые работы и научные статьи
Поиск

Модель исполнения параллельной программы (OpenMP)

Автор:   •  Ноябрь 3, 2023  •  Лекция  •  1,235 Слов (5 Страниц)  •  105 Просмотры

Страница 1 из 5

Модель исполнения параллельной программы (OpenMP)

         • ͙ при запуске программы создается главный поток, выполняющий впоследствии все последовательные области программы;

        • ͙ программа содержит набор последовательных и параллельных областей (или секций или регионов);

        • ͙ при входе в параллельную область главным потоком выполняется операция Fork, порождающая совокупность подчиненных потоков. Каждый поток имеет свой уникальный числовой идентификатор (главному потоку соответствует 0);

        • ͙ потоки одного региона выполняют один и тот программный код (с точностью до возможных разветвлений), но каждый в идеале обрабатывает свои собственные данные. Если программный код региона представляет собой распараллеливаемый цикл, то разные потоки выполняют разные его итерации. Это распределение вычислительной работы между потоками и позволяет добиваться ускорения выполнения программы по сравнению с ее последовательным вариантом;

        • ͙ при выходе из параллельной области всеми потоками выполняется операция Join. Завершается выполнение всех потоков, кроме главного.

[pic 1]

В модели памяти OpenMP все переменные, объявленные в программе вне фрагментов, выполняемых в качестве параллельных регионов, по умолчанию относятся к классу разделяемых, т.е. общедоступных для всех потоков. При выполнении параллельного региона, существуют участки, принадлежащие отдельным потокам и недоступные всем остальным – класс частной памяти. Частными являются:

  • стек потока, доступ к элементам которого осуществляется неявным образом при вызове функции и возврате из них
  • переменные, объявленные внутри структурного блока, исполняемого в качестве паралльного региона.

Компоненты реализации технологии OpenMP:

директивы компилятора – используются для создания потоков, распределения работы между потоками и синхронизации потоков;

библиотека функций – используется для получения и, возможно, модификации некоторых атрибутов потоков, а также для их синхронизации во время выполнения программы;

переменные окружения – используются администраторов системы для управления поведением параллельной программы.

Технология OpenMP создана и поддерживается для языков C, C++ и Fortran.

Если параллельную программу транслировать компилятором, не поддерживающим эту технологию, то результат будет построен в обычном последовательном (однопоточном) варианте.

При компиляции для платформы Windows с использованием Microsoft Visual Studio   включить поддержку OpenMP можно, установив OpenMP support в свойствах проекта (Configuration properties\C/C++\language). Для компилятора gss для платформы Linux в командной строке указывается ключ –fopenmp.

Подключение библиотеки OpenMP в С/С++

#include <omp.h>

Формат записи директив:

#pragma omp <имя директивы> [ опция_1[опция_2, ...]]

Директива создания параллельного региона

#pragma omp parallel [ опция_1[опция_2, ...]]

<структурный блок>

С помощью опций этой директивы можно указать:

  • требующееся количество потоков n (num_threads(n))
  • условие, при истинности которого параллельный регион действительно создается (if(logical_expression)), например if(arraySize>100000);
  • список общих переменных для всех потоков данного региона (shared(variables_list)), например shared(x, alpha, zeroCount)
  • список общих переменных, которые должны стать частными в каждом потоке региона и получить неопределенные начальные значения (private(variables_list)), например private(k)
  • список переменных, которые должны стать частными в каждом потоке региона и унаследовать значения из главного потока (firstprivate(variables_list)), например firstprivate(sum,ind)
  • способ назначения класса памяти по умолчанию (default(shared|none)) всем переменным, используемым в регионе; слово none означает, что класс памяти всех не локальных переменных (т. е. не объявленных внутри структурного блока) должен быть задан явно опциями shared, private или firstprivate ; опция default ( shared ) может быть указана, но смысла это не имеет;
  •         список глобальных (объявленных вне всех функций) переменных программы ( copyin ( variables_list )), перечисленных в директиве threadprivate (см. подп. 3.3.5), значения которых сохраняются в момент выхода из одного параллельного региона и должны восстанавливаться в момент входа в данный регион;
  •         оператор сведения данных и список общих переменных reduction ( operator : variables_list ); для каждой указанной в списке переменной создаются локальные копии в каждом потоке; локальные копии инициализируются соответственно типу оператора (для аддитивных операций – ноль или его аналоги, для мультипликативных операций – единица и ее аналоги); над всеми локальными копиями каждой переменной после завершения параллельного региона будет выполнен заданный оператор сведения, результаты сведения будут занесены в одноименные общие переменные; в качестве оператора можно указывать арифметические и логические операции.

Опции в любой директиве не обязательны, если они записываются, то в произвольной последовательности и любом количестве, но смысл не должен быть противоречивым.

[pic 2]

Директива, требующая исполнения охваченного ею участка кода в точности одним потоком:

#pragma omp single [ опция_1[опция_2, ...]]

<структурный блок>

Опции директивы позволяют указать:

...

Скачать:   txt (17 Kb)   pdf (528.2 Kb)   docx (703.8 Kb)  
Продолжить читать еще 4 страниц(ы) »
Доступно только на Essays.club