Unity готовит новый компилятор на C # под названием Burst

Логотип Unity

Unity - чрезвычайно популярный игровой движокособенно за его всеобъемлющие и простые в использовании инструменты редактирования.

Однако двигатель должен следовать эволюции машин.: за десять лет процессоры увеличиваются не по частоте, а по количеству ядер. Другими словами, Чтобы использовать новую доступную производительность, игры должны запускать свой код на разных ядрах, через разные потоки.

Однако с того момента, как эта технология стала доступной, немногие игры действительно успешны. На самом деле проблем с написанием такого кода очень много.

Чтобы избежать этих недостатков, можно следовать некоторым правилам. Это одна из причин, по которой Unity работает над новым компилятором на C # под названием Burst. при несоблюдении этих правил возникнет ошибка компиляции.

Чтобы достичь этого, код должен быть написан как набор задач, которые необходимо выполнить. Каждая из этих задач выполняет некоторые преобразования данных.

Программист должен указать области памяти, к которым он имеет доступ только для чтения, и те, в которых он хочет читать и записывать данные.- Компилятор позаботится о том, чтобы вы не использовали ничего, кроме этих объявлений.

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

Burst предназначен не только для облегчения параллельного программирования: он также используется в наиболее важных частях. (с точки зрения производительности) кода Unity.

До сих пор они были написаны на C ++, но текущие компиляторы не совсем удовлетворительны.

В самом деле, если разработчик хочет, чтобы цикл был векторизован, у них нет гарантии, что компилятор будет, из-за сложения между двумя векторами, например, компилятор должен формально доказать, что во всех возможных и мыслимых случаях два вектора не соответствуют одним и тем же адресам в памяти).

инспектор

Почему Burst, а не существующий компилятор?

Производительность является критическим моментом, если цикл не векторизован, это реальная проблема, которую необходимо быстро исправить.

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

Столкнувшись с этими повышенными потребностями, вам еще нужно выбрать язык ввода этого компилятора- Вариант или подмножество C, C ++, C # или новый язык?

Новый язык - не лучший вариант, поскольку вначале вам не нужно обучать людей этому новому инструменту.

C # имеет предпочтение с точки зрения пользователей, Поскольку он уже используется игровым движком, он будет закодирован на том же языке, что и игры.

Кроме того, У C # уже есть очень большая экосистема, напротив, C ++ все еще страдает от наследия C, с не всегда очевидными включениями, которые необходимо определить, и огромным временем компиляции, недостатки, которые C ++ 20 частично исправляет, несмотря на его одержимость производительностью.

Было принято решение продолжить работу с C #, но путем удаления ряда элементов, снижающих производительность, таких как стандартная библиотека, в основном сборка мусора и разрешения.

Burst на самом деле не работает как полноценный компилятор, поскольку он не принимает большой объем кода в качестве входных данных, а только точку входа в критический цикл.

Он просто компилирует ее как функцию, а также все, что она вызывает. Уровень оптимизации чрезвычайно высок: поскольку Burst фокусируется на определенных частях кода, это может занять время.

Первая итерация Burst с HPC # и системой задач появилась в Unity 2018.1.

Сгенерированный код иногда быстрее, чем предыдущая версия на C ++, иногда медленнее, но разработчики верят, что они всегда будут достигать, по крайней мере, того же уровня производительности, что и C ++.

источник:  blogs.unity3d.com


Содержание статьи соответствует нашим принципам редакционная этика. Чтобы сообщить об ошибке, нажмите здесь.

Будьте первым, чтобы комментировать

Оставьте свой комментарий

Ваш электронный адрес не будет опубликован.

*

*

  1. Ответственный за данные: AB Internet Networks 2008 SL
  2. Назначение данных: контроль спама, управление комментариями.
  3. Легитимация: ваше согласие
  4. Передача данных: данные не будут переданы третьим лицам, кроме как по закону.
  5. Хранение данных: база данных, размещенная в Occentus Networks (ЕС)
  6. Права: в любое время вы можете ограничить, восстановить и удалить свою информацию.

bool (истина)