Skip to content

AlexanderMeynik/distributedMathArh

Repository files navigation

Разработка и применение распределённой модели вычислений для моделирования системы диполей

Build and Test

Coverage Doc Coverage

Collect metrics

Описание проекта

Данный репозиторий содержит проект архитектуры из ВКР "Разработка и применение распределённой модели вычислений для моделирования системы диполей". Основные работы над ВКР производились с ноября 2024 по июнь 2025.

Doxygen документация

Содержание для markdown документации

legacy tasks

Стек технологий

Полный стек технологий

Основные инструменты и библиотеки:

  1. Drogon (1.9.10) — фреймворк для создания веб-сервисов.
  2. OpenSSL (3.0.2) — поставщик функций для организации безопасных соединений.
  3. jsoncpp (1.9.5) — сериализация объектов в формат JSON.
  4. libpq (14.13) — низкоуровневый клиент для PostgreSQL (зависимость libpqxx).
  5. libpqxx (7.10.0) — высокопроизводительный C++-клиент для взаимодействия с PostgreSQL.
  6. AMQP-CPP (4.3.27) — библиотека для асинхронного взаимодействия с RabbitMQ.
  7. hiredis (0.14.1) — клиент для Redis (используется вместе с Drogon).
  8. OpenMP (4.5) — модель параллелизма, может применяться совместно с Eigen.
  9. libcurl (7.81.0) — библиотека для выполнения HTTP-запросов с помощью curl.
  10. fmt (8.1.1) — библиотека для удобного форматирования и вывода данных.
  11. scnlib (4.0.1) - библиотека для упрощения считывания данных из форматированных строк.
  12. Boost (1.74) — используется Boost.Math (численное интегрирование) и Boost.Asio (асинхронный ввод-вывод).
  13. Eigen (3.4.0) — библиотека линейной алгебры с поддержкой векторизации.
  14. matplotplusplus (1.2.2) — библиотека визуализации данных поверх GNU plot.
  15. qt6-base (6.2.4) — реализация пользовательского GUI на базе Qt6.
  16. Google Test (1.15.0) — фреймворк для написания и запуска модульных тестов.
  17. Wiremock (?) — планируется использовать для будущего REST-тестирования.

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

Ниже приведена таблица зависимостей между поддиректориями проекта:

Модуль Пакетные зависимости Зависимости от модулей
utilLib Eigen3, jsoncpp, fmt
computationalLib OpenMP, amqpcpp, CURL, libpqxx,scn utilLib
computationalNode Drogon utilLib, computationalLib
client Qt6, Matplot++ utilLib
mainNode Drogon utilLib, computationalLib

Стоит учесть, что при отсутствии одного из элементов из списка, конфигурация системы не будет прервана на проверяемом модуле. Данный модуль в таком случае не будет собираться, о чём будет соответсвующее оповещение в cmake log.

Сборка проекта

На данный момент в проекте используются следующие опции сборки:

Опция Описание Значение по умолчанию
BUILD_TESTS Сборка тестовых сценариев OFF
BUILD_DOC Сборка документации OFF
BUILD_TYPE 1 Тип сборки проекта Release

В рамках некоторых тестовых сценариев применяется следующий перечень переменных окружения.

Переменная Описание
host Хост для RabbitMQ брокера
dbhost Хост для PostgreSQL БД
username Имя пользователя
password Парольпользователя

Данные переменные являются опциональными и применяются для настройки тестовых сценариев для сервисов AMQP и libpqxx. Данные аргументы используются в составе следующих троек: host;username;password и dbhost;username;password. При отсутствии одного из элементов тройки, соответствующие ей тесты не будут собраны, что будет отражено в логе cmake.

Минимальный скрипт для установки и сборки Release версии системы приведён ниже:

git clone https://github.com/AlexanderMeynik/distributedMathArh
cd distributedMathArh
mkdir build && cd build
cmake  .. 

Скрипт для установки и полной сборки проекта приведён ниже:

export host=http://localhost:15672
export pghost=http://localhost:5432
export username=sysadmin
export password=syspassword
git clone https://github.com/AlexanderMeynik/distributedMathArh
cd distributedMathArh
mkdir build && cd build
cmake -DCMAKE_BUILD_TYPE=Release-Coverage \
 -DBUILD_TESTS=ON -BUILD_DOC=ON .. 

Описание особенностей полученного ПО и ограничений

Исходная постановка численной задачи содержит следующие этапы: построение СЛАУ, решение СЛАУ, вычисление двухмерной сетки для целевой функции. Данные операции многократно повторяются для усреднения целевого функционала.

Особенности математической модели:

  1. Каждая итерация выполняется независимо от других, порядок итераций не играет значения.
  2. Расчёт агрегированной целевой функции не требует дополнительных итераций по значениям.
  3. Целевая функция нетривиально зависит от входных углов, что затрудняет векторизацию.

Разработанная система подходит для распределения задач Монте-Карло 2, однако её применение ограничивается задачами данного класса.

Особенности реализации:

  1. Аналитическое решение для получения целевой функции на 3 порядка превосходит численное.
  2. Итерации хорошо поддаются распараллеливанию: вплоть до 11 кратного ускорения для 16 потоков.
  3. Динамическая процедура распределения нагрузки основна на данных бенчмарков вычислительных узлов.
  4. Почти линейный коэффициент горизонтального масштабирования.
  5. Гибкость в настройке составляющих кластера: компоненты системы можно подключать при помощи выделенных HTTP эндпоинтов.
  6. Асинхронная реализация AMQP позволяет эффективно обрабатывать большой поток входящих задач.

Footnotes

  1. если BUILD_TYPE заканчивается на "-Coverage", то для всех файлов будут добавлены флаги для сбора покрытия

  2. Зайцева А. С. ПРАКТИЧЕСКИЕ ВОЗМОЖНОСТИ МЕТОДА МОНТЕ-КАРЛО ПРИ ИССЛЕДОВАНИИ СЛУЧАЙНЫХ ПРОЦЕССОВ //Научный редактор. – 2025. – С. 19.

About

Репозиторий дипломного проекта.

Resources

License

Stars

Watchers

Forks

Packages

No packages published