
- •Оптимизация и доработка цифрового фильтра масштабирования видеоданных
- •Содержание
- •Введение
- •Технологияdirectshow
- •Обзор технологии
- •Фильтр видео масштабирования компании Элекард в контексте технологииDirectShow
- •Методы масштабирования цифровых изображений, применяемые в фильтре компании элекард
- •Метод Ланцоша
- •Способы оптимизации программы на языке си
- •Выбор оптимального алгоритма
- •Вычислительная сложность
- •Выбор команд
- •Зависимость по данным и параллелизм команд
- •Оптимизация имеющейся программной реализации алгоритма
- •Оптимизация циклов
- •Оптимизация проверки условий
- •Оптимизация медленных команд
- •Оптимизация работы с памятью
- •ТехнологияSimd
- •Общее описание
- •Основные особенности применения технологии
- •Использование многопоточности
- •Общие принципы многопоточности
- •Способы программной организации многопоточности
- •Основные аспекты оптимизации многопоточности
- •Постановка задачи
- •Ход выполнения практики
- •Заключение
- •Список использованных источников
Основные аспекты оптимизации многопоточности
При организации многопоточности в уже имеющемся однопоточном приложении необходимо, прежде всего, выделить наиболее затратные по вычислениям участки кода. Именно их стоит подвергать разбиению на потоки.
Если же программная система еще находится в стадии проектирования, то стоит обратить внимание на трудоемкость выбранных алгоритмов на разных участках. В любом случае, стоит стремиться выделить ограниченное количество потоков, но при этом максимально загруженных работой [5]. Это будет эффективнее, так как нивелирует накладные расходы на обеспечение жизненного цикла потока.
В то же время необходимо соблюсти баланс нагрузки на потоки. В случае чрезмерной загруженности одного из потоков, и недостаточной нагрузки на остальные могут возникнуть дополнительные трудности с синхронизацией – потокам с меньшей нагрузкой придется ожидать более загруженные. При обнаружении неравномерности нагрузки на потоки необходимо выяснить причину этого и по возможности устранить.
Дополнительным средством оптимизации может служить определение числа эффективно выполняемых потоков для конкретного компьютера, которое эквивалентно числу ядер процессора с учетом гиперпоточности. Таким образом, зная информацию о аппаратных границах эффективной многопоточности, можно настраивать работу программы под конкретный компьютер, избегая как излишней нагрузки на потоки, так и создания слишком большого числа потоков.
Постановка задачи
Необходимо исследовать возможные способы оптимизации фильтра масштабирования видео. По результатам исследования осуществить оптимизацию фильтра, а также предложить пути возможного совершенствования и доработки.
Требуется также осуществить перенос фильтра на платформу Windows64bit.
При оптимизации необходимо также учесть возможный переход на операционные системы семейства UnixиMacOS.
Ход выполнения практики
Выполнение задания по практике начато с ознакомления с основами технологии DirectShow. Проведено ознакомление со всеми свойствами, доступными пользователю фильтра масштабирования видео. Получены навыки тестирования и отладки фильтров.
Осуществлено ознакомление с исходным кодом программы. В качестве приоритетных участков программы для оптимизации выделены фрагменты, реализующие непосредственное масштабирование, что подтверждено замерами времени выполнения различных частей программы.
Оптимизация программы с применением многопоточности уже осуществлена. Замену алгоритмов масштабирования в фильтре на более быстродействующие на данном этапе решено не производить в связи с перспективой их успешной оптимизации. На основании проведенных исследований в качестве эффективного средства оптимизации методов масштабирования, являющихся одновременно самыми затратными по времени участками фильтра, выбран перевод критических участков кода на Ассемблер с применением технологии SIMD. В соответствии с требованиями компании Элекард, работоспособность фильтра не должна зависеть от поддержки процессором технологииSIMD. Для сохранения работоспособности фильтра и одновременного осуществления оптимизации критических участков кода было решено создать две версии оптимизации. Первая версия будет реализована на Ассемблере без применения векторных команд и оптимизирована. Во второй версии необходимо обеспечить максимальное быстродействие на процессорах с поддержкой векторных вычислений. Для реализации аппаратной независимости работоспособности фильтра реализован блок проверки модели процессора и поддержки им векторного расширения набора команд. В зависимости от результатов проверки, производится выбор версии оптимизированных участков для использования в работе фильтра.
В рамках данной практики реализованы версии процедур масштабирования на Ассемблере без применения векторных команд, произведена их отладка и тестирование. В качестве используемого компилятора выбран NASM, как позволяющий получить кроссплатформенный код, не нуждающийся в значительных модификациях при переносе на другую операционную систему. По результатам тестирования данная реализация показала свою эффективность и принята к использованию в фильтре. Результаты сравнительного тестирования полученной реализации для различных методов масштабирования приведены в таблице 5.1.
Таблица 5.1 – Результаты оптимизации методов масштабирования с применение Ассемблера без технологии SIMD.
Метод Ускорение |
Sharp |
Precise |
Lanczos |
Прирост производительности, % |
54.6 |
37 |
38.6 |