Verbessern der Leistung von Multimedia-Anwendungen mit Hardwarebeschleunigung

Ursprünglicher Autor: Gael Hofemeier
  • Übersetzung

Die Architektur von Intel-Prozessoren konzentriert sich immer mehr auf die GPU. Dies eröffnet erstaunliche Möglichkeiten für eine deutliche Leistungssteigerung, indem die Multimedia-Verarbeitung einfach von der CPU auf die GPU verlagert wird. Entwicklern stehen zahlreiche Tools zur Verfügung, um die Leistung von Multimedia-Anwendungen zu verbessern. Unter diesen Tools sind kostenlos und einfach zu bedienen.
In dieser Publikation finden Sie:
  • Übersicht über Computerarchitekturen und aktuelle Intel GPU-Funktionen
  • Implementieren Sie die Hardwarebeschleunigung mit FFmpeg
  • Implementieren Sie die Hardwarebeschleunigung mit dem Intel Media SDK oder einem ähnlichen Intel Media Server Studio (je nach Zielplattform).

Wenn Sie das Bedürfnis haben, die Leistung der Multimedia-Verarbeitung zu verbessern, aber nicht wissen, wo Sie anfangen sollen, beginnen Sie mit FFmpeg. Messen Sie die Leistung bei der Softwareverarbeitung, aktivieren Sie dann einfach die Hardwarebeschleunigung und sehen Sie, wie stark sich die Leistung geändert hat. Fügen Sie dann die Verwendung von Intel Media SDK hinzu und vergleichen Sie erneut mit verschiedenen Codecs und in verschiedenen Konfigurationen.

Rechnerarchitektur: von superskalar bis heterogen


Um die Bedeutung der GPU-Entwicklung zu erkennen, beginnen wir mit der Geschichte der Verbesserung der CPU-Architektur.
Zurück in den neunziger Jahren. Die erste große Entwicklungsstufe ist das Aufkommen einer superskalaren Architektur, bei der ein hoher Durchsatz aufgrund der Parallelverarbeitung auf Befehlsebene innerhalb desselben Prozessors erzielt wurde.


Abbildung 1. Superskalare Architektur Zu

Beginn der 2000er Jahre entstand dann eine Mehrkernarchitektur (wenn ein Prozessor mehr als einen Rechenkern enthalten kann). Homogene Kerne (alle völlig identisch) ermöglichten die gleichzeitige Ausführung mehrerer Threads (Parallelverarbeitung auf Thread-Ebene).
Gleichzeitig war die Leistung der Multi-Core-Architektur aufgrund einer Reihe von Hindernissen begrenzt.
  • Speicher: Die Lücke zwischen Prozessor- und Speichergeschwindigkeit wurde vergrößert.
  • Parallelverarbeitung auf Befehlsebene (Instruction Level Parallel Processing, ILP): Es ist zunehmend schwieriger geworden, für die Parallelverarbeitung verfügbare Befehle in einem einzelnen Thread zu erkennen, um die Ressourcen eines Hochleistungskerns vollständig zu nutzen.
  • Stromverbrauch: Mit einer allmählichen Erhöhung des Prozessortakts stieg der Stromverbrauch exponentiell an.



Abbildung 2. Mehrkernarchitektur

Moderne heterogene Architektur


In einer heterogenen Architektur kann es mehrere Prozessoren geben, die eine gemeinsame Datenpipeline verwenden, die für einzelne Funktionen wie Codieren, Decodieren, Konvertieren, Skalieren, Verwenden von Interlaced-Scannen usw. optimiert werden kann.

Mit anderen Worten, dank dieser Architektur haben wir greifbare Vorteile sowohl in Bezug auf die Produktivität als auch im Bereich des Energieverbrauchs erhalten, auf die bisher nicht zugegriffen werden konnte. In Abb. Abbildung 3 zeigt die Entwicklung der GPU in den letzten fünf Generationen: Grafikprozessoren werden immer wichtiger. Und bei der Verwendung von h.264 und beim Umstieg auf die modernsten h.265-Codecs bieten GPUs eine beachtliche Rechenleistung, wodurch eine Videoverarbeitung mit einer Auflösung von 4K und sogar mit einer höheren Auflösung nicht nur möglich ist, sondern auch recht schnell durchgeführt wird.


Abbildung 3. Die Entwicklung einer heterogenen Architektur

GP-Leistungsgenerationen


In Abb. Abbildung 4 zeigt einen starken Anstieg der Rechenleistung in nur wenigen Generationen, in denen sich die Grafikprozessoren strukturell auf demselben Chip wie die CPU befanden. Wenn Ihre Anwendung Multimedia-Verarbeitung verwendet, müssen Sie GPU-Offloading verwenden, um eine Beschleunigung von mindestens dem Fünffachen zu erzielen (abhängig vom Alter und der Konfiguration des Systems).


Abbildung 4. Verbesserung der Grafikverarbeitung in jeder Generation von Intel-Prozessoren

Erste Schritte mit der GP-Programmierung


In Schritt 1 wird in der Regel die Leistung von H.264 gemessen, sodass Sie die Leistungsänderung bei der Verfeinerung des Codes weiter auswerten können. FFmpeg wird häufig verwendet, um die Leistung zu messen und die Geschwindigkeit bei Verwendung der Hardwarebeschleunigung zu vergleichen. FFmpeg ist ein sehr leistungsfähiges, aber gleichzeitig recht einfach zu bedienendes Tool.

In Schritt 2 werden Tests mit verschiedenen Codecs und in verschiedenen Konfigurationen durchgeführt. Sie können die Hardwarebeschleunigung aktivieren, indem Sie einfach den Codec (libx264 durch h264_qsv ersetzen) durch einen mit Intel Quick Sync Video ersetzen .

In Schritt 3 wird die Verwendung des Intel Media SDK hinzugefügt.

Hinweis In dieser Publikation wird die Verwendung dieser Tools unter Windows * beschrieben. Wenn Sie an einer Implementierung für Linux * interessiert sind, lesen SieGreifen Sie mit FFmpeg auf Intel Media Server Studio für Linux-Codecs zu .

▍FFmpeg-Codierung und -Decodierung


Beginnen Sie mit H.264 (AVC), da h264: libx264 die Standardsoftwareimplementierung in FFmpeg ist und nur hochwertige Software produziert. Erstellen Sie Ihren eigenen Test und messen Sie die Leistung erneut, indem Sie den Codec von libx264 in h264_qsv ändern. Später werden wir über H.265-Codecs sprechen.

Beachten Sie, dass Sie bei der Arbeit mit Videostreams zwischen Qualität und Geschwindigkeit wählen müssen. Bei einer schnelleren Verarbeitung nimmt die Qualität fast immer ab und die Dateigröße nimmt zu. Sie müssen Ihr eigenes akzeptables Qualitätsniveau basierend auf der für die Codierung erforderlichen Zeit finden. Es gibt 11 Voreinstellungen für die Auswahl einer bestimmten Kombination aus Qualität und Geschwindigkeit - von „Schnellste“ bis „Langsamste“. Es gibt verschiedene Algorithmen zur Steuerung der Datenrate:
  • Codierung in 1 Durchgang mit konstanter Datenrate (set -b: v);
  • Codierung in 2 Durchgängen mit konstanter Datenrate;
  • konstanter Geschwindigkeitskoeffizient (CRF).

Intel Quick Sync Video unterstützt das Dekodieren und Kodieren mit Intel-CPUs und integriertem GP1. Bitte beachten Sie, dass der Intel-Prozessor mit Quick Sync Video und mit OpenCL * kompatibel sein muss. Weitere Informationen finden Sie in den Intel SDK-Versionshinweisen für OpenCL * -Anwendungen . Die Dekodierungs- und Kodierungsunterstützung ist in FFmpeg mithilfe von Codecs mit dem Suffix _qsv integriert . Derzeit wird Quick Sync Video von den folgenden Codecs unterstützt: MPEG2-Video, VC1 (nur Decodierung), H.264 und H.265.

Wenn Sie mit Quick Sync Video in FFmpeg experimentieren möchten, fügen Sie libmfx hinzu. Der einfachste Weg, diese Bibliothek zu installieren, ist die Verwendung der von lu_zero gepackten libmfx-Version .
Beispiel für die hardwarebeschleunigte Codierung von Quick Sync Video: FFmpeg kann beim Decodieren mit der Option -hwaccel auch die Hardwarebeschleunigung verwenden . Der Codec h264_qsv ist sehr schnell, aber es ist ersichtlich, dass selbst der langsamste Betriebsmodus mit Hardwarebeschleunigung viel schneller ist als nur Software-Codierung mit der niedrigsten Qualität und der höchsten Geschwindigkeit. Beim Testen mit H.265-Codecs müssen Sie entweder auf die Assembly zugreifen, die libx265 unterstützt, oder eine eigene Version gemäß den Anweisungen im Codierungshandbuch für FFmpeg und H.265 oder in der X265-Dokumentation erstellen . H.265 Beispiel:

ffmpeg -I INPUT -c:v h264_qsv -preset:v faster out.qsv.mp4







ffmpeg -I input -c:v libx265 - preset medium -x265-params crf=28 -c:a aac -strict experimental -b:a 128k output.mp4

Weitere Informationen zur Verwendung von FFmpeg und Quick Sync Video finden Sie unter Intel QuickSync Video und FFmpeg Cloud Computing .

Verwenden des Intel Media SDK (sample_multi_transcode)


Um die Leistung bei Verwendung von FFmpeg weiter zu verbessern, müssen Sie die Anwendung mit dem Intel Media SDK optimieren. Das Media SDK ist eine plattformübergreifende API zum Entwickeln und Optimieren von Multimedia-Anwendungen, um die Intel-Hardwarebeschleunigung mit festen Funktionen zu verwenden.

Befolgen Sie zum Einstieg in das Intel Media SDK nur einige einfache Schritte:
  1. Laden Sie das Intel Media SDK für das Zielgerät herunter .
  2. Laden Sie die Tutorials herunter und lesen Sie sie, um zu verstehen, wie Sie Software mit dem SDK konfigurieren.
  3. Installieren Sie das Intel Media SDK. Wenn Sie Linux verwenden, lesen Sie das Installationshandbuch für Linux .
  4. Laden Sie den SDK-Beispielcode herunter , um mit bereits kompilierten Beispielanwendungen zu experimentieren.
  5. Erstellen Sie die Anwendung "Video Transcoding" und führen Sie sie aus: sample_multi_transcode

Befehle ähneln FFmpeg-Befehlen. Beispiele: Beachten Sie, dass Sie zur Verwendung der Hardwarebeschleunigung den Parameter -hw in der Argumentliste angeben müssen . Dieses Beispiel funktioniert auch mit dem HEVC-Decoder und -Encoder (h.265), muss jedoch ab der Intel Media Server Studio Pro-Version installiert werden. Es gibt viele Optionen, die Sie in der Befehlszeile angeben können. Mit der Option -u

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



Sie können die Zielverwendung (TU) wie bei der Verwendung von FFmpeg-Voreinstellungen festlegen. Standardmäßig wird TU = 4 verwendet. In Abb. 5 zeigt Leistungsindikatoren bei verschiedenen TU-Einstellungen.


Abbildung 5. Beispiele für die Leistungsmerkmale von H264 in Bezug auf die beabsichtigte Verwendung

Verwenden Sie andere Intel-Softwaretools.
Sie können Intel-Optimierungs- und Profiling-Tools, einschließlich Intel Graphics Performance Analyzer (GPA) und Intel VTune Amplifier, verwenden , um den Code weiter zu verfeinern . Darüber hinaus Intel Video Pro Analyzer und Intel Stress Bitstreams und Encoder- Tools Sie können dazu beitragen, qualitativ hochwertige Video- und Streaming-Ergebnisse zu erzielen, die Arbeit von Codierern und Decodierern zu verbessern und die Überprüfung zu beschleunigen, damit Sie schnell Lösungen auf den Markt bringen können.

Fazit


Die Computerarchitektur hat in den letzten 20 Jahren erhebliche Veränderungen erfahren, und ihre Entwicklung in den letzten fünf Jahren hat zu einer deutlichen Produktivitätssteigerung geführt. Intel-CPUs können Multimedia-Inhalte jetzt direkt auf der GPU verarbeiten, wodurch sowohl Endbenutzern als auch Unternehmen neue Nutzungsmodelle zur Verfügung stehen.

Mit FFmpeg können Sie Leistungsverbesserungen selbst messen und Ihren Code mithilfe der kostenlosen Intel Media SDK-APIs weiter optimieren. Der Übergang von der Softwareverarbeitung zur Hardwarebeschleunigung steigert die Systemleistung und senkt den Stromverbrauch (und die Kosten). Außerdem werden zusätzliche Rechenressourcen bereitgestellt, die im Laufe der Zeit für die Umstellung auf die H.265-Codec-Familie ausreichen.

Zusätzliche Ressourcen


  1. Installieren Sie das Intel Media SDK und führen Sie es unter Windows aus
  2. FFMPEG.ORG
  3. Integration von Intel Media SDK mit FFMPEG für Multiplexing, Demultiplexing, Codierung und Decodierung von Sound
  4. Intel Media SDK-Tutorials für Clients und Server
  5. Intel Graphics Performance Analyzer
  6. Intel VTune Verstärker
  7. Intel Media Server Studio
  8. FFmpeg-basierte Anwendungsbeschleunigung mit Intel Quick Sync Video
  9. Intel QuickSync Video und FFmpeg *
  10. Intel QuickSync Video und FFmpeg: Installation und Überprüfung
  11. Greifen Sie mit FFmpeg auf Intel Media Server Studio für Linux-Codecs zu
  12. HEVC-Codec-Wert (H.265)

Jetzt auch beliebt: