minor changes

This commit is contained in:
2024-05-06 21:42:13 +03:00
parent 15ec9d2208
commit ec20fbd897
18 changed files with 63 additions and 88 deletions

View File

@@ -1,21 +1,21 @@
\subsection{Постановка задачи, определение целей работы}
Так возникает задача добавления в систему SAPFOR дополнительного сценария работы -- распараллеливания фортран-программ без построения схемы распределения данных и с использованием директив PARALLEL без клаузы ON.
Так возникает задача добавления в систему SAPFOR дополнительного сценария работы -- распараллеливания фортран-программ без построения схемы распределения данных и с использованием директив \texttt{PARALLEL} без клаузы \texttt{ON}.
Требуется, чтобы новый режим мог обходить ограничения, накладываемые распределением данных, тем самым расширяя класс распараллеливаемых программ на общую память по сравнению со стандартным распараллеливанием на кластер. В частности, вставляемые директивы должны корректно описывать все данные, используемые в цикле, их область хранения в памяти и зависимости типа ACROSS, если они есть.
Также от добавляемого функционала естественно потребовать его \textit{корректность}: при условии, если входная программа корректная, то система SAPFOR должна выдавать правильную параллельную программу, которая должен успешно компилироваться и выполняться.
Помимо этого, результирующее распараллеливание должно быть эффективным, то есть давать приемлемый прирост производительности за счёт многопоточного выполнения: не замедлять программу существенно в худших случаях и получать распараллеливание, конкурирующие с ручным в лучших случаях. В это требование дополнительно входит расстановка оптимизирующих клауз TIE в директивы PARALLEL везде, где это возможно.
Помимо этого, результирующее распараллеливание должно быть эффективным, то есть давать приемлемый прирост производительности за счёт многопоточного выполнения: не замедлять программу существенно в худших случаях и получать распараллеливание, конкурирующие с ручным в лучших случаях. В это требование дополнительно входит расстановка оптимизирующих клауз \texttt{TIE} в директивы \texttt{PARALLEL} везде, где это возможно.
Поскольку работа ведётся в рамках доработки системы SAPFOR, решение должно быть в неё интегрировано должным образом:
\begin{itemize}
\item в системе SAPFOR каждое преобразование оформляется в виде последовательности \textit{проходов} -- алгоритмов, которые логически разделены на блоки. Поэтому новый функционал должен быть реализован в виде нового прохода (или в виде последовательности новых проходов);
\item новый режим распараллеливания, должен учитывать и правильно обрабатывать директивы системы SAPFOR;
\item новый режим распараллеливания должен учитывать и правильно обрабатывать директивы системы SAPFOR;
\item должна быть добавлена возможность вызова это режима через диалоговую графическую оболочку;
\item должна быть добавлена возможность вызова этого режима через диалоговую графическую оболочку;
\item вместе с самим распараллеливанием должен быть добавлен функционал анализа входного кода, который выдавал бы информацию по распараллеливанию без фактической вставки директив. Аналогичный анализ в системе SAPFOR есть и для режима распараллеливания на кластер. Он служит для выявления проблем при автоматизированном распараллеливании;
\end{itemize}

View File

@@ -3,13 +3,13 @@
Как описывалось во введении, распараллеливание в модели DVM происходит при помощи специальных директив. При привычном распараллеливании с распределением данных, в основном, используются следующие директивы:
\begin{itemize}
\item DISTRIBUTE -- предназначена для распределения элементов массивов по узлам
\item \texttt{DISTRIBUTE} -- предназначена для распределения элементов массивов по узлам;
\item ALIGN -- отображает элементы нескольких массивов на заданный распределённый массив и распределяет их на соответствующие узлы
\item \texttt{ALIGN} -- отображает элементы нескольких массивов на заданный распределённый массив и распределяет их на соответствующие узлы;
\item REGION -- определяет область кода, которую следует выполнять параллельно
\item \texttt{REGION} -- определяет область кода, которую следует выполнять параллельно;
\item PARALLEL ... ON -- определяет цикл, витки которого следует выполнять параллельно, при этом задавая отображение пространства витков цикла на распределённый массив.
\item \texttt{PARALLEL ... ON} -- определяет цикл, витки которого следует выполнять параллельно, при этом задавая отображение пространства витков цикла на распределённый массив;
\end{itemize}
@@ -32,12 +32,12 @@
...
\end{lstlisting}
Чтобы дать пользователю возможность распараллеливать программы на общую память, в синтаксис языка DVM-системы была добавлена новая форма директивы PARALLEL для распараллеливания без распределения данных.
Чтобы дать пользователю возможность распараллеливать программы на общую память, в синтаксис языка DVM-системы была добавлена новая форма директивы \texttt{PARALLEL} для распараллеливания без распределения данных.
Новый вариант директивы PARALLEL отличается от исходного тем, что в ней отсутствует клауза ON. При использовании таких директив не надо указывать распределённые массивы. Сами директивы распределения данных также не нужны в таких программах. Более того, в таких директивах PARALLEL не должны присутствовать клаузы доступа к удалённым данных, такие как SHADOW\_RENEW, SHADOW\_COMPUTE и REMOTE\_ACCESS.
Новый вариант директивы \texttt{PARALLEL} отличается от исходного тем, что в ней отсутствует клауза \texttt{ON}. При использовании таких директив не надо указывать распределённые массивы. Сами директивы распределения данных также не нужны в таких программах. Более того, в таких директивах \texttt{PARALLEL} не должны присутствовать клаузы доступа к удалённым данных, такие как \texttt{SHADOW\_RENEW}, \texttt{SHADOW\_COMPUTE} и \texttt{REMOTE\_ACCESS}.
\begin{lstlisting}[style=FORT,caption={
пример распарараллеливания гнезда циклов на общую память. Здесь не должно быть ни директив распределения данных, ни клаузы ON отображения витков цикла на массив.
пример распарараллеливания гнезда циклов на общую память.
}]
...
!DVM$ REGION
@@ -52,4 +52,4 @@
...
\end{lstlisting}
Так же в таком варианте директивы PARALLEL может присутствовать клауза TIE, сопоставляющая итерации цикла с массивом, которая используется в DVM-системе для улучшения производительности выходного исполняемого кода.
Также в таком варианте директивы \texttt{PARALLEL} может присутствовать клауза \texttt{TIE}, сопоставляющая итерации цикла с массивом. Она используется в DVM-системе для улучшения производительности выходного исполняемого кода.

View File

@@ -2,4 +2,4 @@
Исследования по теме автоматизированного распараллеливания программ ведутся достаточно давно. На данный момент существует не так много широко используемых средств, позволяющих получать параллельный код. Среди средств, которые в той или иной степени помогают в процессе распараллеливания программ можно выделить следующие: Polaris, CAPO, WPP, SUIF, VAST/Parallel, OSCAR, ParallelWare, Intel Parallel Studio XE.
Однако, открытых реализаций алгоритмов распараллеливания почти нет, поэтому за основу решения был взят уже существующие в системе SAPFOR режим распараллеливания с распределением данных. Этот подход не только помог учесть спицифику языков фортран и DVM, но и позволил минимизировать объём внесённых в систему SAPFOR изменений.
Однако, открытых реализаций алгоритмов распараллеливания почти нет, поэтому за основу решения был взят уже существующий в системе SAPFOR режим распараллеливания с распределением данных. Этот подход не только помог учесть спицифику языков фортран и DVM, но и позволил минимизировать объём внесённых в систему SAPFOR изменений.

View File

@@ -1,7 +1,3 @@
\subsection{Мотивация поддержки режима распараллеливания на общую память в системе SAPFOR}
Поскольку система SAPFOR не способна проанализировать все тонкости логики работы программы, процесс построения оптимальной схемы распределения данных затрудняется. Поэтому аналогичная потребность в функционале распараллеливания на общую память возникает и в системе SAPFOR. Таким образом, реализация нового режима работы системы SAPFOR для распараллеливания на общую память стала для данной работы основной целью, которая детально описывается в последующих параграфах.
% Существующий режим распараллеливания основан на построении графа измерений массивов. Это граф, в котором вершинами являются измерения массивов, а дуги представляют собой информацию о совместном использовании элементов массива внутри отдельной итерации цикла. После этого по определённым правилам дуги взвешиваются и строится подграф, минимизирующий суммарный вес не вошедших в него дуг. По этому подграфу в результате строится распределение данных, и чем меньше суммарный вес не вошедших дуг, тем схема оптимальнее с точки зрения эффективности выполнения параллельной программы. Поэтому, в программах, где нет оптимального решения этой подзадачи, схема распределения строится плохо, возникает много обращений к данным с удалённых узлов и полученная программа получается неэффективной.
% Таким образом, возникает потребность в новом функционале системы SAPFOR, позволяющем распараллеливать программы на общую память. Разработка и реализация такого режима работы системы SAPFOR и стали главной целью данной работы.
Поскольку система SAPFOR не способна проанализировать все тонкости логики работы программы, процесс построения оптимальной схемы распределения данных затрудняется. Поэтому аналогичная потребность в функционале распараллеливания на общую память возникает и в системе SAPFOR. Таким образом, реализация нового режима работы системы SAPFOR для распараллеливания на общую память стала для данной работы основной целью, которая детально описывается в последующих параграфах.

View File

@@ -1,6 +1,6 @@
\section{Распараллеливание на общую память}
При написании параллельных DVMH-программ пользователь решает две задачи: он должен найти оптимальный способ распределения данных и обозначить циклы, которые могут выполняться параллельно. На практике нередко возникают ситуации, когда для рассматриваемой программы решить первую из этих задачу слишком сложно или невозможно, но вторая задача решается успешно, то есть программа обладает хорошим потенциалом для распараллеливания.
При написании параллельных DVMH-программ пользователь решает две задачи: он должен найти оптимальный способ распределения данных и обозначить циклы, которые могут выполняться параллельно. На практике нередко возникают ситуации, когда для рассматриваемой программы решить первую задачу трудно или невозможно, но вторая задача решается успешно, то есть программа обладает хорошим потенциалом для распараллеливания.
Основной проблемой, возникающей при попытке построить схему распределения данных, является то, что разные циклы для их распараллеливания могут требовать разных, конфликтующих, схем распределения данных. При распараллеливании практически значимых программ, в силу их объёмности, такие конфликты возникают повсеместно. Эта проблема подробно рассматривается в \cite{par-reg}.