310 likes | 462 Vues
Оптимизация производительности ПО. Опыт на примере Spb Mobile DVD. Ким Бондаренко. Crystal Reality. Берем любимый фильм Конвертируем в оптимальный формат Смотрим на мобильном устройстве. Тестирование производительности и выявление неоптимальных частей программы. Типичный сценарий :.
E N D
Оптимизация производительности ПО Опыт на примере Spb Mobile DVD Ким Бондаренко Crystal Reality
Берем любимый фильм • Конвертируем в оптимальный формат • Смотрим на мобильном устройстве
Тестирование производительности и выявление неоптимальных частей программы Типичный сценарий: • Пишем • Смотрим аналоги • Оптимизируем • Автоматизированные средства • Ищем идеи в аналогах • Переделываем все заново или объясняем тормоза наличием дополнительной функциональности
Тестирование производительности и выявление неоптимальных частей программы Хороший сценарий: • Где нужна высокая производительность? • Оценка суммарной сложности низкоуровневых частей • Аналоги - заимствуем идеи • Критичные и не очень проблемы, низкоуровневые и высокоуровневые участки программы • Приоритеты • Оптимизация • Добавляем в feature-list строку fastest possible speed
Низкоуровневая и высокоуровневая оптимизация Тактика и стратегия борьбы с тормозами • Подход от необходимости • Анализ подходящих алгоритмов • Компонентная архитектура, локализация проблем • Объединение компонентов программы: 2 + 2 > 4 • Выделение процедур массивной обработки данных • Низкоуровневая оптимизация • Враг-невидимка: ввод-вывод, неравномерная нагрузка • Использование многопроцессорных машин, мультизадачность
Самомодифицирующийся и динамически генерирующийся код • Редкая настройка, активное использование • Жесткая привязка к ассемблеру • Возможность выполнения неподписанного кода Применение в Spb Mobile DVD: • Масштабирование видео-потока • Преобразование формата звука • Эквалайзер • Изменение настроек яркости, контрастности и насыщенности • Фильтр резкости
Быстрое масштабирование изображения • Приемлемая интерполяция • Только быстрая арифметика • Небольшой размер работающей процедуры • Высокая асимметрия настройка/использование
Принцип работы • Генерация двух интерполяционных процедур • Сворачивание цикла. Алгоритм Брезенхема • Головной проход
Объединение компонентов программы Overhead по сохранению промежуточныхрезультатов Прозрачность и простота компонентов VS
Объединение компонентов программы Spb Mobile DVDвывод видео информации на экран
Объединение компонентов программы Spb Mobile DVDвывод видео информации на экран • YUV – RGB конверсия • Масштабирование • Наложение дополнительной информации • Вывод на экран 10 ms 12 ms 3 ms 10 ms 35 ms + + • Наложение дополнительной информации в YUV формате, аварийное копирование кадра в случае необходимости • YUV – RGB конверсия и масштабирование с выводом на экран 2ms 13 ms 15 ms +
Яркость, контрастность, насыщенность, цвет
Фильтр резкости • Непрерывное изменение Чувствительная зона – 8x8 пикселей Высокая скорость
Кеш-промахи • Горизонтальная организация памяти • Большой размер обрабатываемого кадра Невозможность осуществления быстрого вертикального прохода
Промежуточный поворот • Вертикальная запись проходит быстро • Два последовательных поворота восстанавливают ориентацию
Write-only областипочему в некоторые массивы данных стоит только писать • Отсутствие double-buffering • Чтение из видеопамяти • Кеш-промахи. Декодирование MPEG4 на мобильных устройствах
Декодирование MPEG4 на мобильных устройствах • IDCT-преобразование • Write-back компенсация движения 20 ms 3 ms 13 ms 26 ms 18 ms 44 ms + + • Компенсация движения во временный буфер • IDCT-преобразование 4 ms 12 ms 16 ms 14 ms 18 ms 32 ms + +
Многопроцессорная обработка мультимедиа-данных • Использование ресурсов всех процессоров, Core DUO • Минимизация простоя при синхронных операциях ввода-вывода • Overhead при использовании систем синхронизации • Усложнение отладки. Deadlock-и и несинхронизованный доступ к ресурсам
Паттерны мультизадачной обработки мультимедиа информацииРаздельная обработка логических потоков • Параллельная обработка видео и аудио • Коэффициент увеличения загрузки – до x1.2 • Необходимость общей синхронизации ресурсов приложения
Паттерны мультизадачной обработки мультимедиа информацииЛокальное распараллеливание: форк-системы • Приложение может оставаться незащищенным • Коэффициент увеличения загрузки стремится к x2.0 • Необходимость внесения изменений в низкоуровневую часть обработчика
Паттерны мультизадачной обработки мультимедиа информацииОтложенная работа • Приложение может оставаться незащищенным • Коэффициент увеличения загрузки ограничен лишь длиной обрабатывающей цепочки • Возможное замедление работы на однопроцессорных машинах. Необходимость усложнения высокоуровневой логики
Объект “критическая секция” Оптимизация приложений для Windows Mobile и Symbian • Всегда связывается с системным объектом • Медленно создается • Приходится экономить на количестве отдельно-защищенных объектов
Объект “критическая секция” Оптимизация приложений для Windows Mobile и Symbian Собственная реализация критической секции: • Мгновенно создается • Занимает 8 байт • Вход и выход – несколько простых инструкций • Создает системный объект только в случае конфликтной ситуации Решение:
Менеджеры памятиОптимизация приложений для Windows Mobile и Symbian • Медленный поиск • Высокая фрагментация • Ограниченность адресного пространства Проблемы:
Менеджеры памятиОптимизация приложений для Windows Mobile и Symbian • Перегрузка операторов выделения памяти • Использование пула мелких объектов • Выбор менеджера памяти MinGW • Выделение рабочей области с помощью CreateFileMapping Решение:
Счетчики ссылокПроблемы и преимущества • Значительное упрощение проблемы освобождения ресурсов • Увеличение размера выполняемого кода • Замедление работы
Счетчики ссылокПодход Crystal2 Создать С++ библиотеку и ряд правил, позволяющих: • Объявление интерфейсов, реализаций и частичных реализаций объектов • Разрешающих множественную деревянную иерархию интерфейсов • Подсчет ссылок • Dynamic cast (Query-Interface)
Счетчики ссылокПодход Crystal2 Отличия от COM: • Статическое размещение указателя на счетчик ссылок в теле интерфейсов • 32-х разрядный идентификатор интерфейса • Не изменение счетчика ссылок при вызове QueryInterface
Счетчики ссылокПодход Crystal2 Результаты: • Ускорение работы с счетчиком ссылок • Ускорение метода QueryInterface • Возможность быстрой работы с временно полученными интерфейсами • Возможность коллизии идентификаторов интерфейсов • Невозможность создания дочерних объектов в теле QueryInterface