VP8, VP9 і H265. Апаратне прискорення кодування і декодування відео в процесорах 6-го покоління Skylake

Більше шести років тому 13 вересня 2010 року на форумі IDF компанія Intel представила мікроархітектуру процесорів Sandy Bridge — другого покоління процесорів Intel Core. Процесор і графічне ядро об'єднали на одному кристалі, а саме графічне ядро значно оновився і збільшило тактову частоту. Саме у Sandy Bridge з'явилося «секретна зброя» — технологія Intel Quick Sync Video (QSV) для апаратного прискорення кодування і декодування відео. Маленький ділянку SoC спеціально виділили для розміщення спеціалізованих інтегральних схем, які займаються тільки відео. Це був справжній апаратний транскодер.


Вбудована графіка 9-го покоління HD Graphics 530 в процесорі Intel Core i7 6700K з 24 блоками виконання команд (EU), організованими в три фрагменти з 8 блоків.

Дивно, але Intel зуміла обійти і AMD і Nvidia в реалізації апаратного прискорення кодування відео: схожі технології AMD Video Codec Engine і Nvidia NVENC у відеокартах AMD і Nvidia з'явилися із значним запізненням (алгоритми компресії вимагають серйозної адаптації під процесори відеокарт). Ось чому ідея і розробка QSV зберігалися в секреті п'ять років.

Сказати, що QSV була затребувана — значить, нічого не сказати. Відтворення (декодування) відео з апаратною підтримкою стало набагато менше віднімати ресурсів у інших задач в ОС, менше нагрівати CPU і споживати менше електроенергії.

До того ж, в останні роки кодування відео стало однією з самих ресурсоємних завдань на ПК. Популярність YouTube перетворила мільйони людей в операторів і режисерів. А тут ще й повсюдне поширення смартфонів, для яких потрібно транскодування з DVD в стислий MP4 AVC/H. 264. В результаті, практично кожен ПК став видеостудией. Масово поширилися IPTV і потокові відеотрансляції в інтернеті. Комп'ютер почав виконувати роль телевізора. Відео стало всюдисущим і перетворилося на один із найбільш популярних видів контенту на ПК. Воно кодується і транскодируется постійно і скрізь: на різні бітрейти, залежно від типу пристрою, розміру екрана і швидкості інтернету. У такій ситуації можливість швидкого кодування і декодування відео в процесорах напрошувалася сама собою. Так в GPU Intel вбудували апаратний кодер/декодер.

Сучасний кодек обробляє кожен кадр окремо, але також аналізує послідовність кадрів на предмет повторень у часі (між кадрами) і просторі (в межах одного кадру). Це складна обчислювальна завдання. Нижче показаний приклад кадру з відео, який закодований новітнім кодеком HEVC. Для конкретної ділянки біля вуха зайця показано, як саме були закодовані різні ділянки кадру. Також показано становище і тип кадру в загальній структурі відеопотоку. Не заглиблюючись у деталі алгоритмів відеокомпресії, це дає загальне уявлення, наскільки багато інформації потрібно аналізувати, щоб ефективно кодувати і декодувати відео.


Скріншот відкритого відео в програмі Elecard StreamEye, 1920×1040

Апаратна підтримка кодування і декодування означає, що безпосередньо в процесорі реалізовані інтегральні схеми, спеціалізовані для конкретних завдань кодування і декодування. Наприклад, дискретне косинусне перетворення (DCT) виконується при кодуванні, а зворотне дискретне косинусне перетворення — при декодуванні.

За минулі п'ять років технологія Intel QSV значно просунулася вперед. Додана підтримка вільних відеокодеків VP8 і VP9, оновлені драйвери під Linux і т. д.

Технологія покращувалось з кожним новим поколінням Intel Core аж до нинішнього 6-го покоління Skylake.

Мікроархітектура GPU 9-го покоління
Остання версія QSV 5.0 вийшла разом з мікроархітектурою ядра шостого покоління Skylake. Дана версія GPU в офіційній документації Intel класифікується як Gen9, тобто графіка 9-го покоління.


Процесор Intel Core i7 6700K для настільних комп'ютерів містить 4 ядра CPU і вбудовану графіку 9-го покоління HD Graphics 530

З кожною новою мікроархітектурою в GPU збільшувалася кількість блоків виконання команд (EU). Воно зросло з 6 до Sandy Bridge до 72 в топової графіку Iris Pro Graphics 580 на кристалах Skylake. У тому числі за рахунок цього продуктивність GPU збільшилася удесятеро без збільшення тактової частоти. У всій графіку останнього покоління Iris і Iris Pro є вбудований кеш Level 4 на 64 або 128 МБ.

▍Мікроархітектура блоків виконання команд (EU)

Базовим будівельним блоком мікроархітектури Gen9 є блок виконання команд (EU). Кожен EU поєднує в собі одночасну багатопоточність (SMT) і ретельно підігнаних чередующуюся багатопоточність (IMT). Тут працюють арифметично-логічні пристрої з одиночним потоком команд, множинним потоком даних (SIMD ALU). Вони збудовані з конвеєрів численних тредів для високошвидкісного проведення обчислень з плаваючою комою і цілочисельних операцій.

Суть чергується багатопоточності в EU полягає в тому, щоб гарантувати безперервний потік готових для виконання інструкцій, але в той же час ставити в чергу з мінімальною затримкою більш складні операції, такі як розміщення векторів в пам'яті, запити семплерів або інші системні комунікації.


Блок виконання команд (EU)

Кожен тред в блоці виконання команд Gen9 містить 128 регістрів загального призначення. У кожному з регістрів 32 байта пам'яті, доступної в вигляді 8-елементного вектора SIMD або 32-бітних елементів даних. Таким чином, на кожен тред припадає 4 КБ файлу реєстру загального призначення (GRF). Всього на один EU припадає 7 тредів з загальною кількістю 28 КБ GRF на EU. Гнучка система адресації дозволяє адресувати кілька регістрів разом. Стан треда в поточний момент зберігається в окремому файлі архітектури реєстру (АРФА).

Залежно від навантаження, апаратні треди в EU можуть виконувати паралельно один код від одного обчислювального ядра або можуть виконувати код від абсолютно різних обчислювальних ядер. Стан виконання в кожному тред, в тому числі його власні покажчики інструкцій, що зберігаються в його незалежному АРФА. На кожному циклі EU може видавати до чотирьох різних інструкцій, які повинні бути від чотирьох різних тредів. Спеціальний арбітр тредів (Thread Arbiter) надсилає ці інструкції в один з чотирьох функціональних блоків для виконання. Зазвичай арбітр може вибирати з різнорідних інструкцій, щоб одночасно завантажувати всі функціональні блоки і, таким чином, забезпечувати паралелізм на рівні інструкцій.

Пара модулів FPU на схемі насправді виконує операції з плаваючою комою, і цілочисельні обчислення. У Gen9 ці модулі способи обробити за цикл не тільки до чотирьох операцій з 32-бітними числами, але і до восьми операцій з 16-бітними. Операції додавання і множення виконуються одночасно, тобто блок EU здатний виконати максимум до 16 операцій з 32-бітними числами за один цикл: 2 FPU по 4 операції × 2 (додавання+множення).

Генерацією SPMD-коду для многопоточной завантаження EU займаються відповідні компілятори, такі як RenderScript, OpenCL, Microsoft Direct Compute Shader, OpenGL Compute і C++AMP. Компілятор сам евристично вибирає режим завантаження тредів (SIMD-width): SIMD-8, SIMD-16 або SIMD-32. Так, у разі SIMD-16 на одному EU можуть одночасно виконуватися 112 (16×7) потоків.

Обмін даними в рамках однієї інструкції всередині блоку EU може становити, наприклад, 96 байтів на читання і 32 байтів на запис. При масштабуванні на весь GPU з урахуванням декількох рівнів ієрархії пам'яті виходить, що максимальний теоретичний ліміт обміну даними між FPU і GRF досягає декількох терабайт в секунду.

▍Масштабованість

Мікроархітектура GPU має масштабованістю на всіх рівнях. Масштабованість на рівні тредів переходить в масштабованість на рівні блоків виконання команд. У свою чергу, ці блоки виконання команд об'єднаються в групи по вісім штук (8 EU = 1 subslice).

На кожному рівні масштабування є локальні модулі, що працюють тільки тут. Наприклад, для кожної групи з 8 блоків EU призначений свій локальний диспетчер тредів, порт даних і семплер для текстур.


Група з 8 блоків EU (subslice)

У свою чергу групи з 8 EU об'єднуються в групи по 24 EU (3 sublices = 1 slice). Ці зрізи по 24 блоку, в свою чергу, теж масштабуються: існуюча графіка Gen9 містить 24, 48 або 72 EU.

У графіку Gen9 збільшено обсяг кеша третього рівня L3 до 768 КБ на кожну групу з 24 EU. У всіх семплери і портів даних свій власний інтерфейс доступу до L3, дозволяє вважати і записати по 64 байта за цикл. Таким чином, на групу з 24 EU припадає три порти даних з смугою передачі даних до кешу L3 192 байта за цикл. Якщо в кеші немає даних за запитом, то дані запитуються або надсилається для запису в системну пам'ять, теж по 64 байта за цикл.


Мікроархітектура Gen9 з двох груп по 24 (3×8) EU

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

Що вміє QSV в Skylake
У Gen9 з'явилася повна підтримка апаратного прискорення при кодуванні і декодуванні H. 265/HEVC, часткова підтримка апаратного кодування і декодування вільним кодеком VP9. Проведені значні поліпшення в технології QSV. Вони підвищили якість і ефективність кодування і декодування, а також продуктивність фільтрів в програмах для транскодування і видеоредактирования, які використовують апаратне прискорення.

Інтегрована графіка Skylake підтримує стандарти DirectX 12 Feature Level 12_1, OpenGL 4.4 і OpenCL 2.0. Вирішено повністю відмовитися від моніторів VGA, зате Skylake GPU підтримують до трьох моніторів з інтерфейсами HDMI 1.4, DisplayPort 1.2 або Embedded DisplayPort (eDP) 1.3.

Апаратне прискорення декодування відео доступно графічного драйвера через інтерфейси Direct3D Video API (DXVA2), Direct3d11 Video API або Intel Media SDK, а також через фільтри MFT (Media Foundation Transform).

У графіку Gen9 підтримується апаратне прискорення декодування AVC, VC1, MPEG2, HEVC (8 біт), VP8, VP9 і JPEG.

▍Апаратне прискорення декодування відео

Кодек
Профіль
Рівень
Максимальна роздільна здатність
MPEG2
Main
Main
High
1080p
VC1/WMV9
Advanced
Main
Simple
3
High
Simple
3840×3840
AVC/H264
High
Main
MVC & stereo
L5.1
2160p(4K)
VP8
0
Unified level
1080p
JPEG/MJPEG
Baseline
Unified level
16k × 16k
HEVC/H265
Main
L5.1
2160(4K)
VP9
0 (4:2:0 Chroma 8-bit)
Unified level
ULT, 4k 24fps @15Mbps
ULX, 1080p 30fps @10Mbps
Джерело: 6th Generation Intel Processor Datasheet for S-Platforms

Розрахункова продуктивність декодування відео при апаратного прискорення становить понад 16 одночасних потоків відео 1080p. Реальна продуктивність залежить від моделі GPU, бітрейту і тактової частоти. Апаратне декодування H264 SVC не підтримується в Skylake.

Апаратне прискорення кодування доступно тільки через інтерфейси Intel Media SDK, а також через фільтри MFT (Media Foundation Transform).

▍Апаратне прискорення кодування відео

Кодек
Профіль
Рівень
Максимальна роздільна здатність
MPEG2
Main
High
1080p
AVC/H264
Main
High
L5.1
2160p(4K)
VP8
Unified profile
Unified level

JPEG
Baseline

16K×16K
HEVC/H265
Main
L5.1
2160p(4K)
VP9
8-bit 4:2:0 BT2020


Джерело: 6th Generation Intel Processor Datasheet for S-Platforms

Крім апаратного прискорення кодування і декодування, у графіку Gen9 реалізовано апаратне прискорення обробки відео, в тому числі наступних функцій: деінтерлейсінг, визначення каденції, масштабування відео (Advanced Video Scaler), поліпшення деталізації, стабілізація зображення, стиснення охоплення колірної гами (gamut compression), адаптивне поліпшення контрасту HD, поліпшення відтінків шкіри, контроль кольору, шумозаглушення в колірної складової каналу (chroma de-noise), перетворення SFC (Scalar and Format Conversion), стиснення пам'яті, LACE (Localized Adaptive Contrast Enhancement), просторове шумозаглушення, Out-Of-Loop De-blocking (для декодера AVC) і ін

Апаратний транскодер Gen9 підтримує наступні специфічні функції транскодування:

  • Швидкий і енергоефективний кодер MPEG в реальному часі для відеоконференцій
  • Стиснення пам'яті без втрат для медиадвижка з метою зменшення енергоспоживання
  • Масштабування відео (Advanced Video Scaler)
  • Енергоефективний конвертер SFC (Scalar and Format Conversion)
У частині застосувань відеоаналітікі Gen9 підтримує апаратне прискорення для ряду фільтрів, які можуть бути корисні в додатках як розпізнавання облич, распознаваний виразів облич, розпізнавання жестів, відстеження об'єктів і т. д. (див. таблицю).


Джерело: 6th Generation Intel Processor Datasheet for S-Platforms

У Gen9 реалізована апаратна підтримка обробки відео з цифрових камер (Camera Processing Pipeline), у тому числі окремі функції цієї обробки: баланс білого, відновлення повнокольорового зображення з масиву кольорових фільтрів на сенсорі камери (de-mosaic), корекція дефективних пікселів, виправлення рівня чорного, гамма-корекція, усунення віньєтування, конвертер колірного простору (Front end Color Space Converter, CSC), поліпшення передачі кольору (Image Enhancement Color Processing, IECP).

Skylake GPU

  • HD Graphics 510 (GT1, 12 EU, 950 МГц, 182,4 Гфлопс)
  • HD Graphics 515 (GT2, 24 EU, 1000 МГц, 384 Гфлопс)
  • HD Graphics 520 (GT2, 24 EU, 1050 МГц, 403,2 Гфлопс)
  • HD Graphics 530 (GT2, 24 EU, 1150 МГц, 441,6 Гфлопс)
  • Iris Graphics 540 (GT3e, 48 EU, 64 МБ eDRAM, 1050 МГц, 806,4 Гфлопс)
  • Iris Graphics 550 (GT3e, 48 EU, 64 МБ eDRAM, 1100 МГц, 844,8 Гфлопс)
  • Iris Pro Graphics 580 (GT4e, 72 EU, 128 МБ eDRAM, 1000 МГц, 1152 Гфлопс)
  • HD Graphics P530, сервер (GT2, 24 EU, 1150 МГц, 441,6 Гфлопс)
  • Iris Pro Graphics P555, сервер (GT3e, 48 EU, 128 МБ eDRAM, 1000 МГц, 768 Гфлопс)
  • Iris Pro Graphics P580, сервер (GT4e, 72 EU, 128 МБ eDRAM, 1000 МГц, 1152 Гфлопс)
Як програми використовують апаратне прискорення
Щоб використовувати апаратне прискорення, кожна програма має явно реалізувати підтримку специфічних функцій Gen9. Багато хто робить це. Компанія Intel публікує у відкритому доступі Media SDK 2.0, так що підтримку апаратного прискорення кодування та декодування можна впровадити в будь-яку програму. Крім того, існують готові програми для транскодування лайв відео кодеки Intel, такі як Элекард CodecWorks 990. На відміну від SDK, CodecWorks 990 не вимагає участі програмістів для застосування в реальних задачах, вже містить найбільш популярні профілі транскодування і працювати з ним інженеру-програмісту не в цілому набагато простіше, ніж з SDK. Як працюють програмні транскодери з апаратним прискоренням — ми розповімо в наступній частині.

(Продовження...)
Джерело: Хабрахабр

0 коментарів

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