company_banner

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 в сжатый AVC MP4/H.264. В результате, практически каждый ПК стал видеостудией. Массово распространились IPTV и потоковые видеотрансляции в интернете. Компьютер начал выполнять роль телевизора. Видео стало вездесущим и превратилось в один из самых популярных видов контента на ПК. Оно кодируется и транскодируется постоянно и везде: на разные битрейты, в зависимости от типа устройства, размера экрана и скорости интернета. В такой ситуации возможность быстрого кодирования и декодирования видео в процессорах напрашивалась сама собой. Так в Intel GPU встроили аппаратный кодер/декодер.

    Современный кодек обрабатывает каждый кадр в отдельности, но также анализирует последовательность кадров на предмет повторений во времени (между кадрами) и пространстве (внутри одного кадра). Это сложная вычислительная задача. Ниже показан пример кадра из видео, который закодирован новейшим кодеком 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. Гибкая система адресации позволяет адресовать несколько регистров вместе. Состояние треда в текущий момент сохраняется в отдельном файле архитектуры реестра (ARF).

    В зависимости от нагрузки, аппаратные треды в EU могут выполнять параллельно один код от одного вычислительного ядра либо могут выполнять код от совершенно разных вычислительных ядер. Состояние выполнения в каждом треде, в том числе его собственные указатели инструкций, хранятся в его независимом ARF. На каждом цикле EU может выдавать до четырёх различных инструкций, которые должны быть от четырёх различных тредов. Специальный арбитр тредов (Thread Arbiter) отправляет эти инструкции в один из четырёх функциональных блоков для выполнения. Обычно арбитр может выбирать из разнородных инструкций, чтобы одновременно загружать все функциональные блоки и, таким образом, обеспечивать параллелизм на уровне инструкций.

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

    Генерацией SPMD-кода для многопоточной загрузки EU занимаются соответствующие компиляторы, такие как RenderScript, OpenCL, Microsoft DirectX 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 поддерживают до трёх мониторов c интерфейсами 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
    L3
    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 поддерживает следующие специфические функции транскодирования:

    • Быстрый и энергоэффективный кодер AVC в реальном времени для видеоконференций
    • Сжатие памяти без потерь для медиадвижка с целью уменьшения энергопотребления
    • Масштабирование видео (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. Как работают программные транскодеры с аппаратным ускорением — мы расскажем в следующей части.

    (Продолжение следует...)
    Intel
    224.18
    Company
    Share post

    Comments 34

      +1
      1. Quicksync не умеет кодировать в lossless
      2. Качество далеко от идеального, где-то на уровне veryfast в x264. Для предпросмотра подойдёт, для финального долгосрочного хранения x264 предпочтительней (особенно с CRF качеством).
      3. Нет настроек для повышения качества, такие как глубина и тип поиска векторов, и других.
      4. Невозможность использовать только часть функций (DCT, поиск векторов) при кодировании в сторонних приложениях, например в том же x264. В SDK 6 от nVidia это появилось, посмотрим добавят ли это в x264 и ускорит ли это его при сохранении качества.
        0

        Т.е. реальность не столь радужна. Чтож, маркетинг.

          0
          1. Да, не умеет и такая поддержка не планируется. можете привести пример, где это необходимо?
            0
            При работе с промежуточным результатом в видеоредакторе.
              0
              Да просто свой ролик смонтировать. Так сказать ради своего удовольствия, знакомым показать.
              Вот тут и оказывается что сильно с апаратным кодером не 'похимичить'.
              Проще на видеокарту сливать.
              0
              2. и 3. В Media SDK для контроля над соотношением скорость-качество, есть возможность менять target usage. Для большего контроля над энкодером, в последнем релизе Media Server Studio Community&Essentials появилось новое расширение Flexible Encode Infrastructure (FEI). Оно доступно только на Linux и только для AVC энкодера. Кроме того, мы не предоставляем поддержку данного расширения на форуме и в Intel Premier Support, но поставляем документацию и сэмплы.
              4. В Media Server Studio Community&Essentials 2017 появилось новое расширение Flexible Encode Infrastructure (FEI) для большего контроля над AVC энкодером на Linux.
                0
                Надеюсь когда-нибудь это появится и под Windows и мы увидим ускорение открытого x264 без потери качества.
                0
                x264 может использовать OpenCL для DCT и motion estimation. А OpenCL по идее должен работать во встроенном GPU. По крайней мере Intel обещает.
                0
                Для Web-RTC планируется поддержка аппаратного кодека, описанного тут?
                  0
                  Да, детали можено посмотреть здесь https://software.intel.com/en-us/webrtc-sdk
                    0
                    Вы крутые, если сделали, обязательно изучу. Гуд!
                  0
                  Chromakey и наложение видео потоков есть?
                    0
                    Конкретно Chromakey не поддерживаем. Для наложения видео потоков есть Luma keying, Global Alpha Blending и Pixel Alpha Blending. Подробнее можно ознакомиться здесь.
                    +1
                    Пробовал компилить ffmpeg c qsv. Потребовалась стороняя либа libmfx, h264 в принципе заработал, но были проблемы с изменением битрейта на лету. А вот с h265 ничего не вышло, как я понял нужно ставить интеловский SDK, чтобы кодек с таким ID появился. Но это же не приемлемо, софт то юзеру в конечном итоге достанется, это он что-то ставить должен чтобы заработало? Было бы неплохо прояснить этот вопрос.
                      0
                      На каком процессоре Вы пытались запустить? Аппаратное кодирование h265 доступно только на 6го поколения (SkyLake).
                        0
                        На Core i5 6600, на нем он якобы заявлен. Дебаг дошел до того, что не находится кодек c ID 6fadc791a0c2eb479ab6dcd5ea9da347. Погуглив я узнал что не один такой и нужно установить Media Server Studio.
                        Конкретный тред что смотрел тогда не помню, но сходу нашлось вот
                        https://software.intel.com/en-us/forums/intel-media-sdk/topic/596382
                        Also, the software HEVC plug-ins follow a similar GUID define naming convention: MFX_PLUGINID_HEVCE_SW and MFX_PLUGINID_HEVCD_SW. However, these are only available if Media Server Studio Professional is installed.

                        Вот это я и называю не приемлимо. Нужно чтобы у юзера все работало установок доп софта (тем более платного и с регистрацией), иначе это считай что h265 нету.
                    0
                    У Skylake есть поддержка OpenGL 4.5, OpenCL 2.1, поправьте. Почему не упомянут Vulkan? Его уже даже в Unity добавили.
                      +1
                      То есть Intel с каждым новым процессором увеличивает площадь GPU, при этом который год не может увеличить количество или частоту CPU ядер?
                      По сути потребителя заставляют покупать в нагрузку 50% бесполезного железа, может стоит уже сделать процессор в 2 раза мощнее или холоднее?
                        0
                        Да упёрлись процессоры. Не могут уже сделать лучше по имеющимся технологиям. Могут в ядро напихать новых инструкций, или в проц больше ядер — но без поддержки софтом это не только не ускорит, а замедлит всё. Софт, в свою очередь, не поддерживает несуществующие процессоры. Короче, как обычно всё. «В лоб» повышать частоты и снижать шаги уже особо некуда. Или вообще не работает, или цена растёт конкретно.
                      • UFO just landed and posted this here
                          +1
                          Так и на интеле можно считать, и задержки на передачу меньше, чем на дискретную видеокарту (точные цифры не помню).
                          0
                          Совет Интел — наймите нормальных программистов и добавьте поддержку того, что написано, в кучу openSource проектов, особенно крупных.
                            +1
                            Новых нанимать не обязательно, можно просто заключить контракты с имеющимися разработчиками этих проектов. Очень хотелось бы, чтобы например в kdenlive аппаратное декодирование заработало, хотя бы для превью в окне редактора, а не для финального рендеринга (для него нужно качество получше, чем у аппаратного энкодера Intel).

                            Грустно, однако, что нас здесь не услышат, а даже если услышат — всё равно делать не станут.
                            0
                            Оно выросло с 6 в Sandy Bridge до 72 в топовой графике Iris Pro Graphics 580 на кристаллах Skylake. В том числе за счёт этого производительность GPU увеличилась десятикратно без увеличения тактовой частоты. Во всей графике последнего поколения Iris и Iris Pro имеется встроенный кэш Level 4 на 64 или 128 МБ.

                            А тем временем, мне, как обычному потребителю, эту вашу модную и мощную графику не купить никак. Собирал пару лет назад себе компьютер, изначально не предполагал дискретную графику, взял бы самую мощную графику встроенную от интел — Iris или Iris Pro, такая ставится в процессоры R-линейки (еще в макбуках стоит). Но это же для встраиваемых систем, то есть так просто не купить и самому не поставить. А продается только урезанная графика. Даже сейчас из десктопных систем (i7-6700, i5-6600) максимум можно приобрести с Intel HD 530 (24 EU, a не 72 и без eDRAM). А как и где купить Iris или Iris Pro?
                              0
                              Единственный доступный в продаже вариант, похоже, Intel NUC Skull Canyon NUC6i7KYK с Iris 580(платформа от 600 долларов).
                                0
                                Там мобильные процессоры ставятся, а не десктопные, так что не в счет.
                                0
                                Можно поиском по процессорам на сайте Интел. Там можно выбрать графику и посмотреть все процессора (десктопные, например) на этой графике. Или посмотреть все десктопные Скайлейк i7 процессора и выбрать с нужной графикой. Даже цены есть.
                                  0
                                  Быть может об этом и есть крик души, что нет в принципе десктопных моделей с крутой графикой кроме R-линейки, которая встраиваемая и идет во всяких моноблоках, а в розницу не купить? Все, что мощнее Iris 540 включительно, в рознице не купить:
                                  Поиск Iris Pro 580 в розницу
                                  image

                                  Поиск Iris 540 в розницу
                                  image
                                0
                                к сожалению, я сама не могу прокомментировать все вопросы в этом посте. Но мы отправили их разработчикам. по мере ответов, я буду их публиковать
                                  0
                                  Дайте ссылку на место, куда вы по вашим словам впилили поддержку аппаратного кодека VP8, вы должны указать коммит или место, где появился код для libvpx в отношении Web-RTC
                                    0
                                    На вопрос по существу ответа нет?
                                      0
                                      Не вижу проблем…
                                        0
                                        Если не видеть проблем, то можно не увидеть результата. Давайте переформулируем, дайте ссылку на то, как интегрировать аппаратное кодирование и декодирование VPx в библиотеку libvpx/

                                        Only users with full accounts can post comments. Log in, please.