что такое аппаратное декодирование видео в стиме
Аппаратное декодирование
Для поддержки технологии аппаратной поддержки воспроизведения, DirectX Video Acceleration (DXVA), требуются специальные декодеры (например, NVIDIA PureVideo Decoder, CyberLink MPEG2 и H.264 video decoder), и проигрыватели с поддержкой DXVA. На данный момент существуют DXVA-декодеры для аппаратного ускорения MPEG2, WMV, VC-1 и H.264
У разных видеочипов уровень поддержки аппаратного ускорения декодирования видео разный, он зависит от модели карты и установленного чипа. Ранее, некоторые low-end решения были ограничены в поддержке декодирования видео высоких разрешений, но складывается обратная ситуация — что у AMD, что у NVIDIA. Верхние чипы линеек, GeForce и RADEON, не поддерживают всех возможностей, которыми обладают решения среднего и низшего ценовых диапазонов.
Аппаратное ускорение работает не всегда идеально, не со всеми декодерами и типами видеоданных. Так, изначально сразу несколько производителей плееров и декодеров H.264 объявили о поддержке ускорения в решениях. На деле это были, скорее, рекламные заявления, и ускорение H.264 или не работало вовсе или работало кое-как. Например, в своё время на рынке появилась версия PowerDVD 7.0 с поддержкой декодирования H.264, но не работающим аппаратным ускорением, версия того декодера была 1.6.0.1528. При использовании этого декодера ускорение включается, но на деле не работает.
Кроме того, на разных моделях видеокарт одной и той же компании ускорение может работать, а может не работать. Особенно это относится к low-end и mid-end решениям прошлых поколений, таких как GeForce 6600 и RADEON X1300. Бывали случаи, когда при выполнении одинаковой последовательности действий, ускорение включалось на одной карте, но не включалось на другой. Это ещё не все проблемы аппаратного декодирования, так, H.264 декодер CyberLink в DXVA ускоренном режиме всегда отключает деблокинг (удаление артефактов блочности изображения), что хорошо заметно на плавных цветовых переходах. и стоит отметить, что некоторые версии декодеров могли работать в аппаратно ускоренном режиме на видеокартах одного производителя, и не работать на видеокартах другого, в зависимости от версий драйверов.
FFmpeg практика аппаратного декодирования DXVA2
Привет! Эта статья продолжение моей статьи FFmpeg начало работы Visual Studio. Здесь мы приступим к аппаратному декодированию RTSP-потока FULL HD. Заранее скажу, что с данной задачей легко справится даже Intel ATOM Z8350.
Задача: аппаратное декодирование и запись до 4-х кадров в оперативную память для последующей параллельной обработки (четырьмя ядрами процессора) с IP-камеры RTSP h.264. Обработанные кадры отображаю с помощью функций WinAPI. Как итог мы получим быстродействующую систему для компьютерной обработки RTSP-потока в параллельном режиме. Далее можно подключать алгоритмы Компьютерного зрения для обработки кадров Real Time.
Вступление
Зачем нужно аппаратное декодирование? Вы хотите слабым и дешевым процессором декодировать видео реал-тайм или хотите максимально разгрузить процессор, тогда пора знакомиться с аппаратным декодированием.
DirectX Video Acceleration (DXVA) — это API для использования аппаратного ускорения для ускорения обработки видео силами графических процессоров (GPU). DXVA 2.0 позволяет перенаправлять на GPU большее количество операций, включая захват видео и операции обработки видео.
После написания предыдущей статьи мне было задано не мало вопросов: «почему использован именно FFmpeg?» Начну с проблематики. Основная сложность аппаратного декодирования состоит в записи раскодированного кадра в ОЗУ. Для Full HD это 1920 х 1080 х 3 = 6 220 800 байт. Даже с учетом того что кадр хранится в формате NV12 – это тоже немало 1920 x 1080 x 1.5 = 3 110 400 байт. Перезаписывать 75 Мбайт в секунду серьезная задача для любого процессора. Для решения этой задачи Intel добавила команды SSE 4, которые позволяют переписывать данные без участия процессора. К сожалению, не во всех библиотеках это реализовано. Мной были опробованы следующие библиотеки:
OpenCV – для работы с потоком RTSP использует FFmpeg, поэтому решено работать без посредников, т.е. использовать библиотеку FFmpeg. К тому же FFmpeg, который установлен по умолчанию, в OpenCV собран без аппаратного декодирования.
FFmpeg – показала хорошие, на мой взгляд результаты, работает стабильно. Единственный недостаток не реализована работа с WEB-камерами для версии X86 (X64 вроде позволяет работать) в Windows.
Аппаратное декодирование видео — это просто
На самом деле аппаратное декодирование с помощью библиотеки FFmpeg — не сложнее программного. Настройки проекта такие же, как и для программной реализации, блок-схема осталась без изменений.
Вывести на экран список поддерживаемых FFmpeg методов аппаратного декодирования можно
Первое, что нам нужно сделать — это сообщить FFmpeg с помощью какого аппаратного декодера Вы хотите декодировать видео. В моем случае Windows10 + Intel Atom Z8350 оставляют только DXVA2:
Вы же в качестве аппаратного декодера можете выбрать CUDA, D3D11VA, QSV или VAAPI (только Linux). Соответственно у вас должно быть данное аппаратное решение и FFmpeg должен быть собран с его поддержкой.
Получаем информацию о видеопотоке:
Данная функция переписывает декодированный файл в ОЗУ:
Немного о формате NV12
Итак, мы получили кадр в структуру sw_frame. Полученный кадр хранится в формате NV12. Данный формат был придуман Microsoft. Он позволяет хранить информацию о пикселе в 12 бит. Где 8 бит интенсивность, а 4 битами описывается цветность (вернее цветность сразу описывается для 4-х рядом стоящих пикселей 2х2). Причем, sw_frame.data[0] – хранится интенсивность, а в sw_frame.data[1] – хранится цветность. Для перевода из NV-12 в RGB можете воспользоваться следующей функцией:
Хотя работа с NV12 позволяет ускорить выполнение таких процедур, как размывка, Retinex и получение изображения в оттенках серого (просто отбросив цветность). В моих задачах я не перевожу формат NV12 в RGB, так как это занимает дополнительное время.
И так мы научились аппаратно декодировать видеофайлы и выводить их в окно. Познакомились в форматом NV12 и как его преобразовывать в привычный RGB.
Dll аппаратного декодирования
Кадры FFmpeg выдает через 40 мс (при 25 кадрах в секунду). Как правило, обработка кадра Full HD занимает значительно больше времени. Для этого требуется организовать многопоточность, для максимальной загрузки всех 4-х ядер процессора. Я на практике один раз запускаю 6 потоков и больше их не снимаю, что значительно упрощает работу и увеличивает надежность работы программы. Схема работы приведена на рис. 1
рис.1 Схема построения многопоточной программы с FFmpeg
Я написал свой декодер в виде *.dll (FFmpegD.DLL) для включения в свои проекты. Это позволяет сократить код-проекта, что повышает понимание кода и включать в любые языки программирования, вплоть до Ассемблера (проверено:) ). С помощью нее мы напишем свой проигрыватель RTSP-потока с IP-камеры.
Для начала работы с DLL нужно передать указатель массив int[13], HANDLE события поступления нового кадра, HANDLE начала обработки нового пакета данных с камеры и массив char адрес камеры.
Структура массива дана в таблице 1.
Перед вызовом необходимо обнулить номера кадров 1-4.
DLL выполнит все необходимые действия по инициализации FFmpeg и будет записывать указатели и номера кадров. После установит событие «Поступление нового кадра». Нужно только обрабатывать поступающие кадры и вместо номера кадра записывать 0 (это значит кадр обработан и больше не используется).
Ниже Вы найдете пример проигрывателя с исходным кодом. За основу взят пример ShowDib3 Charles Petzold.
ИТОГ: аппаратный детектор движения FFmpeg даже на Intel Atom Z8350 декодирует h264 Full HD в реальном времени с загрузкой процессора до 20% с подключенный детектором движения.
Пример работы детектора движения на Intel ATOM Z8350. Первые 30 сек идет подсчет фона. После работает детектор движения по методу вычитания фона.
Fix Steam Remote Play funktioniert nicht
Geschrieben von 2021-12-08
Versuchen Sie, Steam Remote Play zu beheben, das nicht funktioniert?
Hüpfen Sie mit Ihren Freunden auf eine schnelle Online-Schlägerei, aber stellen Sie fest, dass Steam Remote Play nicht funktioniert? Es ist wirklich schade, wenn der Spieleabend durch einen so mehrdeutigen und nervigen Fehler verdorben wird.
Zum Glück gibt es viele Methoden, mit denen Sie versuchen können, dieses Problem zu beheben! Der Remote Play-Fehler ist höchstwahrscheinlich auf einen Netzwerk- oder Gerätefehler zurückzuführen, der mit der Steam-Funktion interagiert. Dieses Problem sollte ziemlich einfach zu beheben sein, also keine Sorge, Sie werden in kürzester Zeit zu Ihren Spielen zurückkehren!
In diesem Artikel werden wir auch die Ursachen für dieses Problem erläutern wie Sie durch verschiedene Methoden zur Behebung dieses Problems führen. So können Sie beheben, dass Steam Remote Play auf Ihrem Computer nicht funktioniert.
1. Aktualisieren Sie Remote Play in den Steam-Einstellungen.2. Whitelist Steam für Ihre Firewall.3. Deaktivieren Sie die Hardware-Decodierung.4. Verlassen oder treten Sie dem Beta-Programm von Steam bei.5. Aktualisieren Sie Steam auf die neueste Version.6. Steam neu installieren.1. Aktualisieren Sie Remote Play in den Steam-Einstellungen.
Zunächst einmal die einfachste Lösung, die Sie tun können, um Ihr Problem zu beheben. Wir haben dies absichtlich zur ersten Methode gemacht, da die meisten Benutzer möglicherweise vergessen, dies auszuprobieren. Wenn Sie Remote Play in Ihren Steam-Einstellungen aktualisieren, kann die Funktion neu gestartet und ordnungsgemäß gestartet werden.
So können Sie die Remote Play-Einstellungen in Steam aktualisieren:
Deaktivieren Sie dort das Häkchen bei Aktivieren Remote Play und klicken Sie auf OK, um Ihre Änderungen zu speichern. Starten Sie beide Computer neu und öffnen Sie Steam erneut. Wiederholen Sie nun die Schritte 1 bis 4, lassen Sie jedoch die Option Remote Play aktivieren aktiviert.
Wenn Sie damit fertig sind, fahren Sie fort und führen Sie ein Spiel aus, um zu sehen, ob der Fehler immer noch vorhanden ist. Remote Play sollte jetzt hoffentlich ordnungsgemäß funktionieren, aber wenn das Problem weiterhin besteht, fahren Sie mit der nächsten Methode fort.
2. Setzen Sie Steam auf die Whitelist Ihrer Firewall.
Remote Play ist eine Funktion, die eine «persönlichere» Art der Internetverbindung mit Ihrem Freund erfordert. Im Wesentlichen hostest du einen Server, mit dem sich dein Freund mit seinem Gerät verbindet.
Entgegen der landläufigen Meinung überwacht Ihre Firewall keine Softwareviren, sondern ist stattdessen ein Mittelsmann für bösartige Netzwerkaktivitäten. In diesem Fall wird Remote Play höchstwahrscheinlich als böswilliger Netzwerkangriff fehlinterpretiert, weshalb es eingeschränkt wird.
Bevor Sie diese Schritte ausführen, stellen Sie sicher, dass Sie über Administratorrechte für Ihr Benutzerkonto verfügen.
So können Sie Steam zur Whitelist Ihrer Firewall hinzufügen:
Sie sollten zu einer Liste aller derzeit installierte Anwendungen auf Ihrem Computer. Damit wir Steam auf die Whitelist setzen können, klicken Sie oben rechts im Fenster auf die Schaltfläche Einstellungen ändern.Sobald Sie Zugriff auf die Liste der Anwendungen haben, klicken Sie mit der linken Maustaste auf eine beliebige App und geben Sie ‘Steam‘ ein, um das Programm automatisch hervorzuheben. Überprüfen Sie abschließend sowohl Privat als auch Öffentliche Kästchen rechts, bevor Sie auf OK klicken und das Fenster schließen.
Damit sollte Steam vollständig von Ihrer Firewall auf die weiße Liste gesetzt werden. Eine Whitelist ist einfach eine Liste von Programmen, die frei agieren können, ohne dass Ihre Firewall sie vollständig einschränkt. Dabei sollte es Steam nun erlaubt sein, Netzwerkverbindungen zu Ihrem Freund herzustellen.
3. Deaktivieren Sie die Hardware-Decodierung.
„Hardware-Decodierung“ ist eine Funktion, die die Leistung von Streams und gehosteten Lobbys erheblich verbessert hat. Wenn Sie diese Funktion aktivieren, werden Teile Ihrer Verarbeitungsaufgaben auf Ihre GPU statt auf Ihre CPU verschoben.
Dies gilt nur für Computer mit einer dedizierten GPU. Andernfalls kann die Funktion nicht von integrierten GPUs genutzt werden.
Indem wir dies deaktivieren, entfernen wir alle unnötigen Prozesse, die Ihren Host beeinträchtigen könnten. Dies könnte zwar Ihre Leistung beeinträchtigen, es ist jedoch einen Versuch wert, wenn Ihre Remote Play-Funktion dadurch repariert wird.
So können Sie die ‘Hardware-Dekodierung’ deaktivieren:
Öffnen Sie zuerst die Steam auf Ihrem Computer und klicken Sie auf die Schaltfläche Steam in der oberen linken Ecke Ihres Fensters. Bewegen Sie die Maus nach unten und klicken Sie auf Einstellungen. Navigieren Sie von dort zu Remote Play und wählen Sie Erweiterte Client-Optionen.
Im unteren Bereich Ihres Bildschirms sollten Sie die Option Hardware-Decodierung aktivieren sehen. Deaktivieren Sie diese Funktion und klicken Sie auf OK, um Ihre Einstellungen zu speichern. Starten Sie Steam für Sie und den Computer Ihres Freundes neu und prüfen Sie, ob das Problem dadurch behoben wird.
Sie müssen diesen Schritt für Sie und perform Ihren Freund, insbesondere für den Host-Computer.
4. Verlassen Sie das Beta-Programm von Steam oder treten Sie ihm bei.
Der Zugriff auf das Beta-Programm von Steam kann eine coole Erfahrung sein. Sie werden der Erste sein, der auf viele Beta-Funktionen zugreift, die noch nicht veröffentlicht wurden, was eine Errungenschaft ist, die nicht viele Leute kennen.
Das Beta-Programm unterliegt jedoch vielen Fehlern die Ihre Gesamterfahrung mit dem Steam-Programm beeinträchtigen können. In diesem Fall kann es sein, dass Sie als Betatester Ihre Remote Play-Funktion beeinträchtigen. Alternativ können Sie auch Betatester sein und sehen, ob Ihr Problem dadurch behoben wird.
So können Sie das Betaprogramm von Steam verlassen oder ihm beitreten:
Hoffentlich ist Steam noch auf Ihrem Computer geöffnet. Navigieren Sie von dort aus einfach zur Schaltfläche Steam am oberen linken Rand Ihres Bildschirms. Klicken Sie in der Liste der verschiedenen Registerkarten auf der linken Seite auf Konto und suchen Sie nach Beta-Teilnahme.
Ob Sie Beta-Tester sind oder nicht, klicken Sie auf die Schaltfläche Ändern und verlassen Sie die Beta-Teilnahme oder nehmen Sie an der Beta-Teilnahme teil. b> Option.Starten Sie Steam neu und prüfen Sie, ob das Problem weiterhin besteht.
Die An- oder Abmeldung als Betatester kann eine großartige Möglichkeit sein, Ihr Problem zu beheben, insbesondere wenn Sie sich am Ende dieser Methode befinden. Hoffentlich hilft Ihnen das, Steam Remote Play nicht zu beheben.
5. Aktualisieren Sie Steam auf die neueste Version.
Obwohl Steam eine Menge Offline-Spiele anbietet, ist es immer noch eine Online-Plattform, die für die meisten Funktionen strong auf Netzwerkverbindungen angewiesen ist. Vor diesem Hintergrund kann das Ausführen einer veralteten Steam-Version auf Ihrem Computer Ihre Erfahrung unbeabsichtigt beeinträchtigen.
Wenn Sie Ihre Steam-Version auf dem neuesten Stand halten, können Sie die neuesten Fehlerbehebungen wie sowie die neuesten Patch-Updates für Steam-Funktionen. Bei dieser Methode aktualisieren wir Ihr Steam-Programm, um die Remote Play-Funktion zu reparieren.
So können Sie Steam aktualisieren:
Öffnen Sie zunächst das Steam App auf Ihrem Computer. Klicken Sie nun auf die Schaltfläche Steam in der oberen linken Ecke des Steam-Fensters.p das Update.
Loggen Sie sich in Ihr Konto ein und sehen Sie, ob die Remote Play-Funktion endgültig behoben ist. Wenn das Problem weiterhin besteht, müssen Sie möglicherweise mit der letzten und letzten Methode fortfahren.
6. Installieren Sie Steam neu.
Haben Sie alle oben genannten Methoden ausgeschöpft? In diesem Fall ist eine Neuinstallation von Steam möglicherweise keine so schlechte Idee. Leider dauert die Neuinstallation von Steam etwas länger als die Neuinstallation einer normalen Drittanbieteranwendung.
Dies liegt daran, dass wir Ihre Spiele speichern müssen, damit Sie sie nicht herunterladen müssen nochmal. Steam löscht die Steam-App sowie alle Ihre Spiele in ihren Ordnern vollständig, daher müssen wir Ihre Spiele sichern.
Außerdem erfahren Sie hier, wie Sie Steam auf Ihrem Computer neu installieren können. Wenn Sie beide Artikel lesen, werden Sie feststellen, dass Sie Ihre Dateien auf zwei Arten speichern können. Während das Kopieren Ihrer Spiele aus Ihrem Ordner möglicherweise einfacher ist, sind die Erfolgsaussichten nicht zu 100 Prozent sicher. Versuchen Sie stattdessen, Ihre Spiele zu sichern, nur um sicher zu gehen.
Damit endet dieser Artikel! Hoffentlich hat Ihnen dieser Beitrag geholfen, das Problem zu beheben, dass Steam Remote Play auf Ihrem Computer nicht funktioniert. Wenn Sie Unklarheiten haben, können Sie uns unten einen Kommentar hinterlassen.
Аппаратное ускорение в настройках кодеков для видео
Аппаратное ускорение, что такое? Стоит ли включать в настройках кодеков?
Решил установить новый K-Lite Codec Pack на свой компьютер. Всё как обычно: удаляешь предыдущий пакет, скачиваешь с сайта разработчика новый и устанавливаешь путём нажатия заветной кнопки «далее».
В процессе установки возникли вопросы, которые мне показались интересными (основы знал, но решил углубиться):
«Чем отличается аппаратное ускорение в процессе обработки видеопотока от программного? И стоит ли его включать в настройках кодеков?»
Второй момент: «Захотелось узнать про LAV VIDEO — NVIDIA CUVID и DXVA2 NATIVE — второй в контекстном меню выбора пакета кодеков K-Lite Codec Pack (для моей видеокарты GeForce GTX 750Ti). Что это за звери?»
Всю информацию, о которой здесь напишу, за малым исключением я почерпнул из хелпа к программе. Если нажать во время установки K-Lite Codec Pack на кнопочку Help в левом нижнем углу, то можно ознакомиться с оригиналом. В английском будучи ни шатко ни валко, попытаюсь передать смысл, пусть и читателям будет понятнее, с чем имеют дело во время настройки данного пункта K-Lite Codec Pack.
Всем известно, что цифровое видео, которое мы смотрим в любом из проигрывателей будь то на компьютере, телевизоре, DVD плеере находится в сжатом виде. Обычно в процессе декодирования цифрового видеопотока участвует центральный процессор (CPU). Такой эффект мы получаем при настройках по-умолчанию.
Если же задействовать аппаратную обработку, то в данный процесс включится видеочип (видеокарта). Это тот же процессор, только специализирован на обработке видеосигнала. В свою очередь включение в процесс декодинга видеокарты очень сильно разгружает центральный процессор.
Когда может возникнуть необходимость включения аппаратной обработки видео? В первую очередь — это очень слабый центральный процессор (или процессор, который постоянно тормозит при просмотре видео). В других случаях включать аппаратную обработку видео не рекомендуется — качество картинки от использования данной опции не станет. Более того, включение аппаратной обработки видео может привести к проблемам во время воспроизведения. Поэтому очень важно следить за актуальностью драйверов для видеокарты.
Пакет кодеков K-Lite Codec Pack 10.x.x имеет возможность работать со следующими типами алгоритмов:
Уже по названию можно определить принадлежность того или иного способа акселерации к конкретному производителю видеочипов. Первые три созданы MicroSoft и работают практически со всеми видеочипами, 4-ый только с чипами NVidia, 5-ый — с чипами Intel (Sandy Bridge, Ivy Bridge, Haswell и новее). При этом 1-ый и второй отличается тем, что старший (1) для Windows XP, второй — для Vista и выше).
VP8, VP9 и H265. Аппаратное ускорение кодирования и декодирования видео в процессорах 6-го поколения Skylake
Встроенная графика 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 поддерживает следующие специфические функции транскодирования:
Источник: 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).
Как программы используют аппаратное ускорение
Чтобы использовать аппаратное ускорение, каждая программа должна явно реализовать поддержку специфических функций Gen9. Многие делают это. Компания Intel публикует в открытом доступе Media SDK 2.0, так что поддержку аппаратного ускорения кодирования и декодирования можно внедрить в любую программу. Кроме того, существуют готовые приложения для транскодирования лайв видео на кодеках Intel, такие как Элекард CodecWorks 990. В отличие от SDK, CodecWorks 990 не требует участия программистов для применения в реальных задачах, уже содержит наиболее популярные профили транскодирования и работать с ним инженеру-не программисту в целом гораздо проще, чем с SDK. Как работают программные транскодеры с аппаратным ускорением — мы расскажем в следующей части.