\subsection{Второй этап -- реализация}

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

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


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

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

В результате схема зависимостей изменилась следующим образом:
\pagebreak
\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.