H. 265/HEVC. Оптимізація під архітектуру Intel


Поточну ситуацію в області медиакодеков, можна описати буквально кількома словами: прості рішення себе вичерпали. З кожним роком матеріал для кодування стає все складніше, а вимоги до якості результату — все вище. В цих умовах, коли лобова атака вже не дає ефекту, особливого значення набуває оптимізація як кодування, так і відтворення медіа під конкретні платформи з використанням найбільш сучасних можливостей. Чого можна домогтися такою оптимізацією, ми покажемо на прикладі перспективного кодека Н.265. В якості цільової платформи розглянемо серверне рішення Intel — процесор Xeon.

Короткий опис H. 265/HEVC

Стандарт H. 265/HEVC (High-Efficiency Video Coding — високоефективне кодування відео) — це самий останній стандарт приставки, розроблений спільно з Міжнародним союзом електрозв'язку ITU-T і ISO/IEC. Мета цього стандарту — підвищити ефективність стиснення і знизити втрати даних. H. 265/HEVC, порівняно з попереднім стандартом H. 264/AVC, має вдвічі більш високим ступенем стиснення при рівному суб'єктивному якості зображення. Технологія HEVC дозволяє постачальникам відео передавати високоякісні відеоматеріали з меншим навантаженням на мережу.
Відзначимо основні функціональні нововведення, застосовані в Н.265:
  • Особливі можливості для довільного доступу і зрощування цифрових потоків. В H. 264/MPEG-4 AVC цифровий потік повинен завжди починатися з блоку адресації IDR, а в HEVC підтримується довільний доступ.
  • Зображення розділяється на одиниці дерева кодування (CTU), кожна з яких містить блоки дерева кодування (CTB) яскравості і кольоровості. У всіх попередніх стандартах кодування відео використовувався фіксований розмір масиву для вибірок яскравості — 16×16. HEVC підтримує блоки CTB різного розміру, який вибирається в залежності від потреб кодувальника з точки зору пам'яті і обчислювальної потужності.
  • Кожен блок кодування (СВ) може бути рекурсивно розділений на блоки перетворення (ТБ). Поділ визначається залишковим квадродеревом. На відміну від попередніх стандартів у HEVC один блок ТБ може охоплювати кілька блоків передбачення (РВ) для перехресних передбачаються одиниць кодування (CU).
  • Спрямоване передбачення з 33 різними напрямками орієнтації для блоків перетворення (TB) розміром від 4×4 до 32×32. Можливий напрямок передбачення — всі 360 градусів. HEVC підтримує різні методики кодування передбачення интракадров.
H. 265/HEVC накладає виключно високі вимоги до обчислювальної потужності і на клієнтські пристрої, і на внутрішні сервери транскодування.

Проблеми продуктивності HEVC

Існуючий проектHEVC Test Model (HM) реалізує тільки основну функціональність стандарту; фактична продуктивність, як і раніше, далека від необхідної в реальному середовищі. Два основних недоліки цього проекту:
  • Відсутність паралельної схеми.
  • Неефективна налаштування векторизації.



Малюнок 1. Профіль проекту HM — паралельна робота потоків


Малюнок 2. Профіль проекту HM — ресурсномісткий код

Цей кодек HEVC споживає, порівняно з H. 264, у 100 разів більше ресурсів ЦП на стороні сервера і в 10 разів більше — на стороні клієнта.
Кодек H. 265/HEVC привернув увагу багатьох компаній і організацій у всьому світі, що спричинило оптимізацію його продуктивності і фактичну розробку. Існує кілька проектів з відкритим вихідним кодом.
  • OpenHEVC (сумісний з HM10.0, оптимізація декодера)
  • x265 (сумісний з HM, розпаралелювання і векторизація)
Для оцінки продуктивності кодувальника x265 на платформі з процесорами Intel® Xeon® (E5-2680, 2,7 ГГц, 8*2 фізичних ядер, кодова назва — Sandy Bridge) ми запустили відео з роздільною здатністю 720p і частотою 24 кадру в секунду. Розробники x265 виконали велику роботу для оптимізації вихідного стандарту з метою розпаралелювання обробки задач і даних. Тим не менш, наш тест показав, що кодек може використовувати лише 6 ядер в системі з 32 логічними ядрами (з включеним SMT). Таким чином, кодек далеко не в повній мірі використовує ресурси сучасних багатоядерних платформ.


Малюнок 3. Навантаження на ЦП в проекті X. 265


Малюнок 4. Проект X. 265 з налаштуванням Intel® SIMD

У проекті x265 також були використані інструкції Intel® SIMD (автогенерація компілятором), що забезпечило підвищення продуктивності більш ніж на 70%. Разом з подальшою оптимізацією компиляторными опціями, компілятор Intel забезпечує подвоєння продуктивності на платформі IA. Тим не менш, продуктивність кодера як і раніше істотно нижче, ніж потрібно для кодувальника реального часу, особливо для відео високої чіткості з роздільною здатністю 1080p.
Нижче ми покажемо результати, досягнуті китайською компанією Strongene за підтримки фахівців компанії Intel на шляху оптимізації створеного їй кодека H. 265/HEVC під різні платформи Intel.

Оптимізація HEVC під платформу Intel® Xeon™

Основну частину самих ресурсоємних функцій по обробці відео і зображень становлять інтенсивні обчислення блочних даних. Для їх оптимізації можна використовувати інструкції векторизації Intel® SIMD. У кодировщике у складі кодека Strongene, згідно з даними профілювання, за допомогою інструкцій Intel SSE можна провести ручну векторизацію всіх найбільш ресурсномістких функцій, таких як кадрова інтерполяція низької складності з компенсацією руху; цілочисельне перетворення без транспозиції; перетворення Адамара; обчислення сум абсолютних різниць (SAD)/квадратів різниці (SSD) з найменшим надмірним використанням пам'яті. Ми включили інструкції Intel SSE у вигляді интринсик-функцій, як показано на рис. 5.


Малюнок 5. Приклад включення інструкцій Intel® SIMD/SSE в кодеку Stongene

Розробники Strongene переписали всі ресурсомісткі функції, щоб домогтися найбільшого приросту продуктивності кодувальника. На рис. 6 показані наші дані профілювання в сценарії кодування відео стандарту 1080p з допомогою HEVC. Видно, що 60% ресурсномістких функцій обробляються інструкціями Intel SIMD.


Малюнок 6. Результати профілювання функцій кодування Strogene

Інструкції Intel AVX2 з обчисленням 256-бітних цілочисельних значень мають вдвічі більш високою продуктивністю у порівнянні з тим самим кодом Intel SSE, які працюють зі 128-розрядними значеннями. Набір інструкцій Intel AVX2 підтримується платформою
Intel Xeon (Haswell), випуск якої розпочато в 2014 році. Для оцінки продуктивності вбудованих функцій Intel AVX2 ми використовуємо поширене обчислення сум абсолютних різниць для блоку 64*64.

Таблиця 1. Результати реалізації Intel® SSE і Intel® AVX2
Цикли ЦП Вихідний код Intel® SSE Intel® AVX2
Запуск 1 98877 977 679
Запуск 2 98463 1092 690
Запуск 3 98152 978 679
Запуск 4 98003 943 679
Запуск 5 98118 954 678
Середня 98322,6 988,8 681
Прискорення 1,00 99,44 144,38
Як видно з таблиці 1, застосування інструкцій Intel SSE і Intel AVX2 забезпечує підвищення продуктивності у 100 разів, при цьому код Intel AVX2 додатково виграє ще 40% у порівнянні з Intel SSE.
Як ми бачили раніше, в більшості існуючих реалізацій використовуються не всі ядра багатоядерних платформ. Спираючись на останню многоядерную архітектуру Intel Xeon з паралельною залежністю між алгоритмами на основі CTB, розробники Strongene пропонують замінити вихідні методи OWF і WPP паралельною структурою IFW, а потім розробити трирівневу схему управління потоками, щоб гарантувати повне використання структурою IFW всіх ядер ЦП для прискорення кодування HEVC.


Малюнок 7. Паралельна робота потоків і використання ЦП в кодировщике Strongene

За рахунок застосування нової паралельної структури WHP і повної реалізації SIMD інструкцій Intel відповідно на рівні завдань і рівні даних розробникам кодувальника Strongene вдалося добитися вельми значного підвищення продуктивності на процесорах x86 для відео з роздільною здатністю 1080p, використовуючи обчислювальні ресурси всіх ядер, як показано на рис. 8.

Подальша настройка з використанням SMT/HT

Також представляє інтерес залежність продуктивності кодека від включення в системі широко поширеною на всіх платформах з архітектурою Intel одночасної багатопоточності (SMT), також званою технологією гипертрединга (HT).

Таблиця 2. Швидкість кодування Strongene HEVC на платформі Intel® Xeon®

Як видно з таблиці показано жовтим кольором) на платформі Ivy Bridge (процесор Intel Xeon E5-2697 v2 для відключеного SMT кодування відео HEVC з роздільною здатністю 1080p здійснюється в реальному часі!

Домігшись величезного збільшення продуктивності, ми продовжили вивчення можливостей кодування Strongene HEVC на платформі Ivy Bridge, приділяючи увагу швидкості потоку і питань якості.

Таблиця 3. Порівняння продуктивності кодеків і H. H. 264 265

В таблиці 3 видно, що кодек H. 265/HEVC знижує обсяг даних на 50% при збереженні колишньої якості відеозображення.

H. 265/HEVC, по всій видимості, стане найпопулярнішим стандартом відео в найближче десятиліття. У безлічі додатків і продуктів мультимедіа в даний час реалізується підтримка HEVC. В цьому документі ми реалізували засноване на ЦП повнофункціональне рішення HEVC реального часу на платформах Intel з новими технологіями IA. Наше оптимізоване рішення на базі процесорів Intel розгорнуто в компанії Xunlei, що займається наданням послуг відео через Інтернет, і сприятиме повсюдному впровадженню та поширенню технології H. 265/HEVC.

Джерело: Хабрахабр

0 коментарів

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