В данном репозитории лежит программная реализация на C++ для моделирования квантовых экспериментов, гейтов, численных методов. Все реализации лежат в папке src. Документация и инструкция в папке doc. Примеры - папка examples.
Есть 4 версии библиотеки:
- Для одного ядра. (single)
- Для одного ядра без Python API.
- Для нескольких узлов. (cpu_cluster)
- Для нескольких узлов без Python API.
Библиотека требует пакеты Intel OneAPI. Внизу ссылки для их устаноки.
Команды для установки пакетов (для каждого далее sudo ./исполняемый_файл):
-
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
-
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
-
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 - функции процесса эволюции. Реализованы:
- Шрёдингер для статичного гамильтониана.
- Эволюция с помощью основного квантового уравнения
Файлы functions - дополнительные полезные функции. Подробнее в functions.hpp
Файлы graph - алгоритм рабочей области.
Файлы plot - для генерации графиков (На стадии улучшения, на данный момент реализован matplotlib)
Файлы quantum_operators - функции эволюции заданного состояния под воздействием некоторых стандартных операторов. Подробнее в quantum_operators.hpp
Файлы mpi_functions - интерфейс для Intel OneAPI.
Файлы additional_operators - дополнительные операторы и хеш функции для стандарных классов.