Разработка под консоли Хорошие и плохие решения Akella. Арсенихин Роман.

Презентация:



Advertisements
Похожие презентации
Физические модели баз данных Файловые структуры, используемые для хранения информации в базах данных.
Advertisements

*Other names and brands may be claimed as the property of others.. Copyright © 2003 Intel Corporation Технология Hyper-Threading в играх на реальных примерах.
OpenGL и Direct3D сравнение стандартов Выполнил: Пенкин А. Группа И-204.
Выполнили: Мартышкин А. И. Кутузов В. В., Трояшкин П. В., Руководитель проекта – Мартышкин А. И., аспирант, ассистент кафедры ВМиС ПГТА.
Основы операционных систем.
Обзор операционных систем ВОУНБ им. М. Горького «Операционная система - это совокупность программ, обеспечивающих управление процессом обработки информации.
Учебный курс Введение в цифровую электронику Лекция 5 Обмен информацией в микропроцессорной системе кандидат технических наук, доцент Новиков Юрий Витальевич.
RISC-архитектуры ( Reduced Instruction Set Computer)
Возобновление счета для объектов, сохраненных в файле объектов. Научный руководитель: Илюшин А.И. Чугунов Арсений.
Многометодные процедуры оптимального управления Архитектура и реализация программного комплекса Исследовательский Центр процессов управления Работа выполнена.
Работу выполнили ученики 21 гимназии 10 А класса.
Архитектуры высокопроизводительных программных комплексов для моделирования сложных систем С.В. Ковальчук, И.О. Варвалюк НИИ Наукоемких компьютерных технологий,
Система фрагментированного программирования Перепелкин В.А. Всероссийская молодежная школа по параллельному программированию МО ВВС ИВМиМГ 2009 г.
Стадник Е. Г. ФПМИ НГТУ Руководитель: Городничев М.А., м.н.с. ИВМ и МГ СО РАН.
Архитектура операционных систем Семестр 2, Лекция 1.
Распределенная обработка информации Разработано: Е.Г. Лаврушиной.
Лекция 6. Способы адресации в микропроцессорных системах.
4К-Зарплата Универсальное решение для бизнеса. 2 О компании Дата основания1 июня 1993 года Основное направление деятельности Разработка.
Администрирование информационных систем Лекция 4. Система управления базами данных.
Архитектура операционных систем. Архитектура ОС Состав модулей (компонент) ОС Структура связей между отдельными модулями ОС Принципы взаимодействия модулей.
Транксрипт:

Разработка под консоли Хорошие и плохие решения Akella. Арсенихин Роман

Попадая на консоли... Мало памяти... Но другим её хватает Нету быстрого HDD, есть медленный DVD Особенности местного графического процессора весьма непривичны КРИ апреля.

Платформы. Графические движки КРИ апреля.

Выбор платформ Чёткое понимание возможности реализации желаемых features При выборе нескольких платформ: Архитектурная совместимость – не придётся ли писать две реализации одного и того же движка? КРИ апреля.

Выбор платформ Понимание возможностей Разрабатываем революционный FPS? Ок Требования дизайнеров: Чтобы у монстров было по 2, 3 или 4 руки. Чтобы у них из глаз вылетали лучи смерти. Чтобы был оригинальный режим зрения сквозь стены. Чтобы можно было перемещаться по всему миру без задержек и загрузок. КРИ апреля.

Выбор платформ Понимание возможностей Рассуждения программистов: 2, 3 или 4 руки у монстров? С этим проблем нет, наш универсальный движок поддерживает любое количество рук. Лучи смерти из глаз будут легко реализованы с помощью системы частиц. Зрение сквозь стены. На PC мы сделаем это легко, на XBox – если не будет страдать производительность. На PS2 этого эффекта мы не сможем достичь из-за особенностей графического процессора. Не предложить ли дизайнерам отказаться от этой фичи? Перемещение по большому миру – понадобиться много времени и сил, но, пожалуй, мы сможем достичь нужного результата на всех платформах. КРИ апреля.

Выбор платформ Архитектурная совместимость Параллельные рассчёты игровых процессов? Интеллектуальное распределением времени, выделяемого на ту или иную операцию? Как только у всех пользователей будут процессоры с поддержкой Hyper Threading, и все консоли будут поддерживать архитектуру ala Cell, стоит задуматься о разработке сложных многопоточных движков. КРИ апреля.

Выбор графического движка Движок собственного изготовления Некое middle-ware решение. КРИ апреля.

Выбор графического движка In-house solution + Полный доступ ко всем исходникам + Большая гибкость при добавлении желаемых возможностей + Перспективность использования при качественной базовой реализации -Необходимость глубокого понимания архитектуры и возможностей выбранных платформ -Необходимость наличия высококвалифицирован ных разработчиков, способных разработать качественное решение КРИ апреля.

Выбор графического движка Middleware + Набор готовых решений для ряда платформ + Наличие квалифицированной технической поддержки + Наличие развитого инструментария -«Чёрный ящик» отсутствие доступа к исходникам (или наличие, но за отдельные деньги) -Технологическая привязка к чужому решению -Возможное отсутствие необходимых features КРИ апреля.

Эффективное распределение памяти КРИ апреля.

Эффективное распределение памяти Стандартная схема Единый пул Стратегия распределение «first-fit» Ведёт к фрагментации памяти Затрудняет поиск утечек КРИ апреля.

Эффективное распределение памяти Причины фрагментации: Распределение объектов с разным временем жизни в едином пространстве Распределение объектов существенно отличающихся размеров в едином пространстве Свободно Блок 1 2 2Блок 3 Свободно 2 КРИ апреля.

Эффективное распределение памяти Пути улучшения эффективности распределения памяти Группирование объектов по размерам Группирование объектов по времени жизни Группирование объектов по предназначению Дефрагментация памяти КРИ апреля.

Эффективное распределение памяти Ключ – введение признака использования выделяемого блока (memory hint) Время жизни (global, per- location, per-frame и т.п.) Предназначение (string buffer, texture buffer и т.п.) Block #18 Size = 1024 Hint = Global + String Block #385 Size = 36 Hint = Temp + Object КРИ апреля.

Эффективное распределение памяти Оптимизированная схема 1 Маленькие объекты распределяются из пула А. Крупные объекты распределяются из пула Б. Оптимизированная схема 2 Постоянные объекты распределяются из пула А. Временные объекты распределяются из пула Б. КРИ апреля.

Эффективное распределение памяти Типы пулов: Chunk Allocator – все блоки одного размера, не требуется вспомогательной информации, максимальная скорость распределения. - используемые части блоков - неиспользуемые части блоков - свободные блоки КРИ апреля.

Эффективное распределение памяти Типы пулов: Block Allocator – блоки переменного размера, классический метод «boundary tags» - к каждому блоку прикреплён тег с дополнительной информацией, стратегия «best-fit» tagdatatagdatatag datatag - эффективная (используемая) часть блока - информационная часть блока (тэг) - свободные пространство КРИ апреля.

Эффективное распределение памяти Практическая схема: Набор пулов для статических строковых идентификаторов (chunk, 128 Kb) Набор пулов для строк (chunk + block, 128 Kb) Набор пулов для мелких объектов (

Эффективное распределение памяти Строки. Статические строки != динамические строки. Для хранения используются различные области памяти. Счётчики ссылок – копирование строки = присваивание указателя + увеличение счётчика ссылок. КРИ апреля.

Эффективное распределение памяти Контейнеры. STL. Собственные аллокаторы. Вектор с заданной скоростью роста величина роста КРИ апреля.

Эффективное распределение памяти Дефрагментация. Собирает используемые блоки в одно место Освобождает неиспользуемые пулы Возможна при: Отсутствии указателей на блок в момент вызова КРИ апреля.

Эффективное распределение памяти КРИ апреля.

Эффективное распределение памяти КРИ апреля.

Эффективное распределение памяти Результаты применения технологии: Значительное уменьшение фрагментации до почти полного её отсутствия Получение полного контроля над временем жизни блоков памяти Лёгкий поиск утечек памяти КРИ апреля.

Большие миры КРИ апреля.

Большие миры Требования: Непрерывное (без загрузок) перемещение на большие расстояния Наполненность мира объектами в т.ч. Интерактивными Решение – динамическая подгрузка игрового контента. КРИ апреля.

Большие миры Что загружать? Это решает система видимости. Когда загружать? Система видимости + дизайнер КРИ апреля.

Большие миры Quad- and oct-trees КРИ апреля.

Большие миры «Кишка» Набор частей большой локации, для каждой из которых указаны правила связи с другими частями. Кусок 1 Кусок 2 КРИ апреля.

Большие миры «Кишка» Характеристики: Протяжённость Связи «Критические» области Характеристики определяются техническими ограничениями – успеет ли загрузиться следующий кусок, пока мы перемещаемся по текущему? КРИ апреля.

Большие миры «Кишка» КРИ апреля.

Большие миры Чтение с диска Больше, но реже Чаще, но меньше Всегда возникает компромисс между частотой и объёмом подкачки с диска КРИ апреля.

Большие миры Чтение с диска Повышение скорости чтения Чтение без поиска Перенос наиболее критичных к скорости данных на внешние дорожки диска КРИ апреля.

Большие миры Чтение с диска Способы использования динамической загрузки Загрузка необходимых данных по запросу Загрузка данных по запросу + предзагрузка данных которые могут понадобиться Загрузка данных для данного куска локации как единого целого КРИ апреля.

Большие миры Чтение с диска Загрузка необходимых данных по запросу Загрузка объекта Нужна геометрия Запрос ресурса House012.mesh Поиск + чтение Нужна текстура Запрос ресурса Brick.tga Поиск + чтение Объект создан! Игровой код Драйвер диска КРИ апреля.

Большие миры Чтение с диска Предзагрузка данных Загрузка объекта Нужна геометрия Запрос House.mesh Загрузка House.mesh Загрузка Brick.tga Загрузка Wall.mesh единая операция Загрузка объекта Нужна геометрия Запрос Wall.mesh Возврат Wall.mesh из кеша Поиск + чтение Игровой код Драйвер диска Менеджер ресурсов КРИ апреля.

Большие миры Чтение с диска Загрузка данных как единого целого Загрузка объекта Нужна геометрия Запрос House.mesh Загрузка потока Поиск + чтение Возврат house.mesh из кеша Загрузка объекта Нужна геометрия Запрос Wall.mesh Возврат Wall.mesh из кеша КРИ апреля.

Большие миры Создание объектов Есть: Загруженная геометрия + текстура Сериализованные данные для инициализации Задача: Создать и инициализировать все 10k+ объектов находящихся в данном куске локации КРИ апреля.

Большие миры Создание объектов Способ 1. Немедленное создание объектов как только всё загружено. Возможные неприятности: Ход выполненияИнициализация объектовХод выполнения Уведомление о готовности данных Задержка! При «тяжёлых» объектах или при их большом количестве неминуемы задержки, что выливается в остановке игры на секунды КРИ апреля.

Большие миры Создание объектов Способ 2. Создание объектов, распределённое на несколько кадров Расчёт кадра Создание нескольких объектов Расчёт кадра Создание нескольких объектов Расчёт кадра Создание нескольких объектов кадр - Усложнение структуры движка КРИ апреля.

Большие миры Практическое применение Rage Rider: Технология «кишка» Предзагрузка данных Средняя длина куска ~ 0.5 Km ~1500 игровых объектов в каждом куске ~2.5 Mb данных на каждый кусок уровня Расстояние видимости ~ 1.2 Km КРИ апреля.

Ресурсы и мультиплатформенность КРИ апреля.

Ресурсы и мультиплатформенность Хранение ресурсов в платформонезависимом виде + Единый набор ресурсов + Единообразный доступ к ресурсам -Низкая производительность – необходимо в процессе исполнения «инстанцировать» ресурсы -Ограничение характеристиками самой слабой из платформ Хранение ресурсов в платформозависимом виде + Максимальная производительность + Наиболее полное использование возможностей платформы -Множество разных наборов ресурсов для каждой из платформ – большой риск рассинхронизированности -Различный код доступа к ресурсам для различных платформ КРИ апреля.

Ресурсы и мультиплатформенность Решение – синтез платформозависимых и платформонезависимых наборов. Данные, к которым требуется единообразный доступ на всех платформах – в общем виде. Данные, требующие максимальной производительности для их использования, или особой обработки – в формате конкретных платформ. КРИ апреля.

Ресурсы и мультиплатформенность Общий формат хранения: Геометрия для коллизий Сериализованные описания объектов Данные для системы AI (пути, триггеры и т.п.) Платформозависимый формат: Графические модели Текстуры (различное разрешение для разных платформ) Звуковые данные КРИ апреля.

Ресурсы и мультиплатформенность Возможный способ хранения Resources PI (platform independent) Common data PS2 Textures Models XBox Textures Models Сборщик ресурсов автоматически проверяет обновления в исходных каталогах и вносит изменения в архивы для выбранных платформ. КРИ апреля.

The last but not the least Мелкие оптимизации КРИ апреля.

Мелкие оптимизации Exceptions? Errors! Исключения используются только для критических ошибок и только в debug-варианте – избавляемся от таблиц исключений или от кода разворачивания стека. #if defined(CORE_USE_EXCEPTIONS) #define CORE_THROW(a) throw(a) #define CORE_CATCH(a) catch(a) #define CORE_CATCH_ALL catch(…) #else #define CORE_THROW(a) sayGoodByeAndDie(…) #define CORE_CATCH(a) if (0) #define CORE_CATCH_ALL if (0) #endif КРИ апреля.

Мелкие оптимизации Double Trouble При математических вычислениях следует явно использовать функции одинарной точности – компиляторы не знают что вы делаете критичное к скорости выполнения приложение. sinsinf fmodfmodf absabsf КРИ апреля.

Мелкие оптимизации Скорость vs размер Результат оптимизации Optimize for speed не всегда быстрее, чем Optimize for size. КРИ апреля.

Мелкие оптимизации Оптимизации – зло? Некоторые компиляторы генерируют неправильный код при высоких уровнях оптимизации. Передача/возврат пустого вектора по значению Неправильные значения stl-итераторов КРИ апреля.

Итоги Использование специализированных технологий позволяет справиться с некоторыми ограничениями, накладываемыми консолями и, в конечном счёте, позволяет разрабатывать качественные игровые движки. КРИ апреля.

Спасибо! Вопросы? КРИ апреля.