Skip to content

Библиотека для квантовых вычислений на C++

License

Notifications You must be signed in to change notification settings

KuzmaLine/QComputations

Repository files navigation

ПО для квантовых вычислений на C++

В данном репозитории лежит программная реализация на C++ для моделирования квантовых экспериментов, гейтов, численных методов. Все реализации лежат в папке src. Документация и инструкция в папке doc. Примеры - папка examples.

Есть 4 версии библиотеки:

  1. Для одного ядра. (single)
  2. Для одного ядра без Python API.
  3. Для нескольких узлов. (cpu_cluster)
  4. Для нескольких узлов без Python API.

Действия перед компиляцией

Библиотека требует пакеты Intel OneAPI. Внизу ссылки для их устаноки.

Команды для установки пакетов (для каждого далее sudo ./исполняемый_файл):

  1. Intel OneApi BaseToolkit

    wget https://registrationcenter-download.intel.com/akdlm/IRC_NAS/992857b9-624c-45de-9701-f6445d845359/l_BaseKit_p_2023.2.0.49397_offline.sh

  2. Intel OneApi DPCPP++

    wget https://registrationcenter-download.intel.com/akdlm/IRC_NAS/ebf5d9aa-17a7-46a4-b5df-ace004227c0e/l_dpcpp-cpp-compiler_p_2023.2.1.8_offline.sh

  3. Intel Python

    wget https://registrationcenter-download.intel.com/akdlm/IRC_NAS/03aae3a8-623a-47cf-9655-5dd8fcf86430/l_pythoni39_oneapi_p_2023.2.0.49422_offline.sh

ПЕРЕД КОМПИЛЯЦИЕЙ QComputations НЕОБХОДИМО ПРОГНАТЬ ФАЙЛ setvars.sh ВНУТРИ ПАКЕТА OneApi С АРГУМЕНТОМ intel64!!!


Компиляция библиотек

./install.sh "<путь, для заголовочных файлов>" "<путь для диманических библиотек>"

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

  • libQComputations_CPU_CLUSTER.so
  • libQComputations_CPU_CLUSTER_NO_PLOTS.so
  • libQComputations_SINGLE.so
  • libQComputations_SINGLE_NO_PLOTS.so

Заголовочные файлы соответственно:

  • QComputations_CPU_CLUSTER.hpp
  • QComputations_CPU_CLUSTER_NO_PLOTS.hpp
  • QComputations_SINGLE.hpp
  • QComputations_SINGLE_NO_PLOTS.hpp

Все эти библиотеки, с добавкой sudo, переносятся в директорию, указанную в качестве аргумента скрипту install.sh. (То есть, если написать ./install.sh "/usr/include" "/usr/lib", то заголовочные файлы перенесутся в "/usr/include", а все динамические библиотеки перенесутся в /usr/lib)

В случае создания Pull Request'ов в репозиторий важно перед первым коммитом выполнить следующую команду git config --local core.hooksPath .githooks/


Описание структуры программы

Всё ПО находится в namespace QComputations!!!

Все hpp файлы оснащены комментариями с описанием, что делает каждая функция. (Кроме тех, в котором описание кроется в самом названии оной) Примеры программ лежат в директории examples.

Файл config.hpp - Для настройки некоторых параметров + физических. Подробнее в документации. Значения по умолчанию можно посмотреть в самом файле.

Файлы matrix - реализация класса матриц. Является основой всех остальных файлов.

Файлы blocked_matrix - реализация класса распеделённых матриц на сетке blacs. pblas и scalapack внедрены в реализацию.

Файлы blocked_vector - распределённые вектора.

Файлы state - Базовое понятия состояний и суперпозиции.

Файлы hamiltonian - Сами гамильтонианы.

Файлы hamiltonian_blocked - Распределённые гамильтонианы.

Файлы dynamic - функции процесса эволюции. Реализованы:

  1. Шрёдингер для статичного гамильтониана.
  2. Эволюция с помощью основного квантового уравнения

Файлы functions - дополнительные полезные функции. Подробнее в functions.hpp

Файлы graph - алгоритм рабочей области.

Файлы plot - для генерации графиков (На стадии улучшения, на данный момент реализован matplotlib)

Файлы quantum_operators - функции эволюции заданного состояния под воздействием некоторых стандартных операторов. Подробнее в quantum_operators.hpp

Файлы mpi_functions - интерфейс для Intel OneAPI.

Файлы additional_operators - дополнительные операторы и хеш функции для стандарных классов.

Библиотека лицензирована BSD 2-Clause!

About

Библиотека для квантовых вычислений на C++

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages