Files
bachelor_thesis/src/sections/task/aims.tex

53 lines
7.3 KiB
TeX
Raw Normal View History

2024-05-06 19:59:07 +03:00
\subsection{Постановка задачи, определение целей работы}
2024-05-09 16:15:46 +03:00
Так возникает задача добавления в систему SAPFOR дополнительного сценария работы -- распараллеливания Фортран-программ без построения схемы распределения данных и с использованием директивы \texttt{PARALLEL} без клаузы \texttt{ON}.
2024-05-06 19:59:07 +03:00
Требуется, чтобы новый режим мог обходить ограничения, накладываемые распределением данных, тем самым расширяя класс распараллеливаемых программ на общую память по сравнению со стандартным распараллеливанием на кластер. В частности, вставляемые директивы должны корректно описывать все данные, используемые в цикле, их область хранения в памяти и зависимости типа ACROSS, если они есть.
2024-05-09 16:15:46 +03:00
Также от добавляемого функционала естественно потребовать его \textit{корректность}: если входная программа корректная, то система SAPFOR должна выдавать правильную параллельную программу, которая будет успешно компилироваться и выполняться.
2024-05-06 19:59:07 +03:00
2024-05-06 21:42:13 +03:00
Помимо этого, результирующее распараллеливание должно быть эффективным, то есть давать приемлемый прирост производительности за счёт многопоточного выполнения: не замедлять программу существенно в худших случаях и получать распараллеливание, конкурирующие с ручным в лучших случаях. В это требование дополнительно входит расстановка оптимизирующих клауз \texttt{TIE} в директивы \texttt{PARALLEL} везде, где это возможно.
2024-05-06 19:59:07 +03:00
Поскольку работа ведётся в рамках доработки системы SAPFOR, решение должно быть в неё интегрировано должным образом:
\begin{itemize}
\item в системе SAPFOR каждое преобразование оформляется в виде последовательности \textit{проходов} -- алгоритмов, которые логически разделены на блоки. Поэтому новый функционал должен быть реализован в виде нового прохода (или в виде последовательности новых проходов);
2024-05-06 21:42:13 +03:00
\item новый режим распараллеливания должен учитывать и правильно обрабатывать директивы системы SAPFOR;
2024-05-06 19:59:07 +03:00
2024-05-06 21:42:13 +03:00
\item должна быть добавлена возможность вызова этого режима через диалоговую графическую оболочку;
2024-05-06 19:59:07 +03:00
2024-05-09 16:15:46 +03:00
\item вместе с самим распараллеливанием должен быть добавлен функционал анализа входного кода, который выдавал бы информацию по распараллеливанию без фактической вставки директив. Аналогичный анализ в системе SAPFOR есть и для режима распараллеливания на кластер. Он помогает пользователю выявлять проблемы при автоматизированном распараллеливании.
2024-05-06 19:59:07 +03:00
\end{itemize}
2024-05-09 16:15:46 +03:00
Ещё одной подзадачей работы является проверка выполнения этих требований путём проведения тестирования на множестве программ, которые должны содержать достаточное количество распараллеливаемых циклов разных видов.
2024-05-06 19:59:07 +03:00
2024-05-09 16:15:46 +03:00
Рассмотрим небольшой пример распараллеливания на общую память на части программы, реализующей алгоритм Якоби (см. Листинг \ref{lst:jac}). Система SAPFOR должна успешно вставить все присутствующие директивы DVM-системы. При запуске анализа кода диалоговая система должна сообщить, что внешний цикл распараллелить нельзя (и указать причину), и что внутренние циклы могут быть распараллелены без препятствий.
\pagebreak
2024-05-06 19:59:07 +03:00
\begin{lstlisting}[style=FORT,caption={
2024-05-09 16:15:46 +03:00
Пример распараллеливания на общую память.},label={lst:jac}]
2024-05-06 19:59:07 +03:00
do it = 1,itmax
eps = 0.
!DVM$ REGION
!DVM$ PARALLEL (j,i), PRIVATE (i,j),TIE (a(i,j),b(i,j)),REDUCTION (max (eps))
do j = 2,l - 1
do i = 2,l - 1
eps = max (eps,abs (b(i,j) - a(i,j)))
a(i,j) = b(i,j)
enddo
enddo
!DVM$ PARALLEL (j,i), PRIVATE (i,j),TIE (a(i,j),b(i,j))
do j = 2,l - 1
do i = 2,l - 1
b(i,j) = calculate (a(i - 1,j) + a(i,j - 1) + a(i + 1,j) + a(i,j + 1))
enddo
enddo
!DVM$ END REGION
if (eps .lt. maxeps) goto 3
enddo
2024-05-09 16:15:46 +03:00
3 continue
2024-05-06 19:59:07 +03:00
\end{lstlisting}
2024-05-09 16:15:46 +03:00
В дополнение к описанному, существует ещё несколько сценариев использования системы SAPFOR, при котором может пригодиться новый функционал. Во-первых, с помощью режима распараллеливания на общую память можно будет распараллеливать программы, написаные с использованием технологии MPI \cite{mpi}, что может дать дополнительное ускорение. Во-вторых, данный режим может быть полезен и при обычном распараллеливании с распределением данных: с его помощью можно предварительно оценивать программы на предмет потенциала к распараллеливанию, например заранее узнавать, какие циклы могут быть распараллелены, а какие нет. Используя полученную информацию, можно оценивать вероятность того, что распараллеливание даст положительный эффект ещё до создания схемы распределения данных.