This commit is contained in:
2024-05-09 16:15:46 +03:00
parent ec20fbd897
commit b918cad647
25 changed files with 228 additions and 179 deletions

View File

@@ -5,22 +5,22 @@
\begin{itemize}
\item как происходит запуск распараллеливания с распределением данных;
\item какой код и в какой последовательни работает при распараллеливании с распределением данных;
\item какой код и в какой последовательности работает при распараллеливании с распределением данных;
\item какие органичивающие проверки планируется убрать в проходе распараллеливания на общую память;
\item какие ограничивающие проверки планируется убрать в проходе распараллеливания на общую память;
\item какие структуры данных используются;
\item использование каких структур данных нужно избежать;
\item какие существующие алгоритмы (с можификациями или без) можно (и нужно) переиспользовать в добавляемом режиме;
\item какие существующие алгоритмы (с модификациями или без) можно (и нужно) переиспользовать в добавляемом режиме.
\end{itemize}
Путём чтения исходного кода, документации и общения с авторами системы все эти вопросы были разрешены. Далее излагаются основные полученные сведения.
Как уже упомяналось ранее, структурно система SAPFOR состоит из множества алгоритмов, которые логически разделены на отдельные блоки -- проходы. Каждый проход выполняет свою функцию и может зависеть от других проходов. При запуске прохода перед ним запускаются все проходы, от которых он зависит непосредственно или транзитивно, при чём каждый проход запускается не больше одного раза. Таким образом в системе выстраивается дерево зависимостей проходов.
Как уже упоминалось ранее, структурно система SAPFOR состоит из множества алгоритмов, которые логически разделены на отдельные блоки -- проходы. Каждый проход выполняет свою функцию и может зависеть от других проходов. При запуске прохода перед ним запускаются все проходы, от которых он зависит непосредственно или транзитивно, при чём каждый проход запускается не больше одного раза. Таким образом в системе выстраивается дерево зависимостей проходов.
Конечным проходом при распараллеливании с распределением данных явлется проход с названием INSERT\_PARALLEL\_DIRS, который производит вставку созданных директив в код. Главные его зависимости -- проход CREATE\_PARALLEL\_DIRS создания параллельных директив (без вставки) по полученной информации из анализа циклов. Анализ циклов производится следующей группой проходов:
Конечным проходом при распараллеливании с распределением данных является проход с названием INSERT\_PARALLEL\_DIRS, который производит вставку созданных директив в код. Главная его зависимость -- проход CREATE\_PARALLEL\_DIRS создания параллельных директив (без вставки) по полученной информации из анализа циклов. Анализ циклов производится следующей группой проходов:
\begin{itemize}
\item LOOP\_ANALYZER\_COMP\_DIST;
@@ -32,14 +32,14 @@
\item LOOP\_ANALYZER\_DATA\_DIST\_S0;
\end{itemize}
Они заполняют структуры, описывающие циклы, анализируют обращения к массивам внутри циклов, отображают обращения к массивам на циклы. Также они создают и заполняют структуру данных, позволяющую строить распределение данных -- \textit{граф измерений массивов}. Вместе с этим происходит вызов прохода CREATE\_TEMPLATE\_LINKS, который по построенному графу создаёт схему распределения данных. До них в работает ещё множество других проходов (всего порядка семидесяти), которые не относятся к распараллеливанию напрямую. Эти проходы не касаются распределения данных, поэтому они пристально не рассматривались. Часть дерева зависимостей прохода вставки параллельных директив изображена на Рис. \ref{fig:distr-alg}:
Они заполняют структуры, описывающие циклы, анализируют обращения к массивам внутри циклов, отображают обращения к массивам на циклы. Также они создают и заполняют структуру данных, позволяющую строить распределение данных -- \textit{граф измерений массивов}. Вместе с этим происходит вызов прохода CREATE\_TEMPLATE\_LINKS, который по построенному графу создаёт схему распределения данных. До них работает ещё множество других проходов (всего порядка семидесяти), которые не относятся к распараллеливанию напрямую. Эти проходы не касаются распределения данных, поэтому они детально не рассматривались. Часть дерева зависимостей прохода вставки параллельных директив изображена на Рис. \ref{fig:distr-alg}:
\pagebreak
\begin{figure}[h]
\centering
\includegraphics[scale=0.5]{src/assets/pass_deps_dist.png}
\caption{упрощённая схема работы проходов при распараллеливании с распределением данных.}
\caption{Упрощённая схема работы проходов при распараллеливании с распределением данных.}
\label{fig:distr-alg}
\end{figure}