README.md

DVCompute++ Simulator

DVCompute++ Simulator (номер свидетельства 2021660726 Роспатента) - это общецелевой дискретно-событийный симулятор, который позволяет создавать последовательные, вложенные и распределенные имитационные модели на C++. В последнем случае симулятор реализует как оптимистичный метод деформации времени (англ. Time Warp), так и консервативный алгоритм нулевых сообщений. Для этого симулятор будет использовать заданную реализацию протокола MPI. Вы можете выбрать любую реализацию MPI, которая поддерживает соответствующий стандарт.

Симулятор поддерживает событийно-ориентированную парадигму и шаблон Observable, что делает симулятор подходящим для моделирования аппаратуры, такой как цифровые интегральные микросхемы.

Также симулятор поддерживает дискретные процессы и GPSS-подобные блоки, что делает симулятор подходящим для моделирования сетей очередей (систем массового обслуживания).

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

Вы можете прочитать документ PDF под названием “Введение в DVCompute++ Simulator” в приложенном файле doc/dvcomputexx-tutorial.pdf.

Единый метод для моделирования

Все модули симулятора используют ту же самую кодовую базу для разных режимов имитации. Это один подход, один метод. Поэтому вы можете переносить ваши имитационные модели между разными модулями. Например, вы можете начать работать с последовательной моделью, а затем вы можете перевести ее в распределенную имитационную модель или вложенную.

Последовательное моделирование

Исходный код полностью доступен в дистрибутиве DVCompute++ Simulator для создания и запуска последовательных имитационных моделей. Это - основной вариант использования. Более того, вы можете использовать Emscripten для WebAssembly.

Вложенное моделирование

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

Распределенное моделирование

DVCompute++ Simulator также поддерживает распределенную имитацию, где реализованы два метода: оптимистичный метод деформации времени (англ. Time Warp) и консервативный алгоритм нулевых сообщений. Оба метода нацелены на запуск имитационных моделей на суперкомпьютерах с помощью использования протокола MPI для взаимодействия между логическими процессами.

Тем не менее, чтобы запустить распределенные модели, вам также понадобятся части “библиотечного кода” (англ. “Library Code” portions), говоря языком лицензионного соглашения. Здесь будет программная библиотека dvcompute_dist для оптимистичного метода и dvcompute_cons для консервативного. Библиотеки не доступны в исходных кодах. Для получения тестовых версий этих библиотек следует запросить их по почте davsor@mail.ru (меня зовут Давид Сорокин).

Системные требования

Поддерживаются операционные системы Windows, macOS и Linux, в частности, ОС “Эльбрус Линукс”.

Сборка кода была проверена на архитектурах “Intel x86_64” и “Elbrus e2k” с помощью следующих компиляторов C++: GCC, Clang, Microsoft C++ и MCST LCC.

Требуется компилятор C++ с поддержкой стандарта C++17 с некоторыми элементами стандарта C++20.

Примеры

Если вы желаете запустить пример, то я бы рекомендовал начать с модели замкнутой сети очередей (англ. Closed Queue Network - CQN). Эта модель часто используется для тестирования симуляторов. Вы можете найти следующие версии:

  • Модель examples/experiment_cqn. Это последовательный режим имитации;

  • Модель examples/experiment_cqn_dist. Это распределенная имитационная модель, где каждый тандем очередей обрабатывается отдельным логическим процессом. Используется оптимистичный метод деформации времени;

  • Модель examples/experiment_cqn_cons. Это тоже распределенная имитационная модель, где каждый тандем очередей обрабатывается отдельным логическим процессом, но только здесь уже используется консервативный алгоритм нулевых сообщений.

Для вывода графиков ожидается, что на системе установлена программа Gnuplot, и что она запускается с любого рабочего каталога (последнее более актуально для системы Windows - может потребоваться дополнительная настройка, чтобы добавить путь к программе GnuPlot в переменную окружения Path).

Если вы пока не желаете использовать части “библиотечного кода” (англ. “Library Code” portions), то тогда вы можете начать с первой модели. Она не потребует дополнительных настроек.

Установка и компиляция кода

Чтобы собрать примеры, вам нужны будут соответствующие библиотеки:

  • dvcompute (режим последовательной имитации);

  • dvcompute_branch (режим вложенной имитации);

  • dvcompute_dist (опциональная реализация оптимистичного метода деформации времени);

  • dvcompute_cons (опциональная реализация консервативного алгоритма нулевых сообщений).

Вы сами можете собрать из исходников только первые две библиотеки. Последние две библиотеки являются частью “библиотечного кода” (англ. “Library Code” portions), как они называются в лицензионном соглашении.

Сборка и установка программных библиотек

Чтобы собрать первые две библиотеки, возьмите исходный корневой файл CMakeLists.txt и запустите утилиту cmake-gui (устанавливается вместе с CMake). Убедитесь, что в настройках включена опция BuildLibs, а также укажите значение для параметра CMAKE_INSTALL_PREFIX, куда будут установлены программные библиотеки.

Конфигурация

Затем нажмите на кнопку “Configure”, а потом на “Generate”, после чего соберите соответствующий проект CMake, либо с помощью Visual Studio, Xcode, из консоли или любым другим способом.

После того, как вы собрали библиотеки, пожалуйста, установите их. Это может быть сделано или через вызов команды cmake --install из консоли, или через вызов make install, если вы использовали Makefile, или через построение решения INSTALL в Visual Studio.

В результате программные библиотеки будут установлены туда, куда указывал параметр CMAKE_INSTALL_PREFIX во время конфигурирования проекта с помощью утилиты cmake-gui.

Теперь библиотеки будут доступны в рамках пакета dvcompute с целями dvcompute (для последовательного моделирования) и dvcompute_branch (для вложенного моделирования). В случае, если вы имеете доступ к программным библиотекам для распределенного моделирования, то тогда будут новые цели dvcompute_dist (для оптимистичного метода распределенного моделирования) и dvcompute_cons (для консервативного метода распределенного моделирования).

Сборка примеров для последовательного и вложенного моделирования

Теперь чтобы собрать примеры, снова запустите утилиту cmake-gui. Выключите опцию BuildLibs, но включите опции BuildExamples и BuildBranchExamples. После этого вы можете снова собрать соответствующий проект CMake. Двоичные файлы примеров должны быть собраны.

Сборка примеров для распределенного моделирования

Если у вас есть опциональные части “библиотечного кода” (англ. “Library Code” portions), т.е. ядра в виде статических библиотек для распределенного моделирования, то тогда вы можете собрать соответствующие примеры распределенной имитации.

Чтобы сделать это, вы можете применить ту же процедуру, т.е. выключить опцию BuildLibs, но включить опции BuildExamples и BuildBranchExamples как и прежде, но еще вам следует также включить опции BuildDistExamples и BuildConsExamples. Последние две опции позволяют создать двоичные файлы примеров уже для распределенной имитации.

Прототипирование ваших моделей на языке Питон

Наконец, вы можете прототипировать свои имитационные модели с помощью языка программирования Питон, используя другой мой продукт, который я назвал DVCompute Modeler. Я создал его на основе DVCompute Simulator (написанного на языке Rust).

С помощью DVCompute Modeler создавать имитационные модели на Питоне может быть легко и увлекательно! Как только ваша модель будет готова, вы можете перевести ее непосредственно на C++, используя DVCompute++ Simulator, или на Rust, используя DVCompute Simulator. Тот же самый метод будет работать для последовательной, вложенной и распределенной имитации.

Для получения DVCompute Modeler также следует обратиться ко мне.

История и библиография

Ранее я создал на языке Haskell программный комплекс Айвика (англ. Aivika). Айвика доступна по следующей ссылке: http://hackage.haskell.org/package/aivika

Затем я продолжил работать над симуляторами, и DVCompute++ Simulator - одна из моих следующих работ. Я также создал DVCompute Simulator, который тоже является симулятором, но он уже предназначен для создания имитационных моделей на языке программирования Rust.

Ниже приведен список моих публикаций.

  • Статья про DVCompute++ Simulator:

    • Сорокин Д.Э. DVCompute++ Simulator для отечественных компьютеров Эльбрус // Десятая всероссийская научно-практическая конференция по имитационному моделированию и его применению в науке и промышленности «Имитационное моделирование. Теория и практика» (ИММОД-2021). Труды конференции (электронное издание), 20–22 октября 2021 г., Санкт-Петербург: АО «ЦТСС», 2021. – 694 с. – ISBN 978-5-905526-05-3. С. 606-609.
  • Это моя научная статья о некоторых деталях реализации:

    • Сорокин Д. Э. DVCompute Simulator для дискретно-событийного моделирования // Прикладная информатика. 2021. Т. 16. No 3. С. 93–108. DOI: 10.37791/2687-0649-2021-16-3-93-108
  • Это моя научная статья об основной идее моего метода:

    • Сорокин Давид Эрнестович. Распределенное имитационное моделирование с Aivika // Прикладная информатика. 2019. Т. 14. №4(82). С. 73-89. DOI: 10.24411/1993-8314-2019-10028.
  • А также есть статья, опубликованная в трудах Восьмой всероссийской научно-практической конференции “Имитационное моделирование. Теория и практика” – “ИММОД-2017”, которая состоялась 18-20 октября 2017 года в Санкт-Петербурге:

    • Сорокин Д.Э. Устойчивое к разрывам связи распределенное моделирование с Aivika
  • Основная идея метода также описана в моей статье на русском, опубликованной в трудах Седьмой всероссийской научно-практической конференции “Имитационное моделирование. Теория и практика” – “ИММОД-2015”, которая состоялась 21-23 октября 2015 года в Москве, в ИПУ им. В.А.Трапезникова РАН:

    • Сорокин Д.Э. Айвика: имитационное моделирование в терминах вычислений

Лицензия

DVCompute++ Simulator является коммерческим продуктом. Это программное обеспечение свободно только для некоммерческого использования. И вы должны приобрести лицензию для любых коммерческих целей, связавшись со мной через davsor@mail.ru.


С наилучшими пожеланиями,

Сорокин Давид Эрнестович davsor@mail.ru Россия, Марий Эл, Йошкар-Ола