init
This commit is contained in:
53
src/sections/task/aims.tex
Normal file
53
src/sections/task/aims.tex
Normal file
@@ -0,0 +1,53 @@
|
||||
\subsection{Постановка задачи, определение целей работы}
|
||||
|
||||
Так возникает задача добавления в систему SAPFOR дополнительного сценария работы -- распараллеливания фортран-программ без построения схемы распределения данных и с использованием директив PARALLEL без клаузы ON.
|
||||
|
||||
Требуется, чтобы новый режим мог обходить ограничения, накладываемые распределением данных, тем самым расширяя класс распараллеливаемых программ на общую память по сравнению со стандартным распараллеливанием на кластер. В частности, вставляемые директивы должны корректно описывать все данные, используемые в цикле, их область хранения в памяти и зависимости типа ACROSS, если они есть.
|
||||
|
||||
Также от добавляемого функционала естественно потребовать его \textit{корректность}: при условии, если входная программа корректная, то система SAPFOR должна выдавать правильную параллельную программу, которая должен успешно компилироваться и выполняться.
|
||||
|
||||
Помимо этого, результирующее распараллеливание должно быть эффективным, то есть давать приемлемый прирост производительности за счёт многопоточного выполнения: не замедлять программу существенно в худших случаях и получать распараллеливание, конкурирующие с ручным в лучших случаях. В это требование дополнительно входит расстановка оптимизирующих клауз TIE в директивы PARALLEL везде, где это возможно.
|
||||
|
||||
Поскольку работа ведётся в рамках доработки системы SAPFOR, решение должно быть в неё интегрировано должным образом:
|
||||
|
||||
\begin{itemize}
|
||||
\item в системе SAPFOR каждое преобразование оформляется в виде последовательности \textit{проходов} -- алгоритмов, которые логически разделены на блоки. Поэтому новый функционал должен быть реализован в виде нового прохода (или в виде последовательности новых проходов);
|
||||
|
||||
\item новый режим распараллеливания, должен учитывать и правильно обрабатывать директивы системы SAPFOR;
|
||||
|
||||
\item должна быть добавлена возможность вызова это режима через диалоговую графическую оболочку;
|
||||
|
||||
\item вместе с самим распараллеливанием должен быть добавлен функционал анализа входного кода, который выдавал бы информацию по распараллеливанию без фактической вставки директив. Аналогичный анализ в системе SAPFOR есть и для режима распараллеливания на кластер. Он служит для выявления проблем при автоматизированном распараллеливании;
|
||||
\end{itemize}
|
||||
|
||||
Ещё одной подцелью работы является проверка выполнения этих требований путём проведения тестирования на выбранном множестве программ, которые должны содержать достаточное количество распараллеливаемых циклов разных видов.
|
||||
|
||||
Рассмотрим небольшой пример ожидаемого распараллеливания на общую память на отрывке программы, реализующей алгоритм Якоби (см. Рис). Система SAPFOR должна успешно вставить все присутствующие директивы DVM-системы. При запуске анализа кода диалоговая система должна сообщить, что внешний цикл распараллелить нельзя (и указать причину), и что внутренние циклы распараллеливаются без препятствий.
|
||||
|
||||
\begin{lstlisting}[style=FORT,caption={
|
||||
пример ожидаемого распараллеливания.}]
|
||||
...
|
||||
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, что может дать дополнительное ускорение. Во-вторых, данный режим может быть полезен и при обычном распараллеливании с распределением данных: с его помощью можно предварительно оценивать программы на предмет потенциала к распараллеливанию, например заранее узнавать, какие циклы могут быть распараллелены, а какие нет. Используя полученную информацию, можно оценивать вероятность того, что распараллеливание даст положительный эффект ещё до создания схемы распределения данных.
|
||||
Reference in New Issue
Block a user