Підвищення продуктивності мультимедіа додатків за допомогою апаратного прискорення


Архітектура процесорів 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. H. 264 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, достатньо виконати кілька простих дій:
  1. Завантажити Intel Media SDK для цільового пристрою.
  2. Завантажте навчальні керівництва і прочитайте їх, щоб зрозуміти, як налаштовувати програмне забезпечення з допомогою SDK.
  3. Виберіть Intel Media SDK. Якщо ви використовуєте Linux, див. керівництво по установці для Linux.
  4. Завантажити зразок коду SDK, щоб поекспериментувати з вже скомпільований зразками додатків.
  5. Зберіть і запустіть додаток 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.

Додаткові ресурси
  1. Встановіть і запустіть Intel Media SDK в Windows
  2. FFMPEG.ORG
  3. Інтеграція Intel Media SDK з FFMPEG для операцій мультиплексування, демультиплексування, кодування і декодування звуку
  4. Навчальні посібники з Intel Media SDK для клієнтів і серверів
  5. Performance Intel Graphics Analyzers
  6. Intel VTune Amplifier
  7. Intel Media Server Studio
  8. Прискорення додатків на основі FFmpeg з допомогою Intel Quick Sync Video
  9. Intel QuickSync Video і FFmpeg*
  10. Intel QuickSync Video і FFmpeg: установка і перевірка
  11. Доступ до Intel Media Server Studio кодеків для Linux за допомогою FFmpeg
  12. Значення кодека HEVC (H. 265)
Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.