v4
This commit is contained in:
@@ -1,10 +1,10 @@
|
||||
\subsection{Постановка задачи, определение целей работы}
|
||||
|
||||
Так возникает задача добавления в систему SAPFOR дополнительного сценария работы -- распараллеливания фортран-программ без построения схемы распределения данных и с использованием директив \texttt{PARALLEL} без клаузы \texttt{ON}.
|
||||
Так возникает задача добавления в систему SAPFOR дополнительного сценария работы -- распараллеливания Фортран-программ без построения схемы распределения данных и с использованием директивы \texttt{PARALLEL} без клаузы \texttt{ON}.
|
||||
|
||||
Требуется, чтобы новый режим мог обходить ограничения, накладываемые распределением данных, тем самым расширяя класс распараллеливаемых программ на общую память по сравнению со стандартным распараллеливанием на кластер. В частности, вставляемые директивы должны корректно описывать все данные, используемые в цикле, их область хранения в памяти и зависимости типа ACROSS, если они есть.
|
||||
|
||||
Также от добавляемого функционала естественно потребовать его \textit{корректность}: при условии, если входная программа корректная, то система SAPFOR должна выдавать правильную параллельную программу, которая должен успешно компилироваться и выполняться.
|
||||
Также от добавляемого функционала естественно потребовать его \textit{корректность}: если входная программа корректная, то система SAPFOR должна выдавать правильную параллельную программу, которая будет успешно компилироваться и выполняться.
|
||||
|
||||
Помимо этого, результирующее распараллеливание должно быть эффективным, то есть давать приемлемый прирост производительности за счёт многопоточного выполнения: не замедлять программу существенно в худших случаях и получать распараллеливание, конкурирующие с ручным в лучших случаях. В это требование дополнительно входит расстановка оптимизирующих клауз \texttt{TIE} в директивы \texttt{PARALLEL} везде, где это возможно.
|
||||
|
||||
@@ -17,16 +17,17 @@
|
||||
|
||||
\item должна быть добавлена возможность вызова этого режима через диалоговую графическую оболочку;
|
||||
|
||||
\item вместе с самим распараллеливанием должен быть добавлен функционал анализа входного кода, который выдавал бы информацию по распараллеливанию без фактической вставки директив. Аналогичный анализ в системе SAPFOR есть и для режима распараллеливания на кластер. Он служит для выявления проблем при автоматизированном распараллеливании;
|
||||
\item вместе с самим распараллеливанием должен быть добавлен функционал анализа входного кода, который выдавал бы информацию по распараллеливанию без фактической вставки директив. Аналогичный анализ в системе SAPFOR есть и для режима распараллеливания на кластер. Он помогает пользователю выявлять проблемы при автоматизированном распараллеливании.
|
||||
\end{itemize}
|
||||
|
||||
Ещё одной подцелью работы является проверка выполнения этих требований путём проведения тестирования на выбранном множестве программ, которые должны содержать достаточное количество распараллеливаемых циклов разных видов.
|
||||
Ещё одной подзадачей работы является проверка выполнения этих требований путём проведения тестирования на множестве программ, которые должны содержать достаточное количество распараллеливаемых циклов разных видов.
|
||||
|
||||
Рассмотрим небольшой пример ожидаемого распараллеливания на общую память на отрывке программы, реализующей алгоритм Якоби (см. Рис). Система SAPFOR должна успешно вставить все присутствующие директивы DVM-системы. При запуске анализа кода диалоговая система должна сообщить, что внешний цикл распараллелить нельзя (и указать причину), и что внутренние циклы распараллеливаются без препятствий.
|
||||
Рассмотрим небольшой пример распараллеливания на общую память на части программы, реализующей алгоритм Якоби (см. Листинг \ref{lst:jac}). Система SAPFOR должна успешно вставить все присутствующие директивы DVM-системы. При запуске анализа кода диалоговая система должна сообщить, что внешний цикл распараллелить нельзя (и указать причину), и что внутренние циклы могут быть распараллелены без препятствий.
|
||||
|
||||
\pagebreak
|
||||
|
||||
\begin{lstlisting}[style=FORT,caption={
|
||||
пример ожидаемого распараллеливания.}]
|
||||
...
|
||||
Пример распараллеливания на общую память.},label={lst:jac}]
|
||||
do it = 1,itmax
|
||||
eps = 0.
|
||||
!DVM$ REGION
|
||||
@@ -46,8 +47,7 @@
|
||||
!DVM$ END REGION
|
||||
if (eps .lt. maxeps) goto 3
|
||||
enddo
|
||||
3 continue
|
||||
...
|
||||
3 continue
|
||||
\end{lstlisting}
|
||||
|
||||
В дополнение к описанному, существует ещё несколько сценариев использования системы SAPFOR, при котором может пригодиться новый функционал. Во-первых, с помощью режима распараллеливания на общую память можно будет распараллеливать программы, написаные на технологии MPI, что может дать дополнительное ускорение. Во-вторых, данный режим может быть полезен и при обычном распараллеливании с распределением данных: с его помощью можно предварительно оценивать программы на предмет потенциала к распараллеливанию, например заранее узнавать, какие циклы могут быть распараллелены, а какие нет. Используя полученную информацию, можно оценивать вероятность того, что распараллеливание даст положительный эффект ещё до создания схемы распределения данных.
|
||||
В дополнение к описанному, существует ещё несколько сценариев использования системы SAPFOR, при котором может пригодиться новый функционал. Во-первых, с помощью режима распараллеливания на общую память можно будет распараллеливать программы, написаные с использованием технологии MPI \cite{mpi}, что может дать дополнительное ускорение. Во-вторых, данный режим может быть полезен и при обычном распараллеливании с распределением данных: с его помощью можно предварительно оценивать программы на предмет потенциала к распараллеливанию, например заранее узнавать, какие циклы могут быть распараллелены, а какие нет. Используя полученную информацию, можно оценивать вероятность того, что распараллеливание даст положительный эффект ещё до создания схемы распределения данных.
|
||||
@@ -9,14 +9,13 @@
|
||||
|
||||
\item \texttt{REGION} -- определяет область кода, которую следует выполнять параллельно;
|
||||
|
||||
\item \texttt{PARALLEL ... ON} -- определяет цикл, витки которого следует выполнять параллельно, при этом задавая отображение пространства витков цикла на распределённый массив;
|
||||
\item \texttt{PARALLEL ... ON} -- определяет цикл, витки которого следует выполнять параллельно, при этом задавая отображение пространства витков цикла на распределённый массив.
|
||||
\end{itemize}
|
||||
|
||||
|
||||
\begin{lstlisting}[style=FORT,caption={
|
||||
пример распараллеленного в модели DVM гнезда циклов. Здесь происходит отображение элементов массива B на элементы массива A, распределение массива A и распараллеливание гнезда циклов. При запуске на кластере каждый узел получит непрерывные и примерно равные секции массива A, точно такие же секции B и соответствующие этим элементам итерации цикла.
|
||||
Пример распараллеленного в модели DVM гнезда циклов. Здесь происходит отображение элементов массива B на элементы массива A, распределение массива A и распараллеливание гнезда циклов. При запуске на кластере каждый узел получит непрерывные и примерно равные секции массива A, точно такие же секции массива B и соответствующие этим секциям итерации цикла.
|
||||
}]
|
||||
...
|
||||
!DVM$ DISTRIBUTE (BLOCK,BLOCK) :: A
|
||||
!DVM$ ALIGN B(I,J) WITH A(I,J)
|
||||
|
||||
@@ -29,17 +28,15 @@
|
||||
END DO
|
||||
END DO
|
||||
!DVM$ END REGION
|
||||
...
|
||||
\end{lstlisting}
|
||||
|
||||
Чтобы дать пользователю возможность распараллеливать программы на общую память, в синтаксис языка DVM-системы была добавлена новая форма директивы \texttt{PARALLEL} для распараллеливания без распределения данных.
|
||||
Чтобы дать пользователю возможность распараллеливать программы на общую память, в синтаксис языка модели DVMH была добавлена новая форма директивы \texttt{PARALLEL} для распараллеливания без распределения данных.
|
||||
|
||||
Новый вариант директивы \texttt{PARALLEL} отличается от исходного тем, что в ней отсутствует клауза \texttt{ON}. При использовании таких директив не надо указывать распределённые массивы. Сами директивы распределения данных также не нужны в таких программах. Более того, в таких директивах \texttt{PARALLEL} не должны присутствовать клаузы доступа к удалённым данных, такие как \texttt{SHADOW\_RENEW}, \texttt{SHADOW\_COMPUTE} и \texttt{REMOTE\_ACCESS}.
|
||||
Новый вариант директивы \texttt{PARALLEL} отличается от исходного тем, что в ней отсутствует клауза \texttt{ON}. При использовании таких директив не надо указывать распределённые массивы при отображении витков параллельных циклов. Сами директивы распределения данных также не нужны в таких программах. Более того, в таких директивах \texttt{PARALLEL} не должны присутствовать клаузы доступа к удалённым данным, такие как \texttt{SHADOW\_RENEW}, \texttt{SHADOW\_COMPUTE} и \texttt{REMOTE\_ACCESS}.
|
||||
|
||||
\begin{lstlisting}[style=FORT,caption={
|
||||
пример распарараллеливания гнезда циклов на общую память.
|
||||
Пример распарараллеливания гнезда циклов на общую память.
|
||||
}]
|
||||
...
|
||||
!DVM$ REGION
|
||||
!DVM$ PARALLEL (I,J), REDUCTION (MAX(EPS)), TIE(A(I, J), B(I, J))
|
||||
DO I = 1, N
|
||||
@@ -49,7 +46,6 @@
|
||||
END DO
|
||||
END DO
|
||||
!DVM$ END REGION
|
||||
...
|
||||
\end{lstlisting}
|
||||
|
||||
Также в таком варианте директивы \texttt{PARALLEL} может присутствовать клауза \texttt{TIE}, сопоставляющая итерации цикла с массивом. Она используется в DVM-системе для улучшения производительности выходного исполняемого кода.
|
||||
В таком варианте директивы \texttt{PARALLEL} может присутствовать клауза \texttt{TIE}, сопоставляющая итерации цикла с массивом. Она используется в DVM-системе для улучшения производительности выходного исполняемого кода.
|
||||
@@ -1,5 +1,5 @@
|
||||
\subsection{Обзор существующих решений}
|
||||
|
||||
Исследования по теме автоматизированного распараллеливания программ ведутся достаточно давно. На данный момент существует не так много широко используемых средств, позволяющих получать параллельный код. Среди средств, которые в той или иной степени помогают в процессе распараллеливания программ можно выделить следующие: Polaris, CAPO, WPP, SUIF, VAST/Parallel, OSCAR, ParallelWare, Intel Parallel Studio XE.
|
||||
Исследования по теме автоматизированного распараллеливания программ ведутся достаточно давно. На данный момент существует не так много широко используемых средств, позволяющих получать параллельный код. Среди средств, которые в той или иной степени помогают в процессе распараллеливания программ можно выделить следующие: Polaris \cite{polaris}, CAPO, WPP, SUIF, VAST/Parallel, OSCAR \cite{oscar}, ParallelWare, Intel Parallel Studio XE \cite{intel}.
|
||||
|
||||
Однако, открытых реализаций алгоритмов распараллеливания почти нет, поэтому за основу решения был взят уже существующий в системе SAPFOR режим распараллеливания с распределением данных. Этот подход не только помог учесть спицифику языков фортран и DVM, но и позволил минимизировать объём внесённых в систему SAPFOR изменений.
|
||||
Однако, открытых реализаций алгоритмов распараллеливания почти нет, поэтому за основу решения был взят уже существующий в системе SAPFOR режим распараллеливания с распределением данных. Этот подход не только помог учесть специфику языков Фортран и DVMH, но и позволил минимизировать объём внесённых в систему SAPFOR изменений.
|
||||
@@ -1,3 +1,3 @@
|
||||
\subsection{Мотивация поддержки режима распараллеливания на общую память в системе SAPFOR}
|
||||
\subsection{Мотивация поддержки в системе SAPFOR}
|
||||
|
||||
Поскольку система SAPFOR не способна проанализировать все тонкости логики работы программы, процесс построения оптимальной схемы распределения данных затрудняется. Поэтому аналогичная потребность в функционале распараллеливания на общую память возникает и в системе SAPFOR. Таким образом, реализация нового режима работы системы SAPFOR для распараллеливания на общую память стала для данной работы основной целью, которая детально описывается в последующих параграфах.
|
||||
Как было отмечено выше, разные циклы могут требовать разных схем распределения данных. Из-за этого возникает проблема поиска оптимального варианта распределения данных при распараллеливании таких программ через систему SAPFOR. Поэтому аналогичная потребность в функционале распараллеливания на общую память возникает и в системе SAPFOR. Таким образом, реализация нового режима работы системы SAPFOR для распараллеливания на общую память стала для данной работы основной целью, которая детально описывается в последующих разделах.
|
||||
@@ -2,11 +2,11 @@
|
||||
|
||||
При написании параллельных DVMH-программ пользователь решает две задачи: он должен найти оптимальный способ распределения данных и обозначить циклы, которые могут выполняться параллельно. На практике нередко возникают ситуации, когда для рассматриваемой программы решить первую задачу трудно или невозможно, но вторая задача решается успешно, то есть программа обладает хорошим потенциалом для распараллеливания.
|
||||
|
||||
Основной проблемой, возникающей при попытке построить схему распределения данных, является то, что разные циклы для их распараллеливания могут требовать разных, конфликтующих, схем распределения данных. При распараллеливании практически значимых программ, в силу их объёмности, такие конфликты возникают повсеместно. Эта проблема подробно рассматривается в \cite{par-reg}.
|
||||
Основной проблемой, возникающей при попытке построить схему распределения данных, является то, что разные циклы для их распараллеливания могут требовать разных, конфликтующих схем распределения данных. В силу объёмности практически значимых программ при их распараллеливании такие конфликты возникают повсеместно. Эта проблема подробно рассматривается в \cite{par-reg}.
|
||||
|
||||
Выходом из такой ситуации является рассмотрение частного случая -- распараллеливания на общую память. При таком распараллеливании предполагается, что целевая вычислительная система состоит из единственного устройства. Это ограничение позволяет обойти потребность в распределении данных, так как все данные располагаются в общей оперативной памяти устройства.
|
||||
Выходом из такой ситуации является рассмотрение частного случая -- распараллеливания на общую память. При таком распараллеливании предполагается, что целевая вычислительная система состоит из единственного устройства. Это ограничение позволяет убрать необходимость в распределении данных, так как все данные располагаются в общей оперативной памяти устройства.
|
||||
|
||||
В качестве устройства для запуска программы, распараллеленной на общую память, можно рассматривать многопоточный процссор или графический ускоритель (видеокарту).
|
||||
В качестве устройства для запуска программы, распараллеленной на общую память, можно рассматривать многопоточный процeссор или графический ускоритель.
|
||||
|
||||
\input{src/sections/task/dvm_shared}
|
||||
\input{src/sections/task/sapfor_shared}
|
||||
|
||||
Reference in New Issue
Block a user