\subsection{Процесс реализации алгоритма распараллеливания на общую память}

Новый режим работы распараллеливания на общую память был оформлен как отдельных проход. По аналогии этот проход был назван \\ INSERT\_PARALLEL\_DIRS\_NODIST, что подчёркивает отсутствие построения распределения данных. Поскольку INSERT\_PARALLEL\_DIRS осуществляет только вставку созданных заранее директив, его функционал менять не пришлось, поэтому внутри INSERT\_PARALLEL\_DIRS\_NODIST вызывается код прохода INSERT\_PARALLEL\_DIRS.

Само создание текста параллельных директив, которое происходило в  проходе CREATE\_PARALLEL\_DIRS, подверглось изменениям. Оттуда полностью убран код, отвечающий за директивы распределения данных. Также изменён код для конструирования параллельных директив: убрано создание приставки ON в директиве и клауз удалённого доступа к данным, среди которых \texttt{SHADOW\_RENEW} и \texttt{REMOTE\_ACCESS}. Также был добавлен алгоритм заполнения клауз \texttt{TIE}. Оказалось, что новая версия CREATE\_PARALLEL\_DIRS стала намного компактнее и было решено не создавать для неё отдельный проход и сделать частью INSERT\_PARALLEL\_DIRS\_NODIST.


Также, новый проход не унаследовал зависимости от проходов \\ CREATE\_TEMPLATE\_LINKS и LOOP\_ANALYZER\_DATA\_DIST\_S*, поскольку они отвечали только за распределение данных. 

Проход LOOP\_ANALYZER\_COMP\_DIST пришлось переработать. Он отвечал за анализ обращений к массивам внутри цикла и распараллеливание на основе этой информации. Преобразованный проход получил название LOOP\_ANALYZER\_NODIST.

В результате схема зависимостей изменилась следующим образом:
\begin{figure}[h]
\centering
\includegraphics[scale=0.5]{src/assets/pass_deps_nodist_0.png}
\caption{Сравнение схемы работы проходов режима распараллеливания с распределением данных (слева) с новым режимом распараллеливания на общую память (справа).}
\end{figure}

Далее, следует сказать о ещё одной немаловажной части работы -- интеграции с инструментом для визуализации (диалоговой оболочкой) системы SAPFOR. Здесь требовалось реализовать два основных сценария работы. Первый основной сценарий -- запуск распараллеливания на общую память. Требовалось предоставить интерфейс для вызова прохода визуализатором. С этим не возникло сложностей, так как для этого потребовалось написать простую функцию \texttt{SPF\_SharedMemoryParallelization}, которую вызывает диалоговая оболочка и которая в свою очередь запускает проход INSERT\_PARALLEL\_DIRS\_NODIST. Второй сценарий работы предполагал запуск анализа распараллеливания без фактической вставки директив. Аналогично запуску распараллеливания, была добавлена возможность вызывать из визуализатора проход LOOP\_ANALYZER\_NODIST.