Введение 4
1. Постановка задачи 7
2. Обзор 8
2.1. Работы по симуляции элементарных частиц на видеокартах 8
2.2. Выбор API для работы с видеокартами 10
2.3. Direct3D 12 11
3. Реализация 14
3.1. Архитектура 14
3.2. Слой абстракции от графического API 15
3.3. Генератор кода для взаимодействия с ресурсами шейдеров 16
3.4. Граф зависимостей ресурсов 18
3.5. Библиотека для работы с шейдерами 19
3.6. Блок работы с геометрией 19
3.7. API фреймворка 19
Апробация 21
Заключение 22
Список литературы 23
В настоящее время компьютеры зачастую используются для расчетов различных симуляций физических эффектов. Ядерная физика не стала исключением. Вычисления на компьютерах помогают получать различные теоретические или даже практические результаты. Например, при помощи компьютерной симуляции частиц можно рассчитывать, какие показания будут на детекторе этих частиц, расположенном у подножия горы. С помощью такого моделирования можно предсказывать показания детектора при тех или иных изменениях внутри горы. Таким образом, можно наблюдать изменения в горных породах, имея только детекторы элементарных частиц.
В Московском физико-техническом институте разрабатываются программные решения для симуляции поведения элементарных частиц. Как правило, такие решения основаны на численном интегрировании методами Монте-Карло. Для симуляций со сложной геометрией (например, при расчете распределений частиц вблизи горы) прослеживается путь множества частиц, обычно рассчитывая пересечения лучей, сгенерированных по частицам, на каждый шаг симуляции. Для подобного рода симуляций можно использовать различные формы представления сцены. Например, библиотека TURTLE позволяет загрузить карту высот и искать пересечения лучей с геометрией, представленной в такой форме, из кода на CPU. Но иногда таких возможностей бывает недостаточно и требуется больше гибкости. Зачастую, в таком случае данная задача решается представлением геометрии для симуляции в виде набора треугольников с требуемой детализацией.
Учитывая то, что задача симуляции множества частиц хорошо па- раллелизируема, для данной задачи имеет смысл использовать видеокарты. Современные графические процессоры, состоят из множества потоковых процессоров (рисунок 11), имеющих несколько блоков выполнения, исполняющих одновременно только одинаковые операции на всех потоках, запущенных на этом блоке. Также GPU имеют большую пропускную способность памяти, как правило, с большой задержкой, которая скрывается планировщиком, снимающим с блоков выполнения потоки, ожидающие выполнения операции с видеопамятью. Часто современные видеокарты имеют аппаратное ускорение пересечений лучей с геометрией. Для запуска программируемой работы на видеокарте пишется шейдер (программа, выполняемая на видеокарте с разными входными данными). Как правило, вычислительная работа на GPU разбивается программистом на множество рабочих групп (групп выполнений шейдера, которые распределяются по вычислительным блокам драйвером видеокарты).
По описанным выше причинам, для разработки алгоритмов симуляции элементарных частиц будет полезен фреймворк, позволяющий задавать геометрию в формате набора треугольников и предоставляющий интерфейс для пересечения лучей с заданной сценой. При этом данное решение должно позволять реализовывать новые алгоритмы, в отличие от множества существующих решений (например, MCGPU), уже имеющих внутри себя алгоритмы, основанные на методах Монте- Карло. Работа направлена на разработку движка, позволяющего получать доступ к вычислительным мощностям современных видеокарт, при этом инкапсулируя внутри себя часть сложности работы с API для взаимодействия с видеокартой. Тему дипломной работы предложил Ролан Гринис, научный сотрудник МФТИ.
На данный момент достигнуты следующие задачи.
1. Проведен обзор существующих работ по симуляции физики частиц на видеокартах.
2. Разработана архитектура движка симуляции частиц.
3. Реализован фреймворк для разработки алгоритмов симуляций ядерной физики.
4. Проведена апробация реализованного решения.
Исходный код открыт и доступен в GitHub.