Портирование численных методов на GPU в рамках проекта GNA (программирование)
Бакалаврский диплом

Проект GNA — Global Neutrino Analysis — совместное измерение параметров нейтрино из данных нескольких экспериментов (JUNO, Daya Bay и др.) и включает в себя разработку одноименного ПО. В рамках ПО GNA мы работаем над решением следующих проблем, возникающих при анализе данных:

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

В GNA сложная функция, выполняющая, например, вычисление сигнала, наблюдаемого в эксперименте строится как направленный граф. Каждый узел графа выполняет некоторую элементарную операцию (матричное произведение, вычисление сечения взаимодействия, интегрирования и др) и называется трансформацией. Трансформация производится сразу на массиве данных, а её результат кешируется, что позволяет реализовать подход ленивых вычислений.
В пакет GNA входит инструментарий для создания и настройки дерева вычислений, статистического анализа данных, функции для оформления результатов.

Проект находится на альфа версии, тем не менее уже используется несколькими группами для анализа данных эксперимента Daya Bay и оценки чувствительности эксперимента JUNO. Текущая версия документации: http://gna.pages.jinr.ru/gna/.

Портирование трансформаций на GPU

Использование GNA позволяет пользователю абстрагироваться от того, где будет вычисляться отдельная трансформация, часть графа или весь вычислительный граф, на CPU или на GPU. Передача данных между устройствами и выбор места вычисления происходит на уровне фреймворка. Для вычислений на GPU для каждой трансформации должен быть реализован соответствующий код. Задача включает в себя следующие пункты:

  • Изучение существующего в GNA набора трансформаций и отбор трансформаций, портирование которых на GPU будет целесообразно.
  • Портирования трансформаций на GPU.
  • Реализация тестовой цепочки вычислений и исследование ее эффективности по сравнению с CPU.
  • Может потребоваться доработка фреймворка для работы с промежуточными данными и детального контроля процесса вычислений (flow control).

К обязательным требованиям относятся:

  • Документация кода в doxygen, пользовательская документация в reStructuredText, подготовка unit-тестов.

Предполагаемый технологический стек:

  • Python: numpy, scipy, matplotlib.
  • CUDA Toolkit
  • C++: C++14(17), Eigen, Boost.
численные методы, GPGPU, анализ данных, GNA, разработка ПО