Направления работ в проекте SAPFOR 2.x

Изучите руководство пользователя

Что такое DVMH-модель, DVMH-язык и DVMH-программа? Как начать использовать DVM-систему?

Документация

Посмотрите примеры программ
Как просто и эффективно распараллелить методы решения системы линейных уравнений?

Примеры программ

Данный проект направлен на развитие новой версии системы SAPFOR 2.x (System FOR Automated Parallelization), предназначенной для автоматизации распараллеливания программ в модели DVMH, OpenMP, MPI и др. Работы направлены на расширение уже реализованных возможностей по анализу и распараллеливанию FORTRAN программ. Работы выполняются на базе собственного внутреннего представления с помощью библиотеки Sage++, а также на базе единого представления программ в виде SPF IR (упрощенная реализация LLVM IR). В состав системы SAPFOR входят статические и динамические анализаторы, преобразователи кода и диалоговая система распараллеливания, реализованная в виде отдельного приложения. Данная диалоговая система позволяет проводить весь спектр анализа и преобразований, доступные в системе SAPFOR на данный момент, а также выполнять отладку и запуск полученных программ на локальной или удаленной машинах. В случае возникновения ошибки в системе SAPFOR есть возможность отправить ошибочную ситуацию разработчику.
Разработка ведется в основном на C++ 11, диалоговая оболочка написана на JAVA (Oracle JAVA). Выполняемые работы можно разделить на несколько групп, но стоит понимать, что такое деление достаточно условно, все работы взаимосвязаны и направлены на достижение общей цели: упростить разработку параллельных программ.

Статический анализ

Анализ свойств исходной программы, необходимых для ее распараллеливания. Свойства могут касаться как соответствия синтаксических конструкций языка ограничениям выбранной модели параллелизма (например, тесная вложенность циклов, каноническая форма циклов и т.д.), так и относиться к потоку управления и потоку данных внутри программы (наличие зависимостей по данным, достижимость определенных точек кода, наличие инвариантов цикла и др.). Анализ выполняется как на уровне исходного кода программы, представленного в виде абстрактного синтаксического дерева (Sage AST), так и в виде внутреннего низкоуровневого представления SPF IR.

Динамический анализ

В отличие от статического, данный вид анализа выполняется в процессе выполнения программы, запущенной над заранее подготовленными входными данными. За счет конкретизации используемых данных можно получить более точные результаты анализа, в точности отследив выполнение программы, но в отличие от статического анализа, результаты которого верны для всевозможных входных данных, выводы, сделанные в ходе динамического анализа, могут оказаться неверными при запуске программы в других условиях. Кроме того любые дополнительные действия над программой, связанные с ее исследованием в процессе выполнения, приводят к дополнительным накладным расходам. Такие накладные расходы могут приводить к невозможности дождаться завершения динамического анализа. Таким образом, при разработке средств динамического анализа необходимо принимать компромиссные решения, чтобы обеспечить его выполнимость и полноту получаемых данных. Динамический анализ может быть направлен на получение информации, связанной с профилем выполнения программы, в том числе с определением наиболее ресурсоемких участков кода, занимающих максимальное время выполнения и требующих распараллеливание или оптимизацию в первую очередь. Также динамический анализ может быть направлен на получение свойств объектов программы, таких как переменные, циклы, функции и др., например, обнаружение зависимостей по данным. В системе SAPFOR анализ выполняется в первую очередь за счет модификации представления программы в виде LLVM IR (вставки обращений к библиотеке динамического анализа) и реализации соответствующей библиотеки анализа.

Преобразование исходного кода

Выполнение преобразований, необходимых для распараллеливания программы (например, для устранения найденных зависимостей или других проблем), а также для повышения ресурса параллелизма в программе. Преобразования выполняются на уровне исходного кода программы с использованием Sage AST, что существенно упрощает их реализацию по сравнению с фронтендами Flang или Clang. Проверки допустимости преобразований реализуются как на уровне исходного кода на базе абстрактного синтаксического дерева программы (синтаксические и семантические проверки), так и на уровне внутреннего представления SPF IR (семантические проверки).

Построение параллельных версий программ

Построение параллельной версии программы в соответствии с выбранной моделью (DVMH, OpenMP, MPI, …). Сюда относятся как вставка соответствующих спецификаций параллелизма в исходный код программы, так и агрегация результатов проведенных анализов с целью определить допустимость распараллеливания как отдельных фрагментов, так и всей программы в целом. Кроме того ставится задача выбрать наиболее подходящие спецификации параллелизма и их параметры. Вставка директив выполняется на уровне исходного кода, анализ может выполняться как на уровне исходного кода, так и на уровне внутреннего представления программы в системе.

Диалоговая оболочка

Система SAPFOR опирается на тесное взаимодействие с пользователем и неотъемлемой ее частью является диалоговая оболочка, отвечающая за поддержание процесса распараллеливания программы. Работы в данном направлении связаны с реализацией различных модулей инструмента,, написанного на Oracle JAVA 8. Одна из основных задач — интеграция отображения результатов анализа системы SAPFOR 3.х, что потребует изучения проекта SAPFOR 3.х, а также изучения необходимых данных, которые заполняются в проекте SAPFOR 2.x для данной диалоговой оболочки. Диалоговая составляющая включает в себя:

  • визуализацию найденных системой свойств программы (работа с памятью, зависимости по данным в циклах, граф потока управления, структура программы и др.);
  • создание и управление проектом, описывающим программу;
  • контроль версий программы, порождаемых в ходе ее преобразования и распараллеливания;
  • создание сценариев анализа и модификации программы.
Первые шаги

Исходные коды SAPFOR 2.x доступны на Bitbucket.
Исходные коды диалоговой оболочки доступны на Bitbucket.
Сборка системы возможна на Windows, Linux и Mac OS. Для разработки SAPFOR 2.x предпочтительнее использовать Visual Studio 2022 и выше в OS Windows. Для разработки диалоговой оболочки предпочтительнее использовать IntelliJ. Инструкция по установке и сборке каждого из компонент доступна в README. Подробное описание возможностей библиотеки Sage++ и принципов работы с AST, а также настройки и установки системы SAPFOR 2.x описаны в инструкции.