53 lines
7.3 KiB
TeX
53 lines
7.3 KiB
TeX
\subsection{Постановка задачи, определение целей работы}
|
||
|
||
Так возникает задача добавления в систему SAPFOR дополнительного сценария работы -- распараллеливания Фортран-программ без построения схемы распределения данных и с использованием директивы \texttt{PARALLEL} без клаузы \texttt{ON}.
|
||
|
||
Требуется, чтобы новый режим мог обходить ограничения, накладываемые распределением данных, тем самым расширяя класс распараллеливаемых программ на общую память по сравнению со стандартным распараллеливанием на кластер. В частности, вставляемые директивы должны корректно описывать все данные, используемые в цикле, их область хранения в памяти и зависимости типа ACROSS, если они есть.
|
||
|
||
Также от добавляемого функционала естественно потребовать его \textit{корректность}: если входная программа корректная, то система SAPFOR должна выдавать правильную параллельную программу, которая будет успешно компилироваться и выполняться.
|
||
|
||
Помимо этого, результирующее распараллеливание должно быть эффективным, то есть давать приемлемый прирост производительности за счёт многопоточного выполнения: не замедлять программу существенно в худших случаях и получать распараллеливание, конкурирующие с ручным в лучших случаях. В это требование дополнительно входит расстановка оптимизирующих клауз \texttt{TIE} в директивы \texttt{PARALLEL} везде, где это возможно.
|
||
|
||
Поскольку работа ведётся в рамках доработки системы SAPFOR, решение должно быть в неё интегрировано должным образом:
|
||
|
||
\begin{itemize}
|
||
\item в системе SAPFOR каждое преобразование оформляется в виде последовательности \textit{проходов} -- алгоритмов, которые логически разделены на блоки. Поэтому новый функционал должен быть реализован в виде нового прохода (или в виде последовательности новых проходов);
|
||
|
||
\item новый режим распараллеливания должен учитывать и правильно обрабатывать директивы системы SAPFOR;
|
||
|
||
\item должна быть добавлена возможность вызова этого режима через диалоговую графическую оболочку;
|
||
|
||
\item вместе с самим распараллеливанием должен быть добавлен функционал анализа входного кода, который выдавал бы информацию по распараллеливанию без фактической вставки директив. Аналогичный анализ в системе SAPFOR есть и для режима распараллеливания на кластер. Он помогает пользователю выявлять проблемы при автоматизированном распараллеливании.
|
||
\end{itemize}
|
||
|
||
Ещё одной подзадачей работы является проверка выполнения этих требований путём проведения тестирования на множестве программ, которые должны содержать достаточное количество распараллеливаемых циклов разных видов.
|
||
|
||
Рассмотрим небольшой пример распараллеливания на общую память на части программы, реализующей алгоритм Якоби (см. Листинг \ref{lst:jac}). Система SAPFOR должна успешно вставить все присутствующие директивы DVM-системы. При запуске анализа кода диалоговая система должна сообщить, что внешний цикл распараллелить нельзя (и указать причину), и что внутренние циклы могут быть распараллелены без препятствий.
|
||
|
||
\pagebreak
|
||
|
||
\begin{lstlisting}[style=FORT,caption={
|
||
Пример распараллеливания на общую память.},label={lst:jac}]
|
||
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
|
||
3 continue
|
||
\end{lstlisting}
|
||
|
||
В дополнение к описанному, существует ещё несколько сценариев использования системы SAPFOR, при котором может пригодиться новый функционал. Во-первых, с помощью режима распараллеливания на общую память можно будет распараллеливать программы, написаные с использованием технологии MPI \cite{mpi}, что может дать дополнительное ускорение. Во-вторых, данный режим может быть полезен и при обычном распараллеливании с распределением данных: с его помощью можно предварительно оценивать программы на предмет потенциала к распараллеливанию, например заранее узнавать, какие циклы могут быть распараллелены, а какие нет. Используя полученную информацию, можно оценивать вероятность того, что распараллеливание даст положительный эффект ещё до создания схемы распределения данных. |