Оглавление 2
Введение 3
Постановка задачи 4
Обзор литературы 6
Глава 1. Рассматриваемое программное обеспечение 8
1.1 FairRoot и ROOT 8
1.2 MpdRoot 9
Глава 2. Используемые технологии параллельного программирования 9
2.1 OpenMP для многоядерных CPU 10
2.2 CUDA 11
2.3 Параллельные вычисления в зависимостях пакета MpdRoot 13
Глава 3. Анализ существующего кода 14
Глава 4. Модификации 16
4.1 Применение CUDA к фрагменту фильтра Калмана 16
4.2 Анализ функции FindNeighbourStrips 19
4.3 Оптимизация функции FindNeighbourStrips 22
4.4 Тесты 24
4.5 Возможности применения Intel Xeon Phi 26
Вывод 28
Заключение 28
Список литературы 30
ПРИЛОЖЕНИЕ А. Таблица зависимостей MpdRoot 32
ПРИЛОЖЕНИЕ Б. Граф вызовов для функции MnvertLocal 33
Для изучения ядерной физики проводятся эксперименты на установках, позволяющие разгонять пучки частиц до высоких скоростей. После ускорения пучки частиц сталкиваются либо с неподвижной мишенью (линейные ускорители), либо со встречным пучком (коллайдеры). Результат фиксируется детектором, находящимся в точке столкновения. На основе полученных данных делаются выводы о взаимодействии частиц и их свойствах.
В современной ядерной физике особый научный интерес представляет состояние материи, называемое кварк-глюонной плазмой. На данный момент эта область мало изучена. Исследования в этой сфере помогут найти ответы на многие фундаментальные вопросы, в том числе, о развитии Вселенной и нейтронных звездах.
В настоящий момент в городе Дубна Московской области стоится ускорительный комплекс NICA [1]. Одной из задач, которые планируется изучать с помощью данной установки, является воссоздание и исследование состояния, в котором находилась Вселенная сразу после Большого Взрыва. В состав ускорительного комплекса входит коллайдер с двумя точками взаимодействия встречных пучков, оснащенными детекторами частиц: MPD и SPD.
Для каждого детектора частиц пишется программное обеспечение, реализуемое в зависимости от задач, исследуемых с помощью конкретной установки. При проведении экспериментов ядерной физики необходимо собирать объемы данных, достаточные для обоснования каких-либо выводов и исключающие возможность принятия ошибочных результатов за верные. Другими словами, для того чтобы на основании физического эксперимента можно было получить корректное заключение, необходимо провести его неоднократно.
В наши дни область изучения ядерной физики активно развивается. Лаборатории в разных точках планеты проводят исследования на физических установках. Поэтому возникает потребность в том, чтобы программное обеспечение работало не только корректно, но и достаточно быстро. Данные, полученные в экспериментах, должны быть актуальными. Также важно, чтобы результаты исследований могли быть описаны в ближайшем будущем.
Предполагается, что обработка данных, получаемых с детектора MPD будет производиться с помощью разрабатываемого фреймворка MpdRoot. Этот проект создан на основе двух широко используемых в ядерных исследованиях библиотеках - FairRoot и Root. Они активно применяются в подобных экспериментах, проводимых в организациях FAIR, CERN и других.
В данной работе рассматриваются возможности ускорения работы программного обеспечения для детектора MPD [2, 3]. Рассмотрены возможности применения технологий параллельного программирования в данном продукте, исследована целесообразность их применения на конкретных примерах фрагментов существующего кода.
В работе отобраны фрагменты фреймворка, которые потенциально могут быть перенесены на сопроцессорные архитектуры. Проанализирована целесообразность применения графических ускорителей NVIDIA. Создан прототип модифицированного фрагмента алгоритма фильтра Калмана и проведены эксперименты на графическом процессоре NVIDIA.
Также рассмотрены возможности применения многоядерных центральных процессоров. Приведен пример оптимизации фрагмента кода фреймворка на процессорах Intel Xeon. Проанализирована возможность применения продуктов Intel Xeon Phi.
Предположение о возможности переноса кода на сопроцессорные архитектуры были сделаны на основе профилирования тестов фреймворка. Проведенные практические тесты показали значительное замедление работы прототипа на GPU по сравнению с последовательной реализацией.