Bei KDPV - Eingang zur IPP-Etage im Intel-Büro in Nischni Nowgorod
Was ist Intel IPP jetzt?
Intel IPP ist also der Baustein für funktionale Grundelemente, die den Betrieb von Software zur Verarbeitung von Medien und Daten aufgrund von Optimierungen für bestimmte Mikroarchitekturen und Intel-Plattformen sowie der größtmöglichen Verwendung von Vektoranweisungssätzen Intel SSE und Intel AVX aller Versionen erheblich beschleunigen können.
IPP-Funktionen decken vier große Domänen ab:
- Bildverarbeitung;
- Datenkompression;
- Signalverarbeitung;
- Kryptographie.
Das aktuelle Intel IPP 2020 Update 2 enthält über 2.500 Bildverarbeitungsprimitive, 1.300 Signalverarbeitungsprimitive, 500 Computer Vision und 300 Kryptografie.
Die Bibliothek wird ständig verbessert - sie wird für neue Plattformen optimiert, neue Funktionen werden hinzugefügt und die alte, wenig genutzte wird unweigerlich entfernt.
Intel IPP läuft auf jedem x86-Gerät unter Linux, MacOS, Windows und Android. Das heißt, Prozessoren werden nicht nur von Intel, sondern auch von anderen Herstellern unterstützt. Außerdem arbeitet IPP schnell daran, obwohl dies natürlich nicht so schnell ist wie auf Intel-Geräten.
Gleichzeitig benötigen IPP-Benutzer keine detaillierten Kenntnisse über die Ausführungsplattform ihres Codes mithilfe von IPP und die damit verbundenen Aktionen. Die erforderliche Version der Optimierungen wird automatisch aufgerufen.
IPP wird in C mit sogenannten intrinsischen Compilerfunktionen geschrieben. Für verschiedene Modelle der Verwendung der Bibliothek gibt es verschiedene Versionen: Single-Threaded für Aufrufe von verschiedenen Threads externer Anwendungen und Multithreading mit effizienter interner Parallelisierung.
Für diejenigen, die an der Geschwindigkeit der Arbeit an Intel Xeon und Core interessiert sind - einige Benchmarks .
IPP ist derzeit als Teil von Intel Parallel Studio XE , Intel System Studio und allein verfügbar... Und - absolut kostenlos für den persönlichen und kommerziellen Gebrauch.
Interessanterweise ist der "geschlossenste" Bereich unseres Lebens die Kryptographie, im Fall von IPP ist er jetzt der offenste - dies ist ein Open-Source-Projekt, das auf Github verfügbar ist .
Die Grundlagen, der Ansatz und die API, die IPP beim ersten Auftreten in der Signal- und Bildverarbeitung mitgebracht hat, können jetzt als unausgesprochener Standard bezeichnet werden - das gilt auch für die Kryptografie.
Alle Bibliothekskomponenten werden von Millionen von Benutzern in Hunderttausenden von Anwendungen auf der ganzen Welt verwendet. Einschließlich innerhalb des Unternehmens selbst - in verschiedenen Abteilungen von Intel. Intel IPP bietet eine erhebliche Beschleunigung der OpenCV-Bibliothek. Übrigens ein benutzerdefiniertes Intel IPPMit den von OpenCV verwendeten Funktionen wurde die erste kostenlose Version von IPP im Jahr 2015 veröffentlicht.
Intel IPP findet sich in Anwendungen zur Bilderkennung und -verbesserung in allen Bereichen, einschließlich der Medizin. Drucker, einschließlich 3D; digitale Videoüberwachung; autonome Fahrzeuge; Spracherkennung und -synthese; Datenkompression; Telekommunikation und Spiele. IPP funktioniert überall - von Servern bis zu Wearables. Es kann argumentiert werden, dass wenn eine Zeitmaschine erfunden würde, ihre Software sicherlich Intel IPP verwenden würde.
Geschichte von IPP
Alles begann mit Intels Signalverarbeitungs- (SPL) und Bildverarbeitungsbibliotheken (IPL), die im Auftrag von Intel im VNIIEF-Bundesnuklearzentrum in Sarov entwickelt wurden (darüber haben wir in unserer Geschichte über OpenCV geschrieben ).
1996 (oder 1997, verschiedenen Augenzeugen zufolge) fand in der Intel-Zentrale in Santa Clara ein Treffen über weitere Pläne für die Entwicklung von SPL und IPL statt, an dem amerikanische Projektkuratoren teilnahmen und Experten aus Sarov eingeladen wurden, darunter der zukünftige Architekt, Inspirator und Leiter des IPP-Teams Boris Sabanin sowie Sergey Kirillov, der derzeit die Arbeit an der IPP-Kryptographie leitet.
Das Sarov-Team brachte seine Liste mit Vorschlägen mit, und eine davon bestand darin, die Schnittstellen der Low-Level-IPL- und SPL-Funktionen für Benutzer zu öffnen, da sie ohnehin bereits implementiert und optimiert waren, während einige Benutzer mit IPL-Datenformaten nicht vertraut waren ihre etablierten Bildformate. Der vorgeschlagene Prototyp der IPP-Schnittstelle unter Verwendung von Strukturen, die im Vergleich zu IPL / ISL einfacher sind, wurde von Boris Sabanin während einer Diskussion buchstäblich auf einer Serviette erstellt. Zu dieser Zeit erhielt der Vorschlag der russischen Seite, obwohl er nicht abgelehnt wurde, nicht viel Unterstützung - er stand mit niedriger Priorität in der Mitte der Liste. Aber nach ein paar Jahren erinnerte sich jemand bei Intel daran (höchstwahrscheinlich Shin Li, der später der "Evangelist" von Intel IPP wurde) und die Pläne änderten sich.
Ein Intel IPP-Buch von 2004 von Stewart Taylor, einem Teilnehmer des historischen IPP-Meetings (damals ein neu eingestellter Stanford-Junggeselle von Intel).
So begann die Arbeit an Intel Performance Primitives, die später in Integrated Performance Primitives umbenannt wurden.
Eine interne Version von IPP, nennen wir es 1.0, wurde 1999 erstellt. Es war eher ein Proof of Concept, ein Prototyp, um die Realisierbarkeit des Konzepts zu beweisen. Es wurde nicht als Produkt veröffentlicht, aber es ermöglichte die Definition und Verfeinerung des Konzepts, der Architektur und der Spezifikationen von IPP. Die erste öffentliche Version trug sofort die Nummer 2.0 und wurde im April 2002 veröffentlicht.
Bis 2009 wurden die meisten Arbeiten an den IPP-Bibliotheken unter der Leitung von Boris Sabanin durchgeführt, der zu Recht als Pate und Seele von IPP angesehen werden kann. Er hat viel Mühe in das Projekt gesteckt, ein Team vielseitiger Spezialisten aufgebaut, aber leider das 20-jährige Jubiläum von Intel IPP nicht erreicht.
Gemälde "Die Brücke zum Sarow-Turm" von Boris Sabanin, nicht nur IPP bekannt ( hier sehen Sie andere Gemälde von Sabanin, einschließlich seines Selbstporträts),
aber das Erbe von IPL / ISL war nicht beschränkt auf. Primitive für Kryptographie und Datenkomprimierung erschienen fast sofort. Die Experimente begannen auf dem Gebiet der Computer Vision, die später zu einem Projekt mit OpenCV wurde, bei dem Algorithmen mithilfe von Grundelementen im ippCV-Bereich beschleunigt wurden.
Natürlich war dies nicht das einzige Experiment und der einzige Ableger in der Geschichte der Bibliothekserstellung. IPP hielt mit allen Intel Schritt. Dementsprechend unterstützte beispielsweise die fünfte IPP-Version zusätzlich zu x86 den Intel XScale-Prozessor (ARM-Architektur) und Intel Itanium (IA-64)! Im Laufe der Jahre hat IPP Komponenten wie realistisches Rendering, kleine Matrixoperationen, Datenintegrität, Video- und Audio-Codecs integriert.
Diese Funktionalität kann jetzt bei Bedarf mithilfe des zum Herunterladen verfügbaren IPP Legacy Libraries- Pakets verwendet werden .
Darüber hinaus dienten IPP-Videocodecs später als Grundlage für ein weiteres bekanntes Intel-Produkt - das Intel Media SDKund Raytracing wurde im Open-Source-Projekt Intel Embree implementiert .
Von den interessanten technologischen Erfahrungen auf dem Gebiet der IPP-Struktur können wir ein Beispiel eines Windows-Treibers nennen, der die Möglichkeit demonstriert, dass IPP im Kernelmodus arbeitet, sowie eine Version von IPP für die Ausführung auf integrierten Intel-GPUs, die in C for Metal geschrieben sind .
Es ist merkwürdig, dass die IPP-Versionsnummern zuerst in der Reihenfolge von 1 bis 9 lagen und dann ab dem Veröffentlichungsjahr 2017-2020 festgelegt wurden.
Intel IPP-Entwicklungsteam im Jahr 2003
Während der Existenz der IPP-Bibliotheksfamilie nahmen mehr als 100 Personen an ihrer Arbeit teil - in Sarow, Nischni Nowgorod und Moskau. Jetzt befindet sich der IPP-Hauptsitz in Nischni Nowgorod und sieht sehr attraktiv aus!
IPP Bodendekoration bei Intel
IPP ist überhaupt keine primitive Bibliothek!
Obwohl der Name Intel IPP das Wort "primitiv" enthält und auf den ersten Blick keine grundlegenden Schwierigkeiten bei der Erstellung von "Designerteilen" für die Erstellung produktiver Programme auftreten können, bei denen es sich tatsächlich um IPP handelt, ist die Struktur dieser Bibliotheken keineswegs trivial. Interessante technologische Lösungen wurden angewendet, um maximale Leistung und Benutzerfreundlichkeit von IPP sicherzustellen.
Wie bereits erwähnt, enthält IPP Tausende von Funktionen (und jede Funktion verfügt über mehrere Versionen, die für eine bestimmte Architektur optimiert sind), was zu einer großen Anzahl vorgefertigter Bibliotheken führt, was für IPP-Benutzer überhaupt nicht auf der Liste der Vorteile steht.
Daher wird IPP auf besondere Weise gesammelt. Quelldateien, die eine große Anzahl einfacher Funktionen enthalten, werden vor dem Kompilieren von einem speziellen Skript in viele kleine Skripte geschnitten, eine Funktion pro Datei. Und dann werden diese Minifiles zusammengestellt. Darüber hinaus werden sie nicht nur einmal, sondern mehrmals kompiliert - für verschiedene Architekturen mit den entsprechenden Flags. Das Ergebnis sind mehrere große statische Bibliotheken - für jede IPP-Domäne. Diese statischen Bibliotheken werden jedoch aus sehr kleinen Objektdateien zusammengeklebt. Wenn IPP statisch mit einer Anwendung verknüpft ist, erhöht sich die Größe der Anwendung daher fast genau um die Größe der von IPP verwendeten Funktionen, nicht um mehr Bytes.
IPP verfügt auch über einen Mechanismus zum Generieren benutzerdefinierter Bibliotheken basierend auf vorhandenen Tools, ohne dass Benutzer Quellcode öffnen müssen. Der Benutzer wählt nämlich eine Liste von interessierenden Funktionen aus den Header-Dateien aus, wonach eine kleine dynamische Bibliothek mit nur den erforderlichen Funktionen und ihren Abhängigkeiten automatisch von einem Skript aus großen statischen Bibliotheken erstellt wird. Um die Größe weiter zu verringern, enthält diese dynamische Bibliothek möglicherweise Assembly-Optionen für diese Funktionen, nicht für alle Hardwareoptionen, sondern ausschließlich für eine benutzerdefinierte Liste von Plattformen.
In einer Situation, in der jeder zusätzliche Prozentsatz der Leistung der IPP-Bibliotheken von Bedeutung ist, ist es sehr wichtig zu entscheiden, auf welcher Ebene der Code parallelisiert werden soll: innerhalb der Bibliotheksfunktionen, was für IPP-Aufrufe von einem Benutzer-Thread gut ist, oder außerhalb auf der Ebene von Benutzeranwendungen, für die gut ist Multithread-Anwendungen, die Arbeit und Daten für IPP unabhängig voneinander trennen.
Da Anwendungen unterschiedlich sind und IPPs auch unterschiedlich sind. Das IPP-Paket enthält nämlich zwei Sätze von Bibliotheken in 32- und 64-Bit-Versionen: einer ist intern rein Single-Threaded und der zweite ist die interne Parallelisierung einer signifikanten Anzahl von Funktionen unter Verwendung von OpenMP (die genaue Liste der Funktionen ist in den beigefügten Dokumenten beigefügt). Darüber hinaus gibt es eine weitere Version für Bildverarbeitungsbibliotheken - die "Threading Layer", ein Add-On über Single-Threaded-IPP, das entweder OpenMP oder Intel TBB für die externe Parallelisierung der Arbeit an Bildern verwendet, die hierfür in Fragmente (Kacheln) unterteilt sind ... Der Quellcode der IPP-Threading-Schicht ist im IPP-Paket für diejenigen verfügbar, die die größtmögliche Kontrolle darüber haben möchten, wie ihr Code gleichzeitig ausgeführt wird.
Fast seit der Einführung von IPP mussten sich Entwickler Sorgen machen über das Problem, dass Bild- und Signalverarbeitungs-Pipelines, die aus einzelnen IPP-Funktionen bestehen, langsamer laufen, als sie möchten. Die Erklärung ist einfach: Beim Aufrufen von IPP-Funktionen erfolgt das Laden und Entladen aus dem Cache oder sogar aus dem Speicher in der Regel, und dieser Vorgang kann sich als viel teurer als die eigentlichen Berechnungen herausstellen. Dieser Effekt macht sich insbesondere bei der Verarbeitung von Big Data bemerkbar - nicht bei Big Data, sondern bei FullHD-Bildern (ganz zu schweigen von 4K).
Die Entscheidung, in diesem Fall mehrere Funktionen innerhalb von IPP zu einer zu kombinieren, ist nicht geeignet. Statt primitiver Bausteine erhalten wir aus dem Spiel "Tetris" ausgefallene Details, deren Einfügung in Benutzeranwendungen problematisch ist, und die Vielfalt solcher möglichen Assoziationen überschreitet alle angemessenen Grenzen.
Als Ergebnis wurde ein C ++ - Add-On über IPP implementiert, das Pipeline-Diagramme erstellte, Bilder in Stücke schnitt und dann eine parallele Schleife startete, die nicht eine Operation in jedem Thread, sondern die gesamte IPP-Pipeline auf einer separaten Kachel ausführte. Am Ende hielten die Ergebnisse natürlich zusammen. Zuerst wurde ein Prototyp hergestellt, der eine anständige Beschleunigung zeigte. Dann wurde eine Einstellung namens DMIP (Deferred-Mode Image Processing) erstellt. Darüber hinaus wurde DMIP 2011 bei einer der ersten Sitzungen des OpenVX-Standardisierungsausschusses in Khronos erwähnt und vom Ausschuss angesichts der Beliebtheit von Grafiken bei Hardwareentwicklern nachdrücklich unterstützt. Es stellte sich heraus, dass der OpenVX-Standard auf der Graphentechnologie basiert. Aus verschiedenen Gründen hat der OpenVX-Standard keine ausreichende Popularität erhalten, aber jetzt wird das Grafikparadigma vom Intel Graph API-Team unterstützt und entwickelt.Und da die Graph-API in OpenCV, OpenVINO und Movidius SDK enthalten ist, wirken sich IPP-Technologien direkt auf Computer Vision-Standards und moderne APIs aus.
IPP - nützliche Links
Hier noch einmal die wichtigsten Links aus diesem Artikel.
- Intel IPP Seite
- Intel Parallel Studio XE
- Intel System Studio
- IPP Crypto - Open Source Projekt
- IPP Legacy Libraries
Intel IPP Erste Person
Lassen Sie uns Menschen das Wort erteilen, die im Laufe der Jahre eine wichtige Rolle im Schicksal von Intel Performance Primitives gespielt haben.
Vladimir Dudnik, Leiter des Intel IPP-Teams in den Jahren 2009-2011
-, IPP – , . , - , .. IPP - , - .
, , , , SIMD . , , MKL, IPP .
, OpenCV, IPPCV 2006-2008
IPP , , , . FFT. — ! , IPP , , .
IPP , , OCaml, Spiral, FFT — IPP. IPP. , , , , 13-14 , .
, IPP QA 2011-2015 , IPP 2017-2020
IPP QA 2000. , , .
17 IPP. Intel . waterfall & development agile & DevOps. . , .
– . , , . , , , . , , , .
, Image & Signal Processing Intel IPP, 2020 –
IPP SW 2011 , . , . IPP , , , Resize, WarpAffine, WarpPerspective . . C 2017 , , , 2018 IPP Crypto GitHub. 2018 , 2020 IPP, Image & Signal Processing . , , IPP Intel, .