
Лекции / Лекция 4
.docТехнологии и методы программирования. Лекция 4.
Опция ordered – в выделенном участке итерации выполняются строго по порядку, как при последовательном выполнении.
Опция nowait – после завершения директивы не будет производиться неявная барьерная синхронизация.
Опция barrier – задаёт точку барьерной синхронизации в области действия parallel.
Опция flush(<список>) - все переменные из списка (или просто все, если список пуст) выгружаются в память из регистров и кэш-памяти, после чего могут быть доступны всем потокам. До завершения оператора действия со значениями этих переменных невозможны. Опция тормозит вычисления, неявно используется при барьерной синхронизации, а так же для переменной в области действия atomic. Не применяется при входе в область распределения, при входе и выходе в область действия директивы master.
Ограничение на использование оператора цикла в области действия for:
- итерации должны быть независимы друг от друга
- из цикла нельзя выполнить побочный выход (с помощью if, break, goto)
- в shedule во время выполнения параллельного участка не должен меняться параметр количества операций в порции.
- в выражении for(i=0;... I – локальная переменная
- допустимые условия выхода из цикла: <, >, =, <=, >=
- параметр, с которым производится сравнение в условии выхода из цикла не изменяется во время выполнения.
Анализ параллельных вычислений и оценка параллельной сложности алгоритмов.
Оценка ускорения:
Первый подход — оценка ускорения параллельного алгоритма по отношению к последовательному. (Определяемая величина называется ускорение алгоритма).
Второй подход — оценка ускорения данного параллельного алгоритма по отношению к самому быстрому последовательному алгоритму, решающему эту задачу (оцениваемая величина — ускорение решения задачи).
Операции-операнды.
Модель представляется графом. Она основана на следующих допущениях:
- передача данных мгновенна (она несущественно для вычислений с общей памятью, а для распределённых вычислений коммуникационные затраты оцениваются по отдельной модели)
- все операции выполняются за 1 условную единицу времени.
Вершины графа представляют собой операции, а дуги — информационные зависимости. Граф не имеет контуров. Вершины, из которых дуги только выходят — операции ввода данных, а те, в которые они только входят — вывода.
Пример:
S=(x2y2-x2y1)-(x1y2-x1y1)
О
перации
на одном уровне могут быть распараллелены.
Эффективность алгоритма сильно зависит от вычислительной схемы, поэтому необходим её оптимальный выбор.
Привязка операций к процессорам реализуется расписанием. Пусть есть P процессоров. Тогда для вычислений необходимо задать множество Hp=h(i, pi, ti), где I – номер операции. Этим расписанием для каждой операции задаётся процессор, её выполняющий, и время начала операции. В корректном расписании 2 операции могут начинаться одновременно только на разных процессорах, а наличие дуги ij в графе означает, что tj>=ti+1.
Граф модели и расписание дают полную модель параллельного алгоритма — Ap=(G(V, U), Hp). Время выполнения алгоритма определяется максимальным временем в расписании. При расчёте времени работы параллельного алгоритма:
1) Использовать оптимальное расписание (минимизация по T): Tp(G)=minTp(G, Hp).
2) Оптимизировать саму вычислительную схему: Tp=minTp(G).
3) Использовать бесконечное число процессоров: T∞=minTp .
Полученное время — минимальное время выполнения алгоритма при решении данной задачи. Для конкретного алгоритма также вычисляют:
1) T1=minT1(G) – вычисление на 1 процессоре, с наилучшей вычислительной схемой. Имеет смысл только для некоторых конкретных алгоритмов.
2) T1*=min(T1) – оценка решения задачи самым быстрым последовательным алгоритмом.
Теоремы:
Минимальное время выполнения параллельного алгоритма определяется по графу — это максимальный путь от операторов ввода данных до вывода.
Если существует вершина вывода, такая, что ней заканчиваются все пути из вершин ввода данных, а при этом входная степень всех вершин не превышает двух дуг, то минимальное время выполнения параллельного алгоритма — двоичный логарифм от количества операций ввода.
Если число процессоров уменьшилось на некоторую величину, то время выполнения возрастёт пропорционально.
Для любого количества процессоров верхняя граница времени выполнения параллельного алгоритма не превышает суммы минимального времени выполнения и времени выполнения алгоритма одним процессором, делённого на количество процессоров.