Echtzeit-End-to-End-H.265/HEVC-Lösung für Plattformen auf Basis der Intel Architektur

Echtzeit-End-to-End-H.265/HEVC-Lösung für Plattformen auf Basis der Intel® Architektur

 

Inhalt

1. Kurzfassung

2. Einführung

  2.1 Video-Codec und H.265/HEVC

  2.2 Probleme mit der HEVC-Leistung

  2.3 Die aktuelle Lösung der H.265/HEVC-Analyse

3. Optimierte Echtzeit-Lösung auf Plattformen mit IA-Architektur

  3.1 Echtzeit-HEVC-Codierungslösung auf Basis des Intel® Xeon™ Prozessors

    3.1.1 Intel SIMD-Vektorisierungsabstimmung für HEVC-Codierungsfunktionen

    3.1.2 Thread-Parallelität und Feinabstimmung der Kernskalierbarkeit

    3.1.3 Weitere Feinabstimmung mit SMT/HT

  3.2 H.265/HEVC-Hochleistungsdecoder auf Plattformen mit Intel® Core™ Prozessoren

    3.2.1 Optimierung und Leistungsanalyse des HEVC-Decoders von Strongene

    3.2.2 Vergleich des für die Intel SSE optimierten HEVC-Decoders von Strongene mit Open-Source-Alternativen sowie künftige Optimierungschancen

  3.3 Optimierung des H.265/HEVC-Decoders auf Plattformen mit Intel® Atom™ Prozessoren

    3.3.1 Optimierung durch YASM und Intel® C++-Compiler

    3.3.2 Optimierung durch Intel® Streaming-SIMD-Extension-Befehle (Intel® SSE)

    3.3.3 Optimierung durch Intel® Threading Building Blocks (Intel® TBB)

    3.3.4 Leistungsvergleich für H.265/HEVC-Decoder

4. Zusammenfassung

5. Weitere Artikel zu diesem Thema

Referenz

Über die Autoren

1. Kurzfassung

Die Internationale Fernmeldeunion (International Telecommunication Union, ITU) kündigte den neuen Video-Codec-Standard – High Efficiency Video Coding (HEVC)/H.265 – an. Seine Effizienz soll etwa 50 Prozent höher sein als die des aktuellen H.264/MPEG-4-Standards. Der Algorithmus und die Datenstruktur des H.265 sind allerdings über 4-mal komplexer als beim H.264. Dies bedeutet, dass der H.265-basierte Codec mehr Rechenressourcen und Leistung benötigen wird als sein Vorläufer. In diesem Artikel untersuchen wir die Beschaffenheit des HEVC-Codecs und optimieren die CPU-basierten Software-Video-Transcodierungstechniken, welche die beste Videoqualität und das flexibelste Programmiermodell liefern. Unsere End-to-End-Lösung kann das Potenzial von Plattformen, die auf der Intel® Architektur (IA) basieren, für den HEVC-Codec maximieren und Echtzeitleistung erzielen.

2. Einführung

Videocodierungsstandards haben sich in erster Linie ausgehend von den weithin bekannten ITU-T- und ISO/IEC-Standards weiterentwickelt. ITU-T führte zu H.261 und H.263, ISO/IEC führte zu MPEG-1 und MPEG-4 Visual. Beide Organisationen entwickelten gemeinsam die H.262/MPEG-2-Video- und H.264/MPEG-4-Advanced-Video-Coding(AVC)-Standards [1].

H.265/HEVC (High-Efficiency Video Coding), das 2013 eingeführt wurde, ist der aktuelle Video-Codec-Standard. Er wurde von ISO/IEC und ITU-T entwickelt und soll sowohl das Kompressionspotenzial maximieren wie auch den Datenverlust verringern. Im Vergleich zum vorherigen H.264/AVC-Standard hat H.265/HEVC das doppelte Kompressionsverhältnis, aber dieselbe subjektive Qualität. Die HEVC-Technik hilft Anbietern von Online-Videos, hochwertige Videos mit geringerer Bandbreite bereitzustellen, was diese Technik zum nächsten Evolutionsschritt im Bereich der Video-Codecs macht.

2.1 Video-Codec und H.265/HEVC

Um den hochgradig effizienten Codierungsstandard zu erzielen, bringt HEVC für die Video-Codierung verschiedene neue Syntax-Architekturen und Algorithmen ein [1][2]:

a) Wahlfreier Zugriff und Bitstrom-Aufspaltung

Das neue Design unterstützt spezielle Funktionen, die wahlfreie Zugriffe und eine Aufspaltung des Bitstroms ermöglichen. In H.264/MPEG-4 AVC muss ein Bitstrom immer mit einem IDR-Frame beginnen. In HEVC können Zugriffe hingegen wahlfrei erfolgen.

b) „Coding Tree Units“-Struktur

Ein Bild ist in so genannte Coding Tree Units (CTU) unterteilt, die jeweils Luma- und Chroma-Coding-Tree-Blöcke (CTBs) enthalten. Der L-Wert, der durch ein codiertes, im Sequenzparametersatz (SPS) spezifiziertes Syntaxelement bestimmt wird, kann 16, 32 oder 64 betragen. Das CTU enthält eine Quadtree-Syntax, die eine Aufspaltung der Codierblöcke (CB) in eine gewählte, passende Größe basierend auf der Signalcharakteristik der vom CTB abgedeckten Bereich ermöglicht. Während alle früheren Videocodierungsstandards einfach die fixe Array-Größe von 16x16-Luma-Samples verwendeten, unterstützt HEVC CTBs mit einer variablen Größe, welche entsprechend den Codierer-Anforderungen in Bezug auf die Arbeitsspeicher- und Rechenerfordernisse gewählt wird.

c) Baumstruktur-basierte Partitionierung in Transformationsblöcke (TB) und Einheiten

Ein CB lässt sich rekursiv in Transformationsblöcke (TB) partitionieren, wobei die Partitionierung durch einen remanenten Quadtree signalisiert wird. Im Unterschied zu früheren Standards gestattet es das HEVC-Design, dass sich ein TB über mehrere Prediction-Blöcke (PB) erstreckt, so dass in Intra-Bildern prognostizierte Codiereinheiten (Coding Units, CU) die potenziellen Codiereffizienzvorteile der als Quadtree strukturierten TB-Partitionierung maximieren können.

d) Intra-Bild-Prognose

Richtungsabhängige Prognosen mit 33 unterschiedlichen Ausrichtungen sind für (quadratische) TB mit der Größe 4x4 bis 32x32 definiert. Die mögliche Prognoseausrichtung umfasst alle Richtungen (360°). HEVC unterstützt verschiedene Methoden der prognostischen Intra-Bild-Codierung, die als Intra_Angular, Intra_Planar und Intra_DC bezeichnet werden.

Dieser fortschrittliche Codierungsstandard erfordert sowohl von Client-Geräten wie auch von Servern, die im Backend für die Transcodierung eingesetzt werden, eine extrem hohe Verarbeitungsleistung.

2.2 Probleme mit der HEVC-Leistung

Das aktuelle HEVC-Test-Modell(HM)-Projekt[6] implementiert lediglich die Kernfunktionalität dieses Standards. Das echte Leistungspotenzial ist noch weit vom produktiven Betrieb und echten Implementierungen entfernt. Das Projekt hat insbesondere zwei Nachteile:

  • Kein Parallelschema
  • Unzureichende Feinabstimmung der Vektorisierung

Abbildung 1: HM-Projekt-Profiling – Thread-Parallelität

Abbildung 2: HM-Projekt-Profiling – Hot Code

Im Vergleich zu H.264 benötigt dieser HEVC-Codierer auf der Serverseite über 100-mal und auf der Clientseite über 10-mal mehr CPU-Ressourcen.

2.3 Die aktuelle Lösung der H.265/HEVC-Analyse

Der H.265/HEVC-Codec hat weltweit das Interesse vieler Gruppen/Agenturen geweckt, um die Leistung zu optimieren und in der Folge echte Implementierungen durchzuführen. Es bestehen mehrere Open-Source-Projekte:

  • OpenHEVC (kompatibel mi HM10.0, Decoder-Optimierung)

https://github.com/OpenHEVC/openHEVC

  • x265 (kompatibel mit HM, parallele und SIMD-Optimierung)

http://code.google.com/p/x265/

https://bitbucket.org/multicoreware/x265/wiki/Home

Für die Leistungsanalyse des x.265-Codierers auf einer Plattform mit Intel® Xeon® Prozessor (E5-2680 mit 2,70 GHz, 8x2 physische Kerne, Codename: Sandy Bridge) führten wir ein 720p-Video mit 24 FPS aus. Um den Originalstandard für die Aufgaben- und Datenparallelität zu optimieren, wurde viel Arbeit in die Implementierung dieses Codecs gesteckt. Allerdings geht aus unseren Benchmarks hervor, dass er auf einem System mit 32 logischen Kernen (SMT aktiviert) nur 6 Kerne verwenden kann. Die Rechenressourcen aktueller Mehrkernprozessorplattformen werden folglich nicht optimal genutzt.

Abbildung 3: CPU-Nutzung des X.265-Projekts

Abbildung 4: X.265-Projekt mit Intel® SIMD Tuning

Beim x.265-Projekt wurden Intel® SSE-Befehle für die Feinabstimmung der Vektorisierung verwendet, was zu einer Leistungsbeschleunigung von über 70 % beiträgt. Weitere Optimierungen mittels Intel® C-Compiler erbrachten eine 2-fache Beschleunigung1 auf der IA-Plattform. Allerdings besteht zwischen der Codierer-Leistung und der Echtzeit-Implementierung des Codierers, insbesondere bei HD-1080p-Videos, immer noch eine große Diskrepanz.

In der Volksrepublik China beschäftigen sich über 20 Multimedia-ISVs mit der verfügbaren HEVC-Lösung und -Plattform, um die Bereitstellungskosten von Online-Videos zu senken und gleichzeitig eine hohe Qualität zu bewahren.

Abbildung 5: Online-Video-Markt in der Volksrepublik China

3. Optimierte Echtzeit-Lösung auf Plattformen mit IA-Architektur

Das chinesische Unternehmen Strongene hat sich auf die Kernel-Video-Codiertechnik spezialisiert. Seine modernen Codecs für die H.265/HEVC-Codierung/Decodierung wurden bereits vom Online-Video-Dienst Xunlei eingeführt. Die Codier-/Decodierlösung wurde mit Open-Source-FFMPEG integriert und kann von ISVs eingesetzt werden. Zur Entwicklung einer Echtzeit-End-to-End-H.265/HEVC-Lösung optimierten wir in Zusammenarbeit mit Strongene die H.265/HEVC-Codierung/Decodierung auf Plattformen mit Intel® Xeon® Prozessoren, Intel® Core™ Prozessoren und Intel® Atom™ Prozessoren, die neue IA-basierte Plattformtechniken einsetzen.

3.1 Echtzeit-HEVC-Codierungslösung auf Basis des Intel® Xeon™ Prozessors

Unsere Videocodierungsanwendung ist ein Workload mit Standardanforderungen an die CPU- und Arbeitsspeicherleistung. Sie erfordert eine Serverplattform mit hoher Leistungsfähigkeit, etwa in Bezug auf die Verarbeitungseffizienz der Kerne, die Zuverlässigkeit und die Stabilität Die Berechnungen des H.265/HEVC-Codecs sind 4-mal komplexer als beim Vorgänger H.264/MPEG. Dies verursacht bislang ungekannte Verarbeitungsanforderungen an die Backend-Serverplattform. In diesem Abschnitt stellen wir wichtige IA-basierte Techniken vor, mit deren Hilfe der HEVC-Codec von Strongene den 1080p-Echtzeit-Codierungsstandard erreichen konnte.

3.1.1 Intel SIMD-Vektorisierungsabstimmung für HEVC-Codierungsfunktionen

Die meisten zeitintensiven Video- und Bildverarbeitungsfunktionen sind im Bereich der blockbasierten, datenintensiven Berechnungen angesiedelt, welche sich mithilfe der Intel® SIMD(Single Instruction Multi Data)-Vektorisierungsbefehle optimieren lassen. Intel SIMD-Befehle verarbeiten Multimengendaten innerhalb eines einzigen CPU-Zyklus, was den Datendurchsatz und die Ausführungseffizienz signifikant verbessert. Intel SIMD werden weithin unterstützt und haben sich aus MMX, Intel® SSE und Intel® Advanced Vector Extensions (Intel® AVX) zu Intel® Advanced Vector Extensions 2 (Intel® AVX2) für unterschiedliche x86-Plattformgeneration entwickelt.

Beim Codierungscodec von Strongene lassen sich – vom Blickwinkel der Profiling-Daten aus gesehen – alle wichtigen Hot-Funktionen mithilfe von Intel SSE-Befehlen vektorisieren (z. B. Frame-Interpolation mit geringer Komplexität und Bewegungskompensation, transponierungsfreie Integer-Transformation, Hadamard-Transformation mit Schmetterlingsgraph und SAD/SSD-Berechnung mit geringster Speicherredundanz). Wir aktivierten die Intel SSE-Befehle in der Plattform mit Intel Xeon Prozessor (siehe Abbildung 6).

Abbildung 6: Beispiel für die Aktivierung der Intel® SIMD/SSE-Befehle im Strongene Codec

Mit diesen Intel SIMD-Programmiermodellen und -Paradigmen schrieb Strongene – in Hinblick auf eine maximale Leistungssteigerung – alle Hot-Funktionen im Codierungs-Codec um. Abbildung 7 zeigt unsere Profiling-Daten in einem Standard-1080p-HEVC-Codierungsszenario. Das Ergebnis verdeutlicht, dass 60 % der Hot-Funktionen in den Intel SIMD-Befehlen ausgeführt werden.

Abbildung 7: Profiling-Ergebnisse der Codierungsfunktionen von Strogene

Intel AVX2-Befehle mit 256-bit-Integer-Berechnungen werden die Leistung im Vergleich zum früheren 128-bit-Code der Intel SSE verdoppeln. Intel AVX2 wird von Plattformen unterstützt, die mit den 2014 eingeführten Intel Xeon Prozessoren (Codename: Haswell) ausgestattet sind. Wir nehmen eine gebräuchliche 64x64-Block-SAD-Berechnung als Beispiel, um die inhärente Leistung der Intel AVX2 zu testen:

Tabelle 1: Implementierungsergebnisse für Intel® SSE und Intel® AVX2

CPU-Zyklus

original

Intel® SSE

Intel® AVX2

Durchlauf 1

98877

977

679

Durchlauf 2

98463

1092

690

Durchlauf 3

98152

978

679

Durchlauf 4

98003

943

679

Durchlauf 5

98118

954

678

Durchschnitt

98322,6

988,8

681

Beschleunigung

1,00

99,44

144,38

Wie aus Tabelle 1 ersichtlich ist, können die Intel SSE- und Intel AVX2-Befehle die Leistung um das 100-fache steigern, und der Intel AVX2-Code ermöglicht im Vergleich zu Intel SSE2 eine zusätzliche Leistungssteigerung von über 40 %. Durch ein Upgrade des Intel SSE-Codes zu Intel AVX2 auf der demnächst verfügbaren Haswell-Plattform ist eine weitere Leistungsverbesserung zu erwarten.

3.1.2 Thread-Parallelität und Feinabstimmung der Kernskalierbarkeit

Wie wir in Abschnitt 2.3 gesehen haben, verwenden die meisten aktuellen Implementierungen auf Plattformen mit Mehrkernprozessoren nicht alle verfügbaren Kerne. Basierend auf der neuesten Mehrkernarchitektur der Intel Xeon Prozessoren – mit geklärter Parallelismusabhängigkeit zwischen HEVC und CTB-basierten Algorithmen – schlägt Strongene vor, die ursprünglichen OWF(Overlapped Wave-Front)- und WPP(Wave-front Parallel Processing)-Methoden durch das parallele IFW(Inter-Frame Wave-front)-Framework zu ersetzen und anschließend ein dreischichtiges Thread-Management-Schema zu entwickeln. Hiermit wird sichergestellt, dass das IWF alle Kerne vollständig nutzen kann, um den HEVC-Codierungsprozess zu beschleunigen. Mit diesem neuen Parallelismus-Framework – auf einer Ivy-Bridge-Plattform (Intel Xeon Prozessor E5-2697 mit 2,70 GHz, 12x2 physische Kerne, SMT deaktiviert) – kann Strongenes Codec die Rechenressourcen von 18 bis 24 physischen Kernen nutzen und damit eine recht gute Thread-Parallelität erzielen.

Abbildung 8: Thread-Parallelität und CPU-Nutzung bei Strongenes Codierungscodec

Mit dem neuen WHP-Parallelismus-Framework und vollständig implementierten Intel SIMD-Befehlen auf der Aufgaben- und Datenebene erzielte Strongenes Codierungscodec auf x86-Prozessoren eine hochgradige Leistungsbeschleunigung für 1080p-Videosequenzen, wobei er, wie in Abbildung 8 gezeigt, die Rechenkapazität aller Kerne erfolgreich nutzte.

3.1.3 Weitere Feinabstimmung mit SMT/HT

Simultanes Multithreading (SMT) – auch Hyper-Threading (HT) genannt – wird auf allen IA-basierten Plattformen umfassend unterstützt. Die Technik ermöglicht es dem Betriebssystem, für jeden physischen Kern zwei virtuelle bzw. logische Kerne zu adressieren und die Ressourcen, wenn möglich, zwischen ihnen zu teilen. Die Hauptfunktion der Hyper-Threading-Technik besteht darin, die Anzahl der abhängigen Befehle in einer Pipeline zu senken. Sie bietet Leistungsvorteile, wenn CPU-Kerne intensiv arbeiten; allerdings können nicht alle Anwendungen davon profitieren, etwa jene, die nicht alle Kerne nutzen. Für diese Fälle führt die SMT einen Aufgaben/Thread-Switching-Overhead ein. Daher deaktivierten wir SMT in Strongenes Codierungscodec und erhielten den HEVC-1080p-Video-Echzeitcodierungsstandard auf der Ivy-Bridge-Plattform (Intel Xeon Prozessor E5-2697 v2). Die in der folgenden Tabelle gelb hervorgehobenen Bereiche veranschaulichen dieses Ergebnis.

Tabelle 2: Mit Strongene erzielte HEVC-Codierungsleistung auf einer Plattform mit Intel® Xeon® Prozessor3

Plattform

Auflösung

Bitrate (kbit/s)

FPS

CPU-Auslastung

Codierungsmodus

SMT

WSM E7-8837
mit 2,67 GHz
(8x8 Kerne)

720p

800

8,2

15 Kerne

ultraschnell

AUS

1600

2,6

18 Kerne

ultralangsam

AUS

1080p

1500

3,6

27 Kerne

ultraschnell

AUS

3000

1,4

23 Kerne

ultralangsam

AUS

4 Kerne

5000

1,2

19 Kerne

ultraschnell

AUS

10000

0,5

21 Kerne

ultralangsam

AUS

IVY E5-2697 v2
mit 2,70 GHz
(2x12 Kerne)

720p

1000

11

40 %, 14 Kerne

ultralangsam

EIN

720p

1000

46

60 %, 16 Kerne

ultraschnell

EIN

1080p

1500

21

70 %, 16 Kerne

ultraschnell

EIN

1080p

1500

25

80 %, 18 Kerne

ultraschnell

AUS

IVB E7-4890
mit 2,80 GHz
(4x15 Kerne)

1080p

2000

22

19 Kerne

ultraschnell

EIN

1080p

8000

6,11

15 Kerne

ultralangsam

EIN

4 Kerne

8000

7,02

29 Kerne

ultraschnell

EIN

4 Kerne

8000

3,28

23 Kerne

ultralangsam

EIN

Nachdem wir signifikante Leistungsverbesserungen erzielt hatten, ermittelten wir anhand weiterer Analysen die Leistungsfähigkeit des HEVC-Codierungscodecs von Strongene auf der Ivy-Bridge-Plattform. Unser Augenmerk galt hierbei insbesondere der Bandbreite und der Qualität.

Tabelle 3: Leistungsvergleich zwischen H.264- und H.265-Codec

Datei: BQTerrance_1920x1080_60.yuv

Auflösung: 1920x1080, Größe: 1869 MB, 622080 kbit/s

Plattform: E5-2697 v2 mit 2,70 GHz, RAM: 64 GB DDR3-1867, QPI mit 8,0 GT/s, Betriebssystem/SW: Red Hat 6.4, Kernel 2.6.32, gcc v4.4.7, ffmpeg v2.0.1, Lentoid HEVC Encoder r2096 Linux

Codec

Größe (Byte)

Bitrate (kbit/s)

PSNR_Y/U/V (dB)

H.264

12254696

4078,1

32,311/39,369/42,043

H.265

6215615

2064,28

34,016/39,822/42,141

Tabelle 3 veranschaulicht, dass sich mit dem H.265/HEVC-Codec – bei unveränderter Videoqualität – 50 % der Bandbreite4 einsparen lassen.

3.2 H.265/HEVC-Hochleistungsdecoder auf Plattformen mit Intel® Core™ Prozessoren

Strongenes HEVC/H.265-Decoder ist ein optimierter H.265-Decoder, der bei relativ geringen Rechenanforderungen gute Leistung liefert. Die hohe Effizienz dieses HEVC-Decoders wird durch ein vollständig parallelisiertes Architekturdesign und die Implementierung von Wavefront Parallel Processing (WPP) erzielt. Zudem werden auf Plattformen mit Intel Core Prozessoren verfügbare Intel SIMD-Befehle (z. B. Intel SSE2, Intel SSSE3 und Intel SSE4) verwendet, um verschiedene Decodierungsblöcke zu beschleunigen und das Leistungspotenzial der zugrundeliegenden Intel Architektur voll zu nutzen. Dank der Vorteile, die diese Funktionen bieten, kann Strongenes HEVC-Decoder eine Echzeit-4K-Decodierung mit einer Mainstream-CPU und bis zu 200 FPS für 1080p-Videostreams erzielen.

3.2.1 Optimierung und Leistungsanalyse des HEVC-Decoders von Strongene

Die Multithreading-Optimierung des HEVC-Decoders von Strongene wird durch WPP und Frame-Layer-Parallelismus erreicht. WPP ist eine in HEVC eingeführte Funktion, die Parallelverarbeitung ermöglicht, indem sie ein Slice in mehrere Zeilen mit Coding Tree Units (CTUs) teilt und anschließend jede Zeile einem Thread zuweist (jede Zeile kann verarbeitet werden, sobald die CTUs in der vorherigen Zeile als Referenz decodiert wurden). Der in Strongenes HEVC-Decoder implementierte Frame-Layer-Parallelismus nutzt die im HEVC-Standard eingeführte hierarchische Struktur in der Art, dass B-Frames von anderen B-Frames referenziert werden können, wodurch eine hierarchische Referenzierungsstruktur gebildet wird. Für eine Group of Pictures (GoP) mit dem Wert 8 lässt sich die Sequenz zum Beispiel wie folgt codieren:

Abbildung 9: Eine der möglichen codierten Frame-Strukturen (Anzeigereihenfolge), um Frame-Layer-Parallelismus für GoP = 8 zu verwenden

In diesem Fall verwendet B1 in der ersten Phase 2 P-Frames als Referenz. In der zweiten Phase verwenden die beiden B2-Frames einen P-Frame und einen B1-Frame als Referenz. Daher können diese beiden B2-Frames parallel verarbeitet werden. In der dritten Phase verwenden die vier B3-Frames entweder einen P-Frame und einen B2-Frame oder einen B1-Frame und einen B2-Frame als Referenz. Daher können die vier B3-Frames ebenfalls parallel verarbeitet werden. Wird eine größere GoP verwendet, lässt sich der Frame-Layer-Parallelismus noch weiter verbessern, da die Anzahl der Threads im HEVC-Decoder zur Unterstützung der parallelen B-Frame-Decodierung ausreicht. Strongenes HEVC-Decoder ist vorteilhaft aufgebaut, um mittels Multithread-Decodierung und WPP das maximale Parallelismuspotenzial zu erzielen und so die Decodierungsgeschwindigkeit zu steigern.

Die beiden folgenden Tabellen zeigen die maximale Decodierungs-Frame-Rate des HEVC-Decoders vor (Tabelle 4) und nach (Tabelle 5) der Intel SSE-Optimierung auf einer Sandy-Bridge-Plattform5, die 1080p- und 4K-Sequenzen mit einer unterschiedlichen Anzahl aktivierter Threads ausführt.

Tabelle 4: Decodierungsrate des HEVC-Decoders von Strongene vor der Intel SSE-Optimierung (Lentoid C) für 1080p- und 4K-Videostreams mit einer unterschiedlichen Anzahl aktivierter Threads

 

1080p, 1,2 Mbit/s

4K, 5,6 Mbit/s

Decodierungsrate ohne Rendering (FPS)

Durchschnittliche CPU-Auslastung

Decodierungsrate ohne Rendering (FPS)

Durchschnittliche CPU-Auslastung

1 Thread

25,33

25 %

6,85

25 %

2 Thread

43,03

49 %

11,8

47 %

4 Thread

51,79

93 %

14,13

86 %

8 Thread

53,1

98 %

15,03

99 %

Tabelle 5: Decodierungsrate des HEVC-Decoders von Strongene nach der Intel SSE-Optimierung (v2.0.1.14) für 1080p- und 4K-Videostreams mit einer unterschiedlichen Anzahl aktivierter Threads

 

1080p, 1,2 Mbit/s

4K, 5,6 Mbit/s

Decodierungsrate ohne Rendering (FPS)

Durchschnittliche CPU-Auslastung

Decodierungsrate ohne Rendering (FPS)

Durchschnittliche CPU-Auslastung

1 Thread

75

25 %

21

25 %

2 Thread

120

45 %

33

40 %

4 Thread

140

70 %

36

63 %

8 Thread

154

98 %

40

96 %

Aus den Daten oben ist ersichtlich, dass sich nach der Intel SSE-Optimierung5 auf einer Sandy-Bridge-Plattform für 1080p-Streams ein etwa 3-facher Leistungsgewinn und für 4K-Streams ein etwa 2,6-facher Leistungsgewinn erzielen lässt. Zudem trägt das Multithreading-Design des HEVC-Decoders von Strongene erheblich zur Leistungssteigerung im Vergleich zum Single-Thread-Modus bei: Wenn die Anzahl der gleichzeitig decodierten Threads von 1 auf 8 erhöht wird, lässt sich in etwa die 2-fache Decodierungs-Frame-Rate erzielen. Hinsichtlich der Gesamtleistung ist ersichtlich, dass Strongenes HEVC-Decoder mit Intel SSE-Optimierung sogar auf Sandy-Bridge-Mobilplattformen mit Zweikernprozessoren 4K-Streams in Echtzeit mit weniger als 40 % CPU-Auslastung decodieren kann, was ihn definitiv zu einem der zurzeit besten HEVC-Software-Decoder macht. Für 1080p-Streams mit Bitraten zwischen 1 und 3 Mbit/s (übliche Einstellung der Bitrate für 1080p-Videostreaming über das Internet) lässt sich eine Echtzeit-Decodierung mit weniger als 20 % CPU-Auslastung erzielen.

3.2.2 Vergleich des für die Intel SSE optimierten HEVC-Decoders von Strongene mit Open-Source-Alternativen sowie künftige Optimierungschancen

Eine noch ausführlichere Leistungsevaluierung des HEVC-Decoders von Strongene lässt sich durch einen Vergleich mit einigen weithin bekannten Open-Source-Implementierungen, wie HM und FFMPEG, durchführen. In den folgenden Diagrammen werden die Decodierungsraten mehrerer HEVC-Decoder anhand von Videostreams mit unterschiedlichen Einstellungen der Auflösung, Framerate und Bitrate verglichen.

 HM10.0: HEVC-Referenz-Decoder HM10.0

 FFMPEG: FFMPEG-2.1-HEVC-Decoder mit Single-Thread-Ausführung

 FFMPEG mit 4 Threads: FFMPEG-2.1-HEVC-Decoder mit 4-Thread-Ausführung

 Lentoid C: Strongenes HEVC-Decoder vor der SSE-Optimierung mit Single-Thread-Ausführung

 Lentoid SIMD: Strongenes HEVC-Decoder nach der SSE-Optimierung mit Single-Thread-Ausführung (v2.0.1.16)

 Lentoid SIMD mit 4 Threads: Strongenes HEVC-Decoder nach der SSE-Optimierung mit 4-Thread-Ausführung (v2.0.1.16)

Abbildung 10: H.265-Decodierungs-Frame-Rate von 4K-Videos für unterschiedliche Decoder und Konfigurationen

Abbildung 11: H.265-Decodierungs-Frame-Rate von Videos der Klasse A für unterschiedliche Decoder und Konfigurationen

Abbildung 12: H.265-Decodierungs-Frame-Rate von Videos der Klasse B für unterschiedliche Decoder und Konfigurationen

Abbildung 13: H.265-Decodierungs-Frame-Rate von Videos der Klasse C für unterschiedliche Decoder und Konfigurationen

Abbildung 14: H.265-Decodierungs-Frame-Rate von Videos der Klasse E für unterschiedliche Decoder und Konfigurationen

Abbildung 15: H.265-Decodierungs-Frame-Rate von Videos der Klasse F für unterschiedliche Decoder und Konfigurationen

Hinsichtlich der Leistungsdaten für Videos unterschiedlicher Klassen konnte Strongenes HEVC-Decoder nach der Intel SSE-Optimierung im Vergleich zum HM10-Decoder eine etwa 10-fache Geschwindigkeitssteigerung6 erzielen. Bei Streams mit geringerer Bitrate ist der Leistungsgewinn sogar noch größer. Allerdings verringert sich das Leistungsverhältnis der Intel SSE-Optimierung (Lentoid SIMD mit 4 Threads / Lentoid C), wenn die Bitrate steigt, weil Intel SIMD-Befehle in Modulen, die sich parallelisieren lassen (zum Beispiel Bewegungskompensation), effektiver sind als bei solchen, die keine Parallelisierung zulassen (CABAC, IDCT und Deblocking). Dieses Phänomen lässt sich genauer erklären, wenn wir uns die VTune™ Amplifier XE Hotspot-Funktionen vor und nach der Intel SSE-Optimierung ansehen:

Abbildung 16: Hotspot-Funktionen des HEVC-Decoders von Strongene vor der Intel SSE-Optimierung (Lentoid C mit 8 Threads) beim Ausführen eines 4K-5,6-Mbit/s-Workloads aus der Perspektive des VTune™ Amplifiers

Abbildung 17: Hotspot-Funktionen des HEVC-Decoders von Strongene nach der Intel SSE-Optimierung (Lentoid SIMD mit 8 Threads) beim Ausführen eines 4K-5,6-Mbit/s-Workloads aus der Perspektive des VTune™ Amplifiers

Das in Abbildung 16 dargestellte Ergebnis zeigte uns, dass sich die meisten Hotspots im Lentoid-C-Decoder im Modul für die Bewegungskompensation (Motion Compensation, MC) befanden, da die MC für jedes CTB durchgeführt werden muss und hierfür umfassende Rechenressourcen benötigt werden. Allerdings lässt sich die MC auf CTB-Ebene parallelisieren, so dass nach der Intel SSE-Optimierung das höchste Beschleunigungsverhältnis erzielt werden kann:

Bei steigender Bitrate werden wesentlich mehr Rechenressourcen für CABAC, IDCT und Deblocking verwendet, um die Videodaten zu decodieren und zu verarbeiten, was zu einem geringeren Intel SSE-Beschleunigungsverhältnis für diese Module führt. Daher wurden nach der Intel SSE-Optimierung Hotspot-Funktionen von MC- zu IDCT- und Deblocking-Modulen verschoben (siehe Abbildung 17).

Darüber hinaus können wir anhand der CPU-Parallelität in VTune erkennen, dass – wenn wir den für die Intel SSE optimierten Decoder mit 8 Threads auf 4K-5,6-Mbit/s-Streams ausführen – mindestens 3 logische CPUs während 74 % der Decodierungszeit laufen und nur 1 oder 2 logische CPUs 26 % der Zeit laufen. Dies ist in einem Workload-Ungleichgewicht zwischen den B-Frames begründet.

Abbildung 18: Balkendiagramm der CPU-Auslastung

Für die Hotspot-Analyse sind alle fünf wichtigen Hot-Funktionen nicht an den Arbeitsspeicher, sondern an die CPU gebunden, was impliziert, dass sich durch Intel AVX- und Intel AVX2-Befehle weitere Optimierungen erzielen lassen.

Abbildung 19: Wichtigste Hotspots

3.3 Optimierung des H.265/HEVC-Decoders auf Plattformen mit Intel® Atom™ Prozessoren

Mobilgeräte werden am häufigsten für das Anschauen von Videos eingesetzt. Die Multimedia-Verarbeitung ist rechenintensiv und wirkt sich hochgradig auf die Akkulaufzeit und die Erfahrungswerte des Benutzers aus. Die LCD-Auflösung von Mobilgeräten wurde von 480p zunächst auf 720p und inzwischen auf 1080p vergrößert. Benutzer wollen Videos in hoher Qualität anschauen, allerdings wird der Kauf von Netzwerkbandbreite für Anbieter von Online-Videos, wie Youku, iQiyi und LeTV, Jahr für Jahr kostspieliger.

2013 führte Intel die vierte Generation der Intel Atom Prozessoren (Codename: Bay Trail) ein, die auf der 22-nm-Silvermont-Architektur basiert. Einzelheiten zu dieser Architektur sind in der folgenden Grafik dargestellt.

Abbildung 20: Einführung der Bay-Trail-Plattform

Für das Debugging des H.265/HEVC-Decoders von Strongene setzten wir Intel VTune-Tools ein. Anschließend optimierten wir die Toolsets (wie in den folgenden drei Abschnitten beschrieben). Das Ergebnis war eine extreme Decoding-Geschwindigkeit und eine geringe CPU-Nutzung auf Plattformen mit Intel Atom Prozessoren.

3.3.1 Optimierung durch YASM und Intel® C++-Compiler

Anstatt die optimierten ASM-Assembly-Codes in Open-Source-FFMPEG mit dem Android*-Standardcompiler zu kompilieren, setzten wir YASM und den Intel® C++-Compiler ein.

Für YASM, das den für die Intel SIMD optimierten ASM-Assembly-Code für x86-Plattformen wiederverwenden kann, wurde der NASM-Assembler unter der „neuen“ BSD-Lizenz komplett umgeschrieben. Entwickler können den YASM-Compiler von http://yasm.tortall.net herunterladen und installieren. Um ihn zu verwenden, ändern Sie die configure.sh-Datei wie unten beschrieben ab, so dass sie für die YASM- und ASM-Optionen geeignet ist, bevor Sie FFMPEG kompilieren.

Abbildung 21: Änderung der FFMPEG-Konfigurationsdatei

Wir haben den ISVs ebenfalls empfohlen, den Intel C++-Compiler für das Kompilieren von nativem Code zu verwenden.

3.3.2 Optimierung durch Intel® Streaming-SIMD-Extension-Befehle (Intel® SSE)

Beim Debugging mit Intel VTune-Tools haben wir herausgefunden, dass Strongenes Codec für die YUV2RGB-Umsetzung nur C-Code verwendete, wodurch die Leistung nicht gerade optimal ist.

Plattformen mit Intel Atom Prozessor unterstützen Intel SSE-Befehlcodes, darunter MMX, MMXEXT, Intel SSE, Intel SSE2, Intel SSE3, Intel SSSE3 und Intel SSE4. Die Aktivierung von Intel SSE-Code in Open-Source-FFMPEG kann die YUV2RGB-Leistung deutlich verbessern.

Für das Öffnen der Intel SSSE3-Compileroption in FFMPEG verwenden wir MMX-EXT-Code, wie im Codeausschnitt unten dargestellt.

Abbildung 22: Aktivieren von Intel® SSE-Code in FFMPEG

Die Bay-Trail-Plattform kann Intel SSE-4.1-Befehle unterstützen. Sie wurden eingesetzt, um den H.265/HEVC-Decoder zu optimieren und dadurch die Leistung zu steigern.

3.3.3 Optimierung durch Intel® Threading Building Blocks (Intel® TBB)

Beim Ausführen des VTune-Tools fanden wir heraus, dass Strongenes Codec vier Threads erstellte. Allerdings musste der schnellste Thread auf den langsamsten warten, was dazu führte, dass Kerne inaktiv waren.

Bei eigenständiger Nutzung können Intel SSE nur auf einem Kern arbeiten. Durch den gemeinsamen Einsatz der Intel TBB mit den Intel SSE lässt sich der Code auf Mehrkernprozessoren ausführen, was die Leistung steigert.

Wir änderten den Multithread-Code so ab, dass er multitaskingfähig war und verwendeten anschließend die Intel TBB, um den inaktiven Kernen Aufgaben zuzuweisen und damit das Potenzial des Mehrkernprozessors vollständig zu nutzen.

Die Intel TBB können unter http://threadingbuildingblocks.org/download heruntergeladen werden.

Abbildung 23: Vergleichsdaten für YUV und RGB

Durch die Optimierung mittels Intel TBB lässt sich ein bis zu 2,6-facher Leistungsgewinn7 erzielen.

3.3.4 Leistungsvergleich für H.265/HEVC-Decoder

OpenGL* wurde ebenfalls auf Rendering ausgelegt, da wir bei Tests herausgefunden hatten, dass die Optimierung durch YASM und den Intel C++-Compiler eine bis zu 1,5-fache Leistungssteigerung ermöglichte. Die Optimierung mittels Intel SSE erbrachte eine bis zu 6-fach verbesserte Leistung im Vergleich zu C-Code und die Optimierung mittels Intel® TBB ermöglichte eine bis 2,6-fache Verbesserung8.

Um die Aktualisierungsrate bei der Videowiedergabe zu testen, verwendeten wird Intel® Graphics Performance Analyzers (Intel® GPA). Bei Tests mit dem optimierten H.265/HEVC-Decoder auf dem Bay-Trail-Tablet kann die Aktualisierungsrate beim Abspielen von HEVC-1080p-Videos bis zu 90 FPS (Frames per Second) erreichen, während das Clover-Trail+-Tablet nur 40 FPS erzielt.

Abbildung 24: Leistungsvergleich zwischen Clover-Trail+/Bay-Trail-Tablets

Wenn wir die Aktualisierungsrate auf dem Bay-Trail-Tablet beim Abspielen des 1080p-Videos mit 24 FPS festlegen, liegt die CPU-Auslastung bei weniger als 25 %. Daher können wir Strongenes HEVC-Decoder den populären Anbietern von Online-Videos in der Volkrepublik China für kommerzielle Zwecke wärmstens empfehlen.

4. Zusammenfassung

H.265/HEVC wird im kommenden Jahrzehnt voraussichtlich der beliebteste Videostandard sein. Zahlreiche Medienanwendungen und -produkte werden derzeit auf HEVC-Unterstützung ausgelegt. In diesem Artikel implementierten wir eine CPU-basierte Echtzeit-End-to-End-HEVC-Lösung auf Intel Plattformen mit neuen IA-Plattformtechniken. Unsere fortschrittliche Lösung auf Basis von Intel Prozessoren wurde in Online-Video-Diensten und -Produkten von Xunlei[4] implementiert. Sie wird die Produktion und Implementierung der H.265/HEVC-Technik definitiv beschleunigen.

5. Weitere Artikel zu diesem Thema

  1. http://software.intel.com/en-us/articles/optimizing-h265hevc-decoder-on-intel-atom-processor-based-platforms
  2. http://software.intel.com/en-us/articles/real-time-cpu-based-h265hevc-encoding-solution-with-intel-platform-technology-1

Referenz

[1] Überblick über den High-Efficiency-Video-Coding(HEVC)-Standard, „IEEE TRANSACTIONS ON CIRCUITS AND SYSTEMSc FOR VIDEO TECHNOLOGY“, BAND 22, NR. 12. DEZEMBER 2012

[2] High Efficiency Video Coding (HEVC) text specification draft 10, JCTVC-L1003_v34

[3] http://www.strongene.com/en/homepage.jsp

[4] http://yasm.tortall.net

[5] http://threadingbuildingblocks.org

[6] http://hevc.hhi.fraunhofer.de/

Über die Autoren

  1. Yang Lu ist leitende Anwendungstechnikerin im Intel® Xeon® Processor Cloud Platform Enabling Team der Intel® Software and Solutions Group (SSG), Developer Relations Division Sie ist seit acht Jahren bei Intel beschäftigt und arbeitet gemeinsam mit Tier-1-ISVs aus dem asiatisch-pazifischen Raum an der Unterstützung von Intel Architekturtechniken.
  2. Finn Wong ist leitender Anwendungstechniker im Intel® Core™ Processor Client Enabling Team der Intel Software and Solutions Group (SSG), Developer Relations Division. Seine Forschungsinteressen gelten der Videocodierung, der digitalen Bildverarbeitung, Computervisionen und der Energieverbrauchsoptimierung.
  3. Songyue Wang ist leitender Anwendungstechniker im Intel® Atom™ Processor Mobile Enabling Team der Intel Software and Solutions Group (SSG), Developer Relations Division. Songyue ist für die Unterstützung und Eignung von Android-Apps auf Intel Atom Prozessoren zuständig. Er befasst sich vor allem mit der Optimierung der Multimedia-Leistung auf der Bay-Trail-Plattform. Hierfür arbeitet er eng mit populären Online-Video-Anbietern in der Volksrepublik China zusammen, um die H.265/HEVC-Codierungs- und -Decodierungs-Lösung sowie Intel® Wireless-Display-Differenzierungsfunktionen auf Android für x86-Plattformen zu unterstützen.

 

1. In Leistungstests verwendete Software und Workloads können speziell für die Leistungseigenschaften von Intel® Mikroprozessoren optimiert worden sein. Leistungstests wie SYSmark* und MobileMark* werden mit spezifischen Computersystemen, Komponenten, Softwareprogrammen, Operationen und Funktionen durchgeführt. Jede Veränderung bei einem dieser Faktoren kann andere Ergebnisse zur Folge haben. Als Unterstützung für eine umfassende Bewertung Ihrer vorgesehenen Anschaffung, auch im Hinblick auf die Leistung des betreffenden Produkts in Verbindung mit anderen Produkten, sollten Sie noch andere Informationen und Leistungstests heranziehen.

Konfigurationen: Intel® Xeon® Prozessor E5-2680 mit 2,70 GHz und 32 GB DDR3-1333-RAM, Videotranscodierungsworkload auf HEVC-Codec, von YANG LU. Weitere Informationen siehe http://www.intel.com/performance

2. In Leistungstests verwendete Software und Workloads können speziell für die Leistungseigenschaften von Intel® Mikroprozessoren optimiert worden sein. Leistungstests wie SYSmark* und MobileMark* werden mit spezifischen Computersystemen, Komponenten, Softwareprogrammen, Operationen und Funktionen durchgeführt. Jede Veränderung bei einem dieser Faktoren kann andere Ergebnisse zur Folge haben. Als Unterstützung für eine umfassende Bewertung Ihrer vorgesehenen Anschaffung, auch im Hinblick auf die Leistung des betreffenden Produkts in Verbindung mit anderen Produkten, sollten Sie noch andere Informationen und Leistungstests heranziehen.

Konfigurationen: Intel® Xeon® Prozessor E5-2697 v2 mit 2,70 GHz und 64 GB DDR3-1867-RAM, Videotranscodierungsworkload auf Strongenes HEVC-Codec, von YANG LU. Weitere Informationen siehe http://www.intel.com/performance

3. In Leistungstests verwendete Software und Workloads können speziell für die Leistungseigenschaften von Intel® Mikroprozessoren optimiert worden sein. Leistungstests wie SYSmark* und MobileMark* werden mit spezifischen Computersystemen, Komponenten, Softwareprogrammen, Operationen und Funktionen durchgeführt. Jede Veränderung bei einem dieser Faktoren kann andere Ergebnisse zur Folge haben. Als Unterstützung für eine umfassende Bewertung Ihrer vorgesehenen Anschaffung, auch im Hinblick auf die Leistung des betreffenden Produkts in Verbindung mit anderen Produkten, sollten Sie noch andere Informationen und Leistungstests heranziehen.

Konfigurationen: Intel® Xeon® Prozessor E5-2697 v2 mit 2,70 GHz und 64 GB DDR3-1867-RAM, Videotranscodierungsworkload auf Strongenes HEVC-Codec, von YANG LU. Weitere Informationen siehe http://www.intel.com/performance

4. In Leistungstests verwendete Software und Workloads können speziell für die Leistungseigenschaften von Intel® Mikroprozessoren optimiert worden sein. Leistungstests wie SYSmark* und MobileMark* werden mit spezifischen Computersystemen, Komponenten, Softwareprogrammen, Operationen und Funktionen durchgeführt. Jede Veränderung bei einem dieser Faktoren kann andere Ergebnisse zur Folge haben. Als Unterstützung für eine umfassende Bewertung Ihrer vorgesehenen Anschaffung, auch im Hinblick auf die Leistung des betreffenden Produkts in Verbindung mit anderen Produkten, sollten Sie noch andere Informationen und Leistungstests heranziehen.

Konfigurationen: Intel® Xeon® Prozessor E5-2697 v2 mit 2,70 GHz und 64 GB DDR3-1867-RAM, Videotranscodierungsworkload auf Strongenes HEVC-Codec, von YANG LU. Weitere Informationen siehe http://www.intel.com/performance

5. In Leistungstests verwendete Software und Workloads können speziell für die Leistungseigenschaften von Intel® Mikroprozessoren optimiert worden sein. Leistungstests wie SYSmark* und MobileMark* werden mit spezifischen Computersystemen, Komponenten, Softwareprogrammen, Operationen und Funktionen durchgeführt. Jede Veränderung bei einem dieser Faktoren kann andere Ergebnisse zur Folge haben. Als Unterstützung für eine umfassende Bewertung Ihrer vorgesehenen Anschaffung, auch im Hinblick auf die Leistung des betreffenden Produkts in Verbindung mit anderen Produkten, sollten Sie noch andere Informationen und Leistungstests heranziehen.

Konfigurationen: PC mit Intel® Core™ Prozessor i5-2520M, 4 GB RAM und Windows* 7, Decodierungs-Frame-Rate und CPU-Auslastung, Finn Wong. Weitere Informationen siehe http://www.intel.com/performance

6. In Leistungstests verwendete Software und Workloads können speziell für die Leistungseigenschaften von Intel® Mikroprozessoren optimiert worden sein. Leistungstests wie SYSmark* und MobileMark* werden mit spezifischen Computersystemen, Komponenten, Softwareprogrammen, Operationen und Funktionen durchgeführt. Jede Veränderung bei einem dieser Faktoren kann andere Ergebnisse zur Folge haben. Als Unterstützung für eine umfassende Bewertung Ihrer vorgesehenen Anschaffung, auch im Hinblick auf die Leistung des betreffenden Produkts in Verbindung mit anderen Produkten, sollten Sie noch andere Informationen und Leistungstests heranziehen.

Konfigurationen: PC mit Intel® Core™ Prozessor i7-2600, 8 GB RAM und Windows* 7, Decodierungs-Frame-Rate für unterschiedliche Decoder und Konfigurationen, Finn Wong. Weitere Informationen siehe http://www.intel.com/performance

7. In Leistungstests verwendete Software und Workloads können speziell für die Leistungseigenschaften von Intel® Mikroprozessoren optimiert worden sein. Leistungstests wie SYSmark* und MobileMark* werden mit spezifischen Computersystemen, Komponenten, Softwareprogrammen, Operationen und Funktionen durchgeführt. Jede Veränderung bei einem dieser Faktoren kann andere Ergebnisse zur Folge haben. Als Unterstützung für eine umfassende Bewertung Ihrer vorgesehenen Anschaffung, auch im Hinblick auf die Leistung des betreffenden Produkts in Verbindung mit anderen Produkten, sollten Sie noch andere Informationen und Leistungstests heranziehen.

Konfigurationen: Tablet mit Intel® Atom™ Prozessor (Bay Trail, FFRD8) mit 2 GB RAM und Android 4.2, Decodierungs-Frame-Rate, Songyue Wang. Weitere Informationen siehe http://www.intel.com/performance

8. In Leistungstests verwendete Software und Workloads können speziell für die Leistungseigenschaften von Intel® Mikroprozessoren optimiert worden sein. Leistungstests wie SYSmark* und MobileMark* werden mit spezifischen Computersystemen, Komponenten, Softwareprogrammen, Operationen und Funktionen durchgeführt. Jede Veränderung bei einem dieser Faktoren kann andere Ergebnisse zur Folge haben. Als Unterstützung für eine umfassende Bewertung Ihrer vorgesehenen Anschaffung, auch im Hinblick auf die Leistung des betreffenden Produkts in Verbindung mit anderen Produkten, sollten Sie noch andere Informationen und Leistungstests heranziehen.

Konfigurationen: Tablet mit Intel® Atom™ Prozessor (Bay Trail, FFRD8) mit 2 GB RAM und Android 4.2, Decodierungs-Frame-Rate, Songyue Wang. Weitere Informationen siehe http://www.intel.com/performance

 

Intel, das Intel-Logo, Atom, Core, VTune und Xeon sind Marken der Intel Corporation in den USA und anderen Ländern.

Copyright © 2014 Intel Corporation. Alle Rechte vorbehalten.

* Andere Marken oder Produktnamen sind Eigentum der jeweiligen Inhaber.

Nähere Informationen zur Compiler-Optimierung finden Sie in unserem Optimierungshinweis.