Архитектура процессоров Intel становится все более ориентированной на ГП, что открывает удивительные возможности для резкого повышения производительности просто за счет разгрузки обработки мультимедиа с ЦП на ГП. Существует немало инструментов, доступных разработчикам для повышения производительности мультимедиа приложений. В числе этих инструментов есть бесплатные и простые в использовании.
В этой публикации вы найдете:
- Обзор вычислительных архитектур и текущие возможности ГП Intel
- Реализацию аппаратного ускорения с помощью FFmpeg
- Реализацию аппаратного ускорения с помощью Intel Media SDK или аналогичного компонента Intel Media Server Studio (в зависимости от целевой платформы)
Если вы испытываете потребность повысить производительность обработки мультимедиа, но не знаете, с чего начать, начните с FFmpeg. Измерьте производительность при программной обработке, затем просто включите аппаратное ускорение и проверьте, насколько изменилась производительность. Затем добавьте использование Intel Media SDK и снова сравнивайте при использовании разных кодеков и в разных конфигурациях.
Вычислительная архитектура: от суперскалярной до разнородной
Чтобы оценить важность развития ГП, давайте начнем с истории совершенствования архитектуры ЦП.
Вернемся в девяностые годы. Первый серьезный этап в развитии — появление суперскалярной архитектуры, в которой была достигнута высокая пропускная способность за счет параллельной обработки на уровне инструкций в пределах одного процессора.
Рисунок 1. Суперскалярная архитектура
Затем, в начале нулевых, появилась многоядерная архитектура (когда в составе одного процессора может быть более одного вычислительного ядра). Однородные ядра (все полностью идентичные) позволяли выполнять одновременно несколько потоков (параллельная обработка на уровне потоков).
При этом производительность многоядерной архитектуры была ограничена из-за целого ряда препятствий.
- Память: возрастал разрыв между скоростью процессора и скоростью памяти.
- Параллельная обработка на уровне инструкций (ILP): становилось все труднее обнаруживать доступные для параллельной обработки инструкции в пределах одного потока, чтобы полностью занять ресурсы одного высокопроизводительного ядра.
- Потребляемая мощность: при постепенном повышении тактовой частоты процессоров потребление электроэнергии росло в геометрической прогрессии.
Рисунок 2. Многоядерная архитектура
Современная разнородная архитектура
В разнородной архитектуре может быть несколько процессоров, использующих общий конвейер данных, которые можно оптимизировать для отдельных функций кодирования, декодирования, преобразования, масштабирования, применения чересстрочной развертки и т. д.
Другими словами, благодаря этой архитектуре мы получили ощутимые преимущества как в области производительности, так и в области потребления электроэнергии, недоступные ранее. На рис. 3 показано развитие ГП за пять последних поколений: графические процессоры приобретают все более важное значение. И при использовании h.264, и при переходе на самые современные кодеки h.265 графические процессоры предоставляют значительную вычислительную мощность, благодаря которой обработка видео с разрешением 4K и даже с более высоким разрешением не только становится возможной, но и выполняется достаточно быстро.
Рисунок 3. Развитие разнородной архитектуры
Поколения производительности ГП
На рис. 4 показано резкое повышение вычислительной мощности всего за несколько поколений, в которых графические процессоры конструктивно размещались на одном кристалле с ЦП. Если в вашем приложении используется обработка мультимедиа, необходимо задействовать разгрузку на ГП, чтобы добиться ускорения в 5 раз или более (в зависимости от возраста и конфигурации системы).
Рисунок 4. Усовершенствование обработки графики в каждом поколении процессоров Intel
Приступая к программированию ГП
На шаге 1 обычно измеряется производительность H.264, чтобы можно было в дальнейшем оценивать изменение производительности по мере доработки кода. FFmpeg часто используется для измерения производительности и для сравнения скорости при использовании аппаратного ускорения. FFmpeg — очень мощный, но при этом достаточно простой в использовании инструмент.
На шаге 2 проводится тестирование с разными кодеками и в разных конфигурациях. Можно включить аппаратное ускорение, просто заменив кодек (замените libx264 на h264_qsv) на использующий Intel Quick Sync Video.
На шаге 3 добавлено использование Intel Media SDK.
Примечание. В этой публикации рассматривается использование этих инструментов в операционной системе Windows*. Если вас интересует реализация для Linux*, см. Доступ к Intel Media Server Studio для кодеков Linux с помощью FFmpeg.
?Кодирование и декодирование FFmpeg
Начните с H.264 (AVC), поскольку h264: libx264 является программной реализацией в FFmpeg по умолчанию и выдает высокое качество исключительно программными средствами. Создайте собственный тест, затем снова измерьте производительность, сменив кодек с libx264 на h264_qsv. Позднее мы поговорим о кодеках H.265.
Следует отметить, что при работе с видеопотоками приходится выбирать между качеством и скоростью. При более быстрой обработке практически всегда снижается качество и возрастает размер файлов. Вам придется найти собственный приемлемый уровень качества, основываясь на количестве времени, необходимого для кодирования. Существует 11 предустановок для выбора определенного сочетания качества и скорости — от «Самой быстрой» до «Самой медленной». Существует несколько алгоритмов управления скоростью данных:
- кодирование за 1 проход с постоянной скоростью данных (set -b:v);
- кодирование за 2 прохода с постоянной скоростью данных;
- постоянный коэффициент скорости (CRF).
Intel Quick Sync Video поддерживает декодирование и кодирование с помощью ЦП Intel и интегрированного ГП1. Обратите внимание, что процессор Intel должен быть совместимым с Quick Sync Video и с OpenCL*. Дополнительные сведения см. в Заметках о выпуске Intel SDK для приложений OpenCL*. Поддержка декодирования и кодирования встроена в FFmpeg с помощью кодеков с суффиксом _qsv. В настоящее время Quick Sync Video поддерживается следующими кодеками: видео MPEG2, VC1 (только декодирование), H.264 и H.265.
Если вы хотите поэкспериментировать с Quick Sync Video в FFmpeg, необходимо добавить libmfx. Самый простой способ установить эту библиотеку — использовать версию libmfx, упакованную разработчиком lu_zero.
Пример кодирования с аппаратным ускорением Quick Sync Video:
ffmpeg -I INPUT -c:v h264_qsv -preset:v faster out.qsv.mp4
FFmpeg также может использовать аппаратное ускорение при декодировании с помощью параметра -hwaccel.
Кодек h264_qsv работает очень быстро, но видно, что даже самый медленный режим работы с аппаратным ускорением значительно быстрее только программного кодирования при самом низком качестве и самой высокой скорости.
При тестировании с кодеками H.265 вам потребуется либо получить доступ к сборке с поддержкой libx265, либо собрать собственную версию согласно инструкциям в Руководстве по кодированию для FFmpeg и H.265 или в документации X265.
Пример H.265:
ffmpeg -I input -c:v libx265 - preset medium -x265-params crf=28 -c:a aac -strict experimental -b:a 128k output.mp4
Дополнительные сведения об использовании FFmpeg и Quick Sync Video см. в разделе Облачные вычисления Intel QuickSync Video и FFmpeg.
Использование Intel Media SDK (sample_multi_transcode)
Для дальнейшего повышения производительности при использовании FFmpeg необходимо оптимизировать приложение с помощью Intel Media SDK. Media SDK — это межплатформенный интерфейс API для разработки и оптимизации мультимедиа приложений таким образом, чтобы использовать аппаратное ускорение блоков Intel с фиксированными функциями.
- Если ваши приложения и решения мультимедиа предназначены для клиентских устройств, используйте пакет Intel Media SDK. Его можно загрузить бесплатно.
- Если же ваши решения предназначены для встроенных систем, серверов или облачных платформ, доступ к Intel Media SDK можно получить с помощью Intel Media Server Studio. У этого решения есть бесплатный выпуск Community Edition и два платных выпуска: Essentials и Professional (их также можно использовать для ускорения перехода на HEVC и 4K/UHD).
Чтобы начать работать с Intel Media SDK, достаточно выполнить несколько простых действий:
- Загрузите Intel Media SDK для целевого устройства.
- Загрузите учебные руководства и прочтите их, чтобы понять, как настраивать программное обеспечение с помощью SDK.
- Установите Intel Media SDK. Если вы используете Linux, см. руководство по установке для Linux.
- Загрузите образец кода SDK, чтобы поэкспериментировать с уже скомпилированными образцами приложений.
- Соберите и запустите приложение Video Transcoding: sample_multi_transcode
Команды аналогичны командам FFmpeg. Примеры:
VideoTranscoding_folder\_bin\x64>\sample_multi_transcode.exe -hw -i::h264 in.mpeg2 -o::h264 out.h264
VideoTranscoding_folder\_bin\x64>\sample_multi_transcode.exe -hw -i::h265 in.mpeg2 -o::h265 out.h265
Обратите внимание, что для использования аппаратного ускорения необходимо указать параметр -hw в списке аргументов.
Этот пример также работает с декодером и кодировщиком HEVC (h.265), но его необходимо устанавливать из выпуска Intel Media Server Studio Pro.
Существует множество параметров, которые можно указывать в командной строке. С помощью параметра -u <quality, speed, balanced> можно задать целевое использование (TU), как при использовании предустановок FFmpeg. TU = 4 используется по умолчанию. На рис. 5 показаны показатели производительности при разных настройках TU.
Рисунок 5. Примеры характеристик производительности H264 по отношению к целевому использованию
Используйте другие программные средства Intel
Для дальнейшей доработки кода можно использовать средства оптимизации и профилирования Intel, в том числе Intel Graphics Performance Analyzer (GPA) и Intel VTune Amplifier. Кроме того, инструменты Intel Video Pro Analyzer и Intel Stress Bitstreams and Encoder помогут добиться высокого качества видео и поточной передачи, улучшить работу кодировщиков и декодеров, а также ускорить проверку, чтобы можно было быстрее выпускать решения на рынок.
Заключение
Компьютерная архитектура претерпела значительные изменения за последние 20 лет, причем ее развитие лишь в течение последних пяти лет дало существенный рост производительности. Теперь ЦП Intel могут обрабатывать мультимедиа непосредственно на ГП, благодаря чему становятся доступными новые модели использования как для конечных потребителей, так и для компаний.
Вы можете самостоятельно измерить повышение производительности с помощью FFmpeg, а также дополнительно оптимизировать код с помощью бесплатных интерфейсов API Intel Media SDK. Переход от программной обработки к аппаратному ускорению повышает производительность системы и снижает расход электроэнергии (и затраты), а также предоставляет дополнительные вычислительные ресурсы, достаточные, чтобы со временем перейти на семейство кодеков H.265.
Дополнительные ресурсы
- Установите и запустите Intel Media SDK в Windows
- FFMPEG.ORG
- Интеграция Intel Media SDK с FFMPEG для операций мультиплексирования, демультиплексирования, кодирования и декодирования звука
- Учебные руководства по Intel Media SDK для клиентов и серверов
- Intel Graphics Performance Analyzers
- Intel VTune Amplifier
- Intel Media Server Studio
- Ускорение приложений на основе FFmpeg с помощью Intel Quick Sync Video
- Intel QuickSync Video и FFmpeg*
- Intel QuickSync Video и FFmpeg: установка и проверка
- Доступ к Intel Media Server Studio для кодеков Linux с помощью FFmpeg
- Значение кодека HEVC (H.265)
Комментарии (4)
pangolin
03.06.2016 23:06К огромному сожалению, так и не удалось подружить mpeg2_qsv с IPTV и эфирным цифровым вещанием. На руках у клиентов ещё большой парк устройств, которые не умеют mpeg4 и h264, так что приходится транскодировать сигнал в реальном времени, и qsv тут был бы неплохим подспорьем — благодаря ему на одном процессоре можно кодировать примерно втрое больше потоков. Но увы, максимум, чего удаётся добиться — чёрный экран, а однажды сервер вообще завис намертво, после чего эксперименты прекратили.
azzas
03.06.2016 23:47График увеличения производительности видеоядра в процах Интел вызывает сомнение. Производительность увеличилась в 100 раз? серьезно?
monah_tuk
07.06.2016 04:07Его можно загрузить бесплатно.
Ребята из Intel, вот вам чуточку моих лучей… гм… фекалий: ваш маркетинг действительно уверен, что процессоры 3го-4го поколения сразу выбрасываются, как только выходит следующее? Почему Media SDK дропает поддержку "старых" процессоров и при этом удаляет старые пакеты Media SDK, которые эту поддержку имели? Сейчас выходит так, что база знаний Wowza по настройке аппаратного кодирования — это центральный репозиторий, откуда можно скачать Media SDK под нужный процессор. Почему этого нет у вас на сайте? Мало места?
В общем, при всей достаточной простоте (я впиливал поддержку QSV в ffmpeg на заказ, когда в центральных репах его ещё не было), я бы, по по-возможности, рассмотрел другие варианты кодирования, нежели QSV, особенно в контексте поддержки OS семейства Linux.
PS вопросы риторический, так как ответ известен: бабло.
Ivan_83
Вы предлагаете сравнивать скорость, но ведь результат у libx264 и аппаратныйх кодеков будет разный.
libx264 любят за качество кодирования. И кодируют видео для хранения.
Аппаратные кодеки любят за скорость. Кодируют всякие потоки IPTV.
Для ffmpeg и его пользователей AVX512 был бы неплохим подарком и поводом купить новые процы, но его зажали.
Про VP9 ни слова, ни про декодирование ни про кодирование. АМД обещает h265 и VP9 декодирование в новых процах Zen.