Тестирование производительности многопоточного кода...

Preview:

DESCRIPTION

Доклад Виктора Гляненко на SQA Days-15. 18-19 апреля, 2014, Москва. www.sqadays.com

Citation preview

Тестирование производительности многопоточного кода игровых

проектов на практических примерахВиктор Гляненко, Антон Васильев

Виктор Гляненко

QA Lead

botikus@yandex.ru

Антон Васильев

Senior Game Engine Programmer

avasilev@saber3d.ru

Основные устройства влияющие на производительность

CPU и GPU

На что ориентируются разработчики?

Frames per Second (FPS) -  — количество сменяемых кадров за единицу времени.

Различия тестирования производительности на PC и

современных игровых консолях

Различия тестирования производительности на PC и

современных игровых консолях

Статистика производительности с различных PC конфигураций

Конфигурации PC

Результаты значений FPS

Модель многопоточного приложения как графа работ.

Root

Player Control

Physics

AI Update

Particle

Render

Sound

Physics Tick

AI Batch 0 AI Batch 1

Particle Tick

Модель многопоточного приложения как графа работ.

Изображено примерно 10% “движка”

Render

Как измерить многопоточный код?

Факторы влияющие на тестирования производительности многопоточных

приложений

•Конфигурация железа

Факторы влияющие на тестирования производительности многопоточных

приложений

•Конфигурация железа

•Сторонние приложения

Факторы влияющие на тестирования производительности многопоточных

приложений

•Конфигурация железа

•Сторонние приложения

Стратегия измерения

Возможности профилирования приложений в Visual Studio 2012

Profiler

Возможности профилирования приложений в Visual Studio 2012

Profiler

Concurrency Visualizer

Какие проблемы возможны?

а) Слишком долгие задачи.

Тоже самое, что и в случае однопоточного кода - выполнение кода занимает много времени.

Признаки:

Нагрузка на CPU близка к 100% (все ядра загружены).

Слишком долгие задачи

Слишком долгие задачи

Какие проблемы возможны?

б) Критический путь.

Признаки:

Нагрузка на CPU меньше 100% И мало синхронизаций внутри отдельных задач.

CPU ждет GPU.

Критический путь

Критический путь

Критический путь

Если замерять время то мы не увидим что задача больше половины времени простаивала(propGEOM_MORPH)

Критический путь

Какие проблемы возможны?

в) Синхронизации.Синхронизации - это ожидания какого-то события или освобождения какого-то ресурса задачей.

Признаки:

Нагрузка на CPU меньше 100% И есть синхронизации внутри отдельных задач.

Синхронизация

Синхронизация

Синхронизация

Видно что нагрузка в районе 55-60%Потоки простаивают внутри задач.CALC_ROOT_MOTION

Какие проблемы возможны?

г) GPU

Признаки:

Нагрузка на GPU близка к 100%

GPU

CPU ожидает GPU

Заключение

• В многопоточных системах не нужно измерять реальное время работы кода, считайте время выполнения кода на CPU

• Замеряйте синхронизацию между задачами

• Ищите критические пути

Вопросы?

Спасибо!

• Контакты:• botikus@yandex.ru• Skype: botikus1

Recommended