Помощь студентам в учебе
Реализация движка для симуляции физики частиц на GPU
|
Введение 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
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 [1] позволяет загрузить карту высот и искать пересечения лучей с геометрией, представленной в такой форме, из кода на CPU. Но иногда таких возможностей бывает недостаточно и требуется больше гибкости. Зачастую, в таком случае данная задача решается представлением геометрии для симуляции в виде набора треугольников с требуемой детализацией.
Учитывая то, что задача симуляции множества частиц хорошо параллелизируема, для данной задачи имеет смысл использовать видео-карты. Современные графические процессоры [27], состоят из множества потоковых процессоров (рисунок 1 ), имеющих несколько блоков выполнения, исполняющих одновременно только одинаковые операции на всех потоках, запущенных на этом блоке. Также GPU имеют большую пропускную способность памяти, как правило, с большой задержкой, которая скрывается планировщиком, снимающим с блоков выполнения потоки, ожидающие выполнения операции с видеопамятью. Часто современные видеокарты имеют аппаратное ускорение пересечений лучей с геометрией. Для запуска программируемой работы на видеокарте пишется шейдер (программа, выполняемая на видеокарте с разными входными данными). Как правило, вычислительная работа на GPU разбивается программистом на множество рабочих групп (групп выполнений шейдера, которые распределяются по вычислительным блокам драйвером видеокарты).
По описанным выше причинам, для разработки алгоритмов симуляции элементарных частиц будет полезен фреймворк, позволяющий задавать геометрию в формате набора треугольников и предоставляющий интерфейс для пересечения лучей с заданной сценой. При этом данное решение должно позволять реализовывать новые алгоритмы, в отличие от множества существующих решений (например, MCGPU [9]), уже имеющих внутри себя алгоритмы, основанные на методах Монте- Карло. Работа направлена на разработку движка, позволяющего получать доступ к вычислительным мощностям современных видеокарт, при этом инкапсулируя внутри себя часть сложности работы с API для взаимодействия с видеокартой. Тему дипломной работы предложил Ролан Гринис, научный сотрудник МФТИ.
1. Постановка задачи
Целью работы является реализация движка для ускорения расчетов физики частиц на современных видеокартах с аппаратным ускорением трассировки лучей. Для достижения этой цели были поставлены следующие задачи.
1. Провести обзор существующих работ по симуляции физики частиц на видеокартах.
2. Разработать архитектуру движка симуляции частиц.
3. Реализовать фреймворк для разработки алгоритмов симуляций ядерной физики.
4. Провести апробацию полученного решения.
В Московском физико-техническом институте разрабатываются программные решения для симуляции поведения элементарных частиц. Как правило, такие решения основаны на численном интегрировании методами Монте-Карло. Для симуляций со сложной геометрией (например, при расчете распределений частиц вблизи горы) прослеживается путь множества частиц, обычно рассчитывая пересечения лучей, сгенерированных по частицам, на каждый шаг симуляции. Для подобного рода симуляций можно использовать различные формы представления сцены. Например, библиотека TURTLE [1] позволяет загрузить карту высот и искать пересечения лучей с геометрией, представленной в такой форме, из кода на CPU. Но иногда таких возможностей бывает недостаточно и требуется больше гибкости. Зачастую, в таком случае данная задача решается представлением геометрии для симуляции в виде набора треугольников с требуемой детализацией.
Учитывая то, что задача симуляции множества частиц хорошо параллелизируема, для данной задачи имеет смысл использовать видео-карты. Современные графические процессоры [27], состоят из множества потоковых процессоров (рисунок 1 ), имеющих несколько блоков выполнения, исполняющих одновременно только одинаковые операции на всех потоках, запущенных на этом блоке. Также GPU имеют большую пропускную способность памяти, как правило, с большой задержкой, которая скрывается планировщиком, снимающим с блоков выполнения потоки, ожидающие выполнения операции с видеопамятью. Часто современные видеокарты имеют аппаратное ускорение пересечений лучей с геометрией. Для запуска программируемой работы на видеокарте пишется шейдер (программа, выполняемая на видеокарте с разными входными данными). Как правило, вычислительная работа на GPU разбивается программистом на множество рабочих групп (групп выполнений шейдера, которые распределяются по вычислительным блокам драйвером видеокарты).
По описанным выше причинам, для разработки алгоритмов симуляции элементарных частиц будет полезен фреймворк, позволяющий задавать геометрию в формате набора треугольников и предоставляющий интерфейс для пересечения лучей с заданной сценой. При этом данное решение должно позволять реализовывать новые алгоритмы, в отличие от множества существующих решений (например, MCGPU [9]), уже имеющих внутри себя алгоритмы, основанные на методах Монте- Карло. Работа направлена на разработку движка, позволяющего получать доступ к вычислительным мощностям современных видеокарт, при этом инкапсулируя внутри себя часть сложности работы с API для взаимодействия с видеокартой. Тему дипломной работы предложил Ролан Гринис, научный сотрудник МФТИ.
1. Постановка задачи
Целью работы является реализация движка для ускорения расчетов физики частиц на современных видеокартах с аппаратным ускорением трассировки лучей. Для достижения этой цели были поставлены следующие задачи.
1. Провести обзор существующих работ по симуляции физики частиц на видеокартах.
2. Разработать архитектуру движка симуляции частиц.
3. Реализовать фреймворк для разработки алгоритмов симуляций ядерной физики.
4. Провести апробацию полученного решения.
Возникли сложности?
Нужна помощь преподавателя?
Помощь в написании работ!
На данный момент достигнуты следующие задачи.
1. Проведен обзор существующих работ по симуляции физики частиц на видеокартах.
2. Разработана архитектура движка симуляции частиц.
3. Реализован фреймворк для разработки алгоритмов симуляций ядерной физики.
4. Проведена апробация реализованного решения.
Исходный код открыт и доступен в GitHub .
1. Проведен обзор существующих работ по симуляции физики частиц на видеокартах.
2. Разработана архитектура движка симуляции частиц.
3. Реализован фреймворк для разработки алгоритмов симуляций ядерной физики.
4. Проведена апробация реализованного решения.
Исходный код открыт и доступен в GitHub .
[1] [1904.03435] TURTLE: A C library for an optimistic stepping through a topography.— URL: https://arxiv.org/abs/1904.03435 (дата обращения: 2022-12-09).
[2] Achieved Occupancy.— URL: https://docs.nvidia.com/gameworks/content/developertools/desktop/analysis/report/cudaexperiments/kernellevel/achievedoccupancy.htm(дата обращения: 2022-09-18).
[3] Akenine-Moller T. Haines E. Hoffman N. Real-Time Rendering, Fourth Edition.— A K Peters/CRC Press, 2018.— P. 837-821.— ISBN:9781351816144.
[4] CUDA C++ Programming Guide.— URL: https://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html#device-memory-accesses (дата обращения: 2022-12-10).
[5] CUDA Zone - Library of Resources | NVIDIA Developer. — URL: https://developer.nvidia.com/cuda-zone (дата обращения: 2022-09-18).
[6] D3D12 Memory Allocator - GPUOpen.— URL: https://gpuopen.com/d3d12-memory-allocator (дата обращения: 2022-12-11).
[7] D3D12_RESOURCE_STATES - Win32 apps | Microsoft Learn.- URL: https://learn.microsoft.com/en-us/windows/win32/api/d3d12/ne-d3d12-d3d12_resource_states (дата обращения: 2023¬05-06).
[8] DD2018: Adam Sawicki - Porting your engine to Vulkan or DX12 - YouTube.— URL: https://youtu.be/6NWfznwFnMs (дата обращения: 2022-12-11).
[9] DIDSR/MCGPU: GPU-accelerated Monte Carlo x-ray transport code to simulate medical x-ray imaging devices. — URL: https://github.com/DIDSR/MCGPU(дата обращения: 2023-03-26).
[10] Direct3D - Win32 apps | Microsoft Learn.— URL: https://learn.microsoft.com/en-us/windows/win32/direct3d(дата обращения: 2022-12-11).
[11] DirectX Raytracing - PIX on Windows.— URL: https://devblogs.microsoft.com/pix/directx-raytracing(дата обращения: 2022¬12-11).
[12] DirectX Raytracing (DXR) Functional Spec | DirectX-Specs. — URL: https://microsoft.github.io/DirectX-Specs/d3d/Raytracing.html (дата обращения: 2022-12-11).
[13] DirectX-Specs | Engineering specs for DirectX features.—
URL: https://microsoft.github.io/DirectX-Specs/d3d/
CPUEfficiency.html#detailed-api-descriptions (дата
обращения: 2022-12-11).
[14] DirectX-Specs | Engineering specs for DirectX features. — URL: https://microsoft.github.io/DirectX-Specs/d3d/HLSL_ShaderModel6_5.html (дата обращения: 2022-12-12).
[15] Documentation - PIX on Windows.— URL: https://devblogs.microsoft.com/pix/documentation(дата обращения: 2022-12-11).
[16] Exploiting Hardware-Accelerated Ray Tracing for Monte Carlo Par¬ticle Transport with OpenMC | IEEE Conference Publication | IEEE Xplore.— URL: https://ieeexplore.ieee.org/abstract/document/9059266 (дата обращения: 2022-09-12).
[17] Features — RenderDoc documentation.— URL: https://renderdoc.org/docs/getting_started/features.html (дата обращения: 2022-12-11).
[18] Frontiers | Evaluation of Single-Node Performance of Parallel Al-gorithms for Multigroup Monte Carlo Particle Transport Meth¬ods.— URL: https://www.frontiersin.org/articles/10.3389/fenrg.2021.705823/full (дата обращения: 2022-09-17).
[19] High-level shader language (HLSL) - Win32 apps.— URL: https://learn.microsoft.com/en-us/windows/win32/direct3dhlsl/dx-graphics-hlsl (дата обращения: 2023-05-06).
[20] Home | Vulkan | Cross platform 3D Graphics. — URL: https://www.vulkan.org(дата обращения: 2022-12-11).
[21] ID3D12GraphicsCommandList::Dispatch (d3d12.h) - Win32 apps.— URL: https://learn.microsoft.com/en-us/windows/win32/api/d3d12/nf-d3d12-id3d12graphicscommandlist-dispatch(дата обращения: 2023-05-06).
[22] ID3D12GraphicsCommandList::ResourceBarrier
(d3d12.h) - Win32 apps.— URL: https://learn.
microsoft.com/en-us/windows/win32/api/d3d12/
nf-d3d12-id3d12graphicscommandlist-resourcebarrier (дата обращения: 2023-05-06).
[23] LLNL Monte Carlo Transport Research Efforts for Advanced Computing Architectures.— URL: https://www.kns.org/files/int_paper/paper/MC2017_2017_2/P095S02-02BrantleyP.pdf (дата обращения: 2022-09-18).
[24] MIPT-NPM laboratory.— URL: https://npm.mipt.ru/ru/about(дата обращения: 2023-05-06).
[25] Modeling parameterized geometry in GPU-based Monte Carlo particle transport simulation for radiotherapy - lOPscience. — URL: https://iopscience.iop.org/article/10.1088/0031-9155/61/15/5851/meta(дата обращения: 2022-09-17).
[26] NVIDIA OptiX™ Ray Tracing Engine | NVIDIA Developer. — URL: https://developer.nvidia.com/rtx/ray-tracing/optix(дата обращения: 2022-12-10).
[27] NVIDIA Turing Architecture In-Depth | NVIDIA Techni¬cal Blog.— URL: https://developer.nvidia.com/blog/nvidia-turing-architecture-in-depth (дата обращения: 2022¬12-09).
[28] The OpenMC Monte Carlo Code — OpenMC Documentation. — URL: https://docs.openmc.org/en/stable (дата обращения: 2022-09¬12).
[29] RenderDoc — RenderDoc documentation.— URL: https://renderdoc.org/docs/index.html (дата обращения: 2022-12-11).
[2] Achieved Occupancy.— URL: https://docs.nvidia.com/gameworks/content/developertools/desktop/analysis/report/cudaexperiments/kernellevel/achievedoccupancy.htm(дата обращения: 2022-09-18).
[3] Akenine-Moller T. Haines E. Hoffman N. Real-Time Rendering, Fourth Edition.— A K Peters/CRC Press, 2018.— P. 837-821.— ISBN:9781351816144.
[4] CUDA C++ Programming Guide.— URL: https://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html#device-memory-accesses (дата обращения: 2022-12-10).
[5] CUDA Zone - Library of Resources | NVIDIA Developer. — URL: https://developer.nvidia.com/cuda-zone (дата обращения: 2022-09-18).
[6] D3D12 Memory Allocator - GPUOpen.— URL: https://gpuopen.com/d3d12-memory-allocator (дата обращения: 2022-12-11).
[7] D3D12_RESOURCE_STATES - Win32 apps | Microsoft Learn.- URL: https://learn.microsoft.com/en-us/windows/win32/api/d3d12/ne-d3d12-d3d12_resource_states (дата обращения: 2023¬05-06).
[8] DD2018: Adam Sawicki - Porting your engine to Vulkan or DX12 - YouTube.— URL: https://youtu.be/6NWfznwFnMs (дата обращения: 2022-12-11).
[9] DIDSR/MCGPU: GPU-accelerated Monte Carlo x-ray transport code to simulate medical x-ray imaging devices. — URL: https://github.com/DIDSR/MCGPU(дата обращения: 2023-03-26).
[10] Direct3D - Win32 apps | Microsoft Learn.— URL: https://learn.microsoft.com/en-us/windows/win32/direct3d(дата обращения: 2022-12-11).
[11] DirectX Raytracing - PIX on Windows.— URL: https://devblogs.microsoft.com/pix/directx-raytracing(дата обращения: 2022¬12-11).
[12] DirectX Raytracing (DXR) Functional Spec | DirectX-Specs. — URL: https://microsoft.github.io/DirectX-Specs/d3d/Raytracing.html (дата обращения: 2022-12-11).
[13] DirectX-Specs | Engineering specs for DirectX features.—
URL: https://microsoft.github.io/DirectX-Specs/d3d/
CPUEfficiency.html#detailed-api-descriptions (дата
обращения: 2022-12-11).
[14] DirectX-Specs | Engineering specs for DirectX features. — URL: https://microsoft.github.io/DirectX-Specs/d3d/HLSL_ShaderModel6_5.html (дата обращения: 2022-12-12).
[15] Documentation - PIX on Windows.— URL: https://devblogs.microsoft.com/pix/documentation(дата обращения: 2022-12-11).
[16] Exploiting Hardware-Accelerated Ray Tracing for Monte Carlo Par¬ticle Transport with OpenMC | IEEE Conference Publication | IEEE Xplore.— URL: https://ieeexplore.ieee.org/abstract/document/9059266 (дата обращения: 2022-09-12).
[17] Features — RenderDoc documentation.— URL: https://renderdoc.org/docs/getting_started/features.html (дата обращения: 2022-12-11).
[18] Frontiers | Evaluation of Single-Node Performance of Parallel Al-gorithms for Multigroup Monte Carlo Particle Transport Meth¬ods.— URL: https://www.frontiersin.org/articles/10.3389/fenrg.2021.705823/full (дата обращения: 2022-09-17).
[19] High-level shader language (HLSL) - Win32 apps.— URL: https://learn.microsoft.com/en-us/windows/win32/direct3dhlsl/dx-graphics-hlsl (дата обращения: 2023-05-06).
[20] Home | Vulkan | Cross platform 3D Graphics. — URL: https://www.vulkan.org(дата обращения: 2022-12-11).
[21] ID3D12GraphicsCommandList::Dispatch (d3d12.h) - Win32 apps.— URL: https://learn.microsoft.com/en-us/windows/win32/api/d3d12/nf-d3d12-id3d12graphicscommandlist-dispatch(дата обращения: 2023-05-06).
[22] ID3D12GraphicsCommandList::ResourceBarrier
(d3d12.h) - Win32 apps.— URL: https://learn.
microsoft.com/en-us/windows/win32/api/d3d12/
nf-d3d12-id3d12graphicscommandlist-resourcebarrier (дата обращения: 2023-05-06).
[23] LLNL Monte Carlo Transport Research Efforts for Advanced Computing Architectures.— URL: https://www.kns.org/files/int_paper/paper/MC2017_2017_2/P095S02-02BrantleyP.pdf (дата обращения: 2022-09-18).
[24] MIPT-NPM laboratory.— URL: https://npm.mipt.ru/ru/about(дата обращения: 2023-05-06).
[25] Modeling parameterized geometry in GPU-based Monte Carlo particle transport simulation for radiotherapy - lOPscience. — URL: https://iopscience.iop.org/article/10.1088/0031-9155/61/15/5851/meta(дата обращения: 2022-09-17).
[26] NVIDIA OptiX™ Ray Tracing Engine | NVIDIA Developer. — URL: https://developer.nvidia.com/rtx/ray-tracing/optix(дата обращения: 2022-12-10).
[27] NVIDIA Turing Architecture In-Depth | NVIDIA Techni¬cal Blog.— URL: https://developer.nvidia.com/blog/nvidia-turing-architecture-in-depth (дата обращения: 2022¬12-09).
[28] The OpenMC Monte Carlo Code — OpenMC Documentation. — URL: https://docs.openmc.org/en/stable (дата обращения: 2022-09¬12).
[29] RenderDoc — RenderDoc documentation.— URL: https://renderdoc.org/docs/index.html (дата обращения: 2022-12-11).
Работу высылаем на протяжении 30 минут после оплаты.
Подобные работы
- Реализация движка для симуляции
физики частиц на GPU
Дипломные работы, ВКР, программирование. Язык работы: Русский. Цена: 4750 р. Год сдачи: 2023