'
Аскерли М.В.
КЛЮЧ К ЭФФЕКТИВНОЙ РАЗРАБОТКЕ: АРХИТЕКТУРА ECS В СРАВНЕНИИ *
Аннотация:
в работе исследуется архитектура ECS и ее альтернативы, а также их преимущества и недостатки. Так же описывается создание ECSA и проводятся сравнительные испытания его производительности с объектно-ориентированными архитектурами.
Ключевые слова:
Юнити, программное обеспечение, процессор, эффективность
В мире разработки программного обеспечения архитектура играет ключевую роль, определяя структуру и эффективность приложений. В последние годы архитектура Entity Component System (ECS) привлекла внимание разработчиков своей гибкостью и эффективностью.Entity Component System Architecture (ECSA) [1] является парадигмой и архитектурным шаблоном, ориентированными на данные, которые полезны для кодирования и обработки сущностей и решают множество проблем, обсуждаемых выше, связанных с объектно-ориентированными архитектурами. Шаблон программного обеспечения ECSA имеет три основных особенности:1. Сущность (Entity). В архитектуре ECS сущности представляют собой всего лишь идентификаторы. Сущности не содержат данных и не реализуют логику. Сущность не является "контейнером". Тип данных сущности зависит от реализации.2. Компонент (Component). Компоненты служат только для хранения данных и никогда не содержат функций или реализуют какую-либо логику. Компоненты представляют собой просто данные. Компоненты могут быть структурами или скалярными типами данных и хранятся в массивах смежной памяти. Если сущность "имеет" компонент, то идентификатор сущности может быть использован в качестве индекса в массиве компонентов для получения значения компонента, принадлежащего этой сущности. У каждого компонента есть сигнатурное значение, которое может использоваться для запроса по сигнатуре сущности.3. Система (System). Системы представляют собой функции. Системы не имеют данных или состояния. Они реализуют логику для изменения компонентов, преобразования компонентов, добавления новых компонентов, создания или удаления сущностей. Каждая система имеет уникальную сигнатуру, и системы могут запросить сущности и проверить, соответствует ли сигнатура сущности сигнатуре самой системы.1. Производительность кэша центрального процессора.В конце 1980-х годов микропроцессоры все еще производились без кэш-памяти внутри самого микропроцессора. В течение следующих нескольких десятилетий были изобретены кэш-память уровней L1, L2, а затем L3 для решения проблем, вызванных разницей в скорости системной памяти и скорости вычислений микропроцессора. В настоящее время существуют кэш-память уровня L4, и скоро появятся уровень L5. Эти технологии кэш-памяти сокращают разрыв в производительности между скоростью микропроцессора и скоростью системной оперативной памяти и стали неотъемлемой частью микропроцессора [2].Кэш-память процессора предназначена для хранения данных, которые наиболее вероятно понадобятся в ближайшем будущем программы. Когда эти данные отсутствуют в кэше процессора, они должны быть загружены или получены из памяти, и такое событие называется "промахом кэша" (cache miss). Сache miss являются дорогостоящими событиями и могут занимать сотни тактов процессора [3]. Сache miss требует загрузки данных из гораздо более медленной системной памяти. Программное обеспечение, разработанное с учетом этих проблем, может снизить количество cache-miss, улучшить производительность процессора, что приведет к более быстрому выполнению программы, и в случае мобильных устройств - к снижению энергопотребления.2. Game Object Architecture. На конференции GDC в 2002 году Скотт Билас [4] описал, как была создана популярная action RPG "Dungeon Siege" и описал архитектуру, основанную на данных, которую мы сейчас называем архитектурой игровых объектов. Это была объектно-ориентированная архитектура, где основная идея заключалась в наличии одного класса с общими функциями, которыми все игровые сущности могли бы обмениваться, и абстрактного класса интерфейса, называемого компонентом, который мог быть присоединен к игровому объекту с использованием композиции для создания кода, основанного на данных. Эти компоненты могли быть присоединены или удалены во время работы игры и могли быть созданы дизайнерами без участия инженеров с помощью поддерживаемого сценарного языка.Такой тип архитектуры стал популярным в игровых движках и сейчас можно найти его в основной модели объектов и компонентов в Unity3D [5].Игровые объекты легко реализуются и обладают гибкостью, но не обладают хорошей производительностью кэша. В свою очередь, ECSA обладает гибкостью и хорошей производительностью кэша, но сложнее в реализации. Для данного исследования требуется гибкость и хорошая производительность кэша, поэтому ECSA является хорошим выбором.3. Тестирование производительности. Была проведена тестирование и запись времени кадров для объектно-ориентированной архитектуры Game Object и архитектуры ECS.Все тесты были проведены на ПК с операционной системой Windows 10 с использованием следующего аппаратного обеспечения:AMD 5950X CPUGIGABYTE X570 AORUS Master MotherboardNvidia RTX 2080ti GPUCorsair Vengeance RGB Pro SL 32GB (2x16GB) DDR4 3600 (PC4-28800) C18 1.35V Optimized for AMD Ryzen – Black (CMH32GX4M2Z3600C18)Samsung 980 PRO SSD 2TB PCIe NVMe Gen 4 Gaming M.2 Internal Solid State Hard Drive4. Asteroids Benchmark. В этом тесте был создан набор астероидов, каждому из которых был присвоен случайный размер, поворот и скорость. На каждом кадре их позиции и повороты были смоделированы на ЦПУ, а затем астероиды были отрисованы на экране с использованием графического API OpenGL. Для отрисовки всех астероидов в одном вызове использовалась инстансная отрисовка. Бенчмарк астероидов имеет 3 функции обновления и 4 компонента.5. Результаты бенчмарка астероидов. Рисунок 1 показывает построенные кривые, полученные при более чем 50 различных настройках. Каждая точка на кривой создавалась на основе среднего значения из 1000 выборок. Более низкие значения являются лучшими, и график показывает, что с течением времени кривая объектов игры имеет более крутой наклон и отдаляется от кривой ECSA, что указывает на то, что ECSA масштабируется лучше для более высокого количества сущностей, как и ожидалось. Время кадра указано в миллисекундах для общего количества сущностей от 0 до 1 000 000. Время кадра — это время, затраченное на отрисовку всего на экране один раз, и чем меньше время кадра, тем лучше производительность кэша ЦП. Более низкие времена кадров означают более высокие кадры в секунду, что важно для интерактивных видеоигр и симуляций в реальном времени.При тестировании было видно, что значительной разницы в производительности при количестве сущностей до 50 тысяч не выявлено. Различия в производительности начинают проявляться приблизительно при 120 тысячах сущностей, и результаты быстро расходятся в пользу ECSA для оставшихся точек данных. Результаты также показывают, что ECSA имеет растущее преимущество в производительности при увеличении количества сущностей.Рис. 1. Asteroids Benchmark.Основываясь на результатах, можно сделать вывод, что ECSA достаточно гибок для использования, основанном на данных, что и объектно-ориентированное программирование, и подходит для использования в играх. Исследование показало, что ECSA обладает значительным преимуществом в производительности при большом количестве объектов и эквивалентной производительностью при меньшем количестве объектов.
Номер журнала Вестник науки №5 (74) том 1
Ссылка для цитирования:
Аскерли М.В. КЛЮЧ К ЭФФЕКТИВНОЙ РАЗРАБОТКЕ: АРХИТЕКТУРА ECS В СРАВНЕНИИ // Вестник науки №5 (74) том 1. С. 490 - 495. 2024 г. ISSN 2712-8849 // Электронный ресурс: https://www.вестник-науки.рф/article/14272 (дата обращения: 09.11.2024 г.)
Вестник науки СМИ ЭЛ № ФС 77 - 84401 © 2024. 16+
*