Массивно-параллельный GPU-ODE-Solver
Интегратор с ускорением на графическом процессоре для большого количества независимых систем обыкновенных дифференциальных уравнений
Модули:
Единая система для каждого потока v3.1
Он решает большое количество экземпляров одной и той же системы ОДУ с разными начальными условиями и/или наборами параметров.
Связанные системы поблочно v1.0
Он решает большое количество экземпляров связанной системы (состоящей из множества подсистем) с разными начальными условиями и/или наборами параметров.
Примечания к выпуску:
18 августа 2020 г.
Единая система для каждого потока v3.1:
- Поддержка как одинарной, так и двойной точности.
- Улучшенное/переработанное руководство, например, более подробное руководство по установке для пользователей Windows.
- Включение пакетного файла make.bat для упрощения процесса компиляции в Windows.
- Добавлен новый учебник (Урок 5) для тестирования примера, имеющего экземпляры с очень большими различиями во времени. Кривая производительности MPGOS сравнивается с программными пакетами odeint (C++) и DifferentialEquations.jl (Julia). MPGOS превосходит эти пакеты.
- Урок 6 (динамика воздействия) также дополнен кривыми производительности, см. предыдущий пункт. При этом MPGOS — единственный программный пакет, способный работать с системами с ударной динамикой (на графических процессорах). Поэтому сравнение производительности проводилось только с версиями odeint и DifferentialEquations.jl для ЦП.
- Незначительные изменения: четкое разделение переменных TimeDomain и ActualState.
Поблочные связанные системы v1.0:
- Этот первый модуль MPGOS готов. Код предназначен для решения большого количества экземпляров связанной системы (состоящей из множества подсистем, называемых модулями) с разными начальными условиями и/или наборами параметров.
- Модуль унаследовал практически все возможности модуля Single System Per-Thread v3.1. Есть несколько особенностей, например, обработка событий возможна только на уровне модуля; только явная связь может рассматриваться в матричной форме; За подробностями заинтересованный читатель может обратиться к руководству.
- Приводятся два обучающих примера.
14 февраля 2020 г.
Единая система на поток v3.0:
- Значительное улучшение производительности. Представленная методика метапрограммирования шаблонов позволила нам создать высокооптимизированный код. Среднее значение просачивания составляет 3 раза, а для низкоразмерных систем оно может составлять даже порядок.
10 октября 2019 г.
Единая система на поток v2.1:
- С помощью шаблонного метапрограммирования код полностью шаблонизируется для генерации узкоспециализированного кода решателя во время компиляции (в зависимости от алгоритма и необходимости обработки событий и плотного вывода). Соответственно, перерабатывается файловая система.
- Небольшое расширение: возможность использовать целочисленные общие параметры и целочисленные аксессуары для эффективного применения сложных методов индексации для сложных систем.
13 августа 2019 г.
Единая система на поток v2.0:
- Плотный вывод теперь поддерживается с некоторыми ограничениями, см. руководство. Это необходимое условие, например, для решения дифференциальных уравнений с запаздыванием.
- Код и его интерфейс значительно упрощены и понятны. Например, пул проблем полностью исключен из кода (он был сохранен по историческим причинам), и многие возможные варианты теперь привязаны к объекту решателя, который можно настроить с помощью одной функции-члена.
- Руководство также переработано и упрощено с учетом отзывов.
9 апреля 2019 г.
Единая система на поток v1.1:
- Устройство (GPU) может быть связано с каждым объектом решателя. Таким образом, выбор устройства теперь осуществляется автоматически.
- Поток CUDA автоматически создается для каждого объекта Solver.
- Новый набор функций-членов для перекрытия вычислений между процессором и графическим процессором и легкого распределения рабочей нагрузки между различными графическими процессорами в одном узле. Сюда входят асинхронные операции с памятью и ядром, а также возможности синхронизации между потоками ЦП и потоками графического процессора.
- На каждом этапе интеграции можно указать переменную активного количества потоков, чтобы удобно справляться с эффектом хвоста.
- Добавлены два новых учебных примера: а) перекрытие вычислений ЦП и графического процессора с использованием нескольких объектов решателя; б) использование нескольких графических процессоров, доступных на одном компьютере/узле.
14 февраля 2019 г.
Единая система на поток v1.0:
- Этот первый модуль MPGOS готов. Код предназначен для решения огромного количества независимых, но одинаковых (наборы параметров и начальные условия могут быть разными) систем ОДУ на графических процессорах.
- Удобство для пользователя. Даже тем, кто плохо знаком с программированием на C++, достаточно короткого курса, чтобы начать пользоваться программным пакетом.
- Имеется подробная инструкция с обучающими примерами. Таким образом, пользователь может легко создать свой собственный проект путем копирования блоков кода.
- Эффективная и надежная обработка событий.
- Пользовательское действие после каждого временного шага для гибкости.
- Определяемые пользователем «взаимодействия» после каждого успешного временного шага или обработки событий (очень полезно, например, для динамики воздействия, см. учебные примеры в руководстве).
- Возможность использовать иерархию памяти графического процессора без явного знания деталей.
- Программируемый пользователем параметр для гибкой реализации и хранения особых свойств траектории.
- Только явные решатели: метод Рунге-Кутты 4-го порядка с фиксированным шагом по времени и метод Рунге-Кутты-Кэша-Карпа 4-го порядка с оценкой встроенной ошибки 5-го порядка. (из-за сложного потока управления неявными решателями явный решатель иногда работает лучше, чем неявный, даже для сложных задач).
- Поддерживаются только арифметические операции двойной точности.
- Сохранение только конечных точек каждого этапа интеграции (для повышения скорости). Однако это редко является проблемой, поскольку программируемые пользователем параметры и вышеупомянутые определяемые пользователем взаимодействия позволяют сохранять самые сложные свойства траектории, см. документацию.