Разработчики FFmpeg заявляют о 94-кратном ускорении обработки видео благодаря ручно написанному коду AVX-512
Недавно команда FFmpeg продемонстрировала, как инструкции AVX-512 могут значительно повысить производительность обработки видео. Согласно представленным данным, оптимизированный вручную ассемблерный код, использующий эти SIMD-инструкции, ускоряет декодирование видео в диапазоне в диапазоне от 3 до 94 раз.
AVX — это расширения системы команд x86, реализованные Intel и AMD в современных процессорах. Эти инструкции, особенно в сочетании с 512-битными регистрами AVX-512, существенно увеличивают эффективность параллельной обработки данных. Тут надо понимать, что конкретные характеристики тестовой системы не раскрываются, но AVX-512 впервые появилась в процессорах Intel Xeon Phi x200 (Knights Landing) в 2016 году. Высокая производительность достигается за счёт сочетания векторных инструкций AVX-512 с тщательно оптимизированным ассемблерным кодом, изначально разработанным для улучшения параллельной обработки SIMD.
FFmpeg — это свободно распространяемый пакет программного обеспечения с открытым исходным кодом. Он предоставляет обширный набор библиотек и инструментов для работы с аудио- и видеопотоками — своего рода универсальный инструмент в мире мультимедиа. FFmpeg используется популярными медиаплеерами, такими как VLC, и крупными компаниями, включая YouTube. Разработкой проекта занимается основная команда FFmpeg, а сообщество волонтёров вносит свой вклад в виде кода и патчей.
По словам разработчиков, в настоящее время ассемблерный код составляет около 8% кодовой базы FFmpeg, что оставляет большой потенциал для дальнейшей оптимизации. Ассемблер — это низкоуровневый язык, которым владеют немногие программисты, особенно сейчас, когда в индустрии предпочтение отдаётся высокоуровневым языкам, таким как Python.
Тем не менее, опытные разработчики всегда стремятся максимально использовать возможности современного оборудования. FFmpeg включает в себя специально написанные вручную процедуры декодирования как для процессоров x86, так и для ARM, несмотря на то, что некоторые в индустрии программного обеспечения желают AVX-512 «скорейшей и мучительной смерти».
Недавно Intel представила AVX10 — переосмысленную систему команд, которая стандартизирует инструкции AVX-512 для всех архитектур и типов ядер x86-процессоров. Однако Intel вызвала волну обсуждений, отключив поддержку AVX-512 на уровне прошивки в процессорах Core 12-го поколения и более поздних моделях, фактически удалив эту SIMD-систему команд из своих потребительских чипов.