\section{Введение}

В современном мире спрос на вычисления растёт быстрее, чем тактовая частота работы процессоров, что обусловлено физическими проблемами и ограничениями. Из-за этого вычислительные системы наращивают свою мощь за счёт увеличения числа вычислительных ядер. Это привело к тому, что в настоящее время стала актуальна тема параллельных вычислений. Различные технологии параллельного программирования дают людям возможность эффективно использовать многоядерные процессоры и графические ускорители.

Создание параллельного кода -- задача, требующая больших трудозатрат и высокой квалификации. Есть технологии, которые требуют от разработчиков большого внимания к деталям распараллеливания. Они интегрируются в логику программ, что позволяет писать максимально эффективный код, что, в свою очередь, ведёт к дополнительному, иногда огромному, усложнению структур программ. Примерами таких технологий являются pthreads \cite{pthreads}, CUDA \cite{cuda}, HIP \cite{hip}, OpenCL \cite{opencl} и др.

Для борьбы со сложностью разработки параллельного кода были созданы средства, с помощью которых можно добиться распараллеливания не изменяя логику работы программ. При таком подходе можно потерять в эффективности по сравнению с предыдущими технологиями, но сэкономить человеческие ресурсы. Такие технологии обычно предоставляют программисту лёгкий и удобный интерфейс, оформленный в виде специальных директив компилятору. Сюда можно отнести технологии OpenMP \cite{openmp}, OpenACC \cite{openacc}, DVM \cite{dvm-site}.

Наконец, существуют инструменты, которые ещё сильнее снижают трудозатраты процесса распараллеливания. С помощью них можно в автоматизированном режиме получать параллельные программы из последовательных. Часто это накладывает ограничения на возможности распараллеливания, но ввиду нехватки человеческих ресурсов такой подход в определённых случаях может быть оправдан. К этому классу относятся инструменты такие как CAPTools/Parawise, FORGE Magic/DM, ParalWare Trainer, SAPFOR \cite{sapfor-1}.

Больших успехов в направлении экономии человеческих ресурсов достигли учёные из Института прикладной математики им. М.В. Келдыша Российской академии наук \cite{keldysh}. В Институте были разработаны и активно поддерживаются два средства параллельного программирования: это DVM-система \cite{dvm-site} -- программный комплекс для компиляции, выполнения и отладки параллельного кода, а также инструмент для автоматизированного распараллеливания программ -- система SAPFOR \cite{sapfor-1}, \cite{sapfor-2}.

Перед тем, как перейти к основной теме данной работы, в этой главе будут описаны некоторые сведения о параллельном программировании, как общеизвестные, так и относящиеся исключительно к DVM и SAPFOR, на базе которых и проводилась работа.

\input{src/sections/intro/general}
\input{src/sections/intro/dvm}
\input{src/sections/intro/sapfor}