Burst компиляция
Burst — это компилятор, работающий на подмножестве C#, упоминаемом в контексте Unity как High-Performance C# (HPC#). Burst использует LLVM для перевода .NET Промежуточный язык (IL) в код, оптимизированный для производительности на целевой архитектуре CPU.
Burst первоначально был разработан для использования с системой заданий Unity. Задания — это структуры, которые реализуют IJob интерфейс и представляют небольшие единицы работы, которые могут выполняться параллельно и задействовать все доступные ядра CPU. Разбиение работы на задания, компилируемые через Burst, может заметно ускорить код, ограниченный производительностью CPU. Подробнее см. Написать многопоточное программное обеспечение с помощью системы заданий.
Помимо заданий, Burst может компилировать и статические методы — при условии, что код внутри них относится к поддерживаемому подмножеству C#. О том, что входит в High-Performance C#, см. HPC# обзор.
Burst играет ключевую роль в технологиях Entity Component System (ECS) Unity — наборе взаимозависимых пакетов, совместная работа которых обеспечивает высокую производительность кода. Однако Burst можно использовать независимо от ECS и интегрировать в любой проект Unity, использующий поддерживаемые возможности C#.
Дополнительные сведения о Burst см. в документации пакета компилятора Burst.
Роль Burst в конвейере компиляции
Burst не является полноценным скриптовым бэкендом, поскольку поддерживает лишь подмножество C#. Он не может заменить в проекте Mono или IL2CPP, а дополняет любой из них.
Когда вы включаете пакет Burst в свой проект, скриптовый сервер компилирует код по умолчанию, а Burst компилирует совместимые с Burst части, которые помечены для компиляции Burst.
Ваша C# скрипты компиляции на средний язык (ILДля методов, обозначенных для Burst, что IL далее компилируется Burst в собственный код. Burst компиляции в режиме < <JIT) в Unity EditorРежим воспроизведения, но заранее времени (AOT) в сборках игрока.
Подмножество C#, поддерживаемое Burst, не поддерживает управляемые объекты. Unity содержит пакеты, предназначенные для предоставления Burst-совместимых версий общих типов и структур данных. Пакет Коллекции предлагает Burst-совместимые коллекции, такие как массивы и списки, а Unity Mathematics предлагает Burst-совместимые математические функции.
Компиляция с Burst
Код Burst компилируется, если выполнены следующие условия:
- Код Burst-совместим с.
- Компиляция Burst включена, либо через Burst AOT Настройки для сборок Player, либо через Burst меню для Unity Editor кода.
- Код явно помечен атрибутом
[BurstCompile]или ссылка на него сделана из кода, который это делает.
Вы можете использовать символ сценария ENABLE_BURST_AOT условно компилировать секции вашего кода только тогда, когда Burst AOT включен параметр компиляции.
Для получения дополнительной информации, см. Burst компиляция
Дополнительные ресурсы
- Burst документация пакета компилятора
- Система работы