Chez KDPV - entrée de l'étage IPP dans le bureau d'Intel à Nizhny Novgorod
Qu'est-ce qu'Intel IPP maintenant
Ainsi, Intel IPP est un bloc de construction de primitives fonctionnelles qui peuvent considérablement accélérer le fonctionnement des logiciels qui traitent les médias et les données, grâce à des optimisations spécifiques à des microarchitectures et plates-formes Intel spécifiques, ainsi qu'à l'utilisation la plus large possible des ensembles d'instructions vectorielles Intel SSE et Intel AVX de toutes les versions.
Les fonctions IPP couvrent quatre grands domaines:
- Traitement d'image;
- Compression de données;
- Traitement de signal;
- Cryptographie.
La mise à jour 2 actuelle d'Intel IPP 2020 contient plus de 2500 primitives de traitement d'image, 1300 primitives de traitement de signal, 500 vision par ordinateur et 300 cryptographie.
La bibliothèque est constamment améliorée - elle est optimisée pour les nouvelles plates-formes, de nouvelles fonctionnalités sont ajoutées et l'ancienne, peu utilisée, est inévitablement supprimée.
Intel IPP fonctionne sur n'importe quel appareil x86 exécutant Linux, macOS, Windows et Android. Autrement dit, les processeurs non seulement d'Intel, mais également d'autres fabricants sont pris en charge.De plus, IPP fonctionne rapidement dessus, bien que, bien sûr, pas aussi rapide que sur les appareils Intel.
Dans le même temps, les utilisateurs IPP n'ont pas besoin de connaissances approfondies sur la plate-forme d'exécution de leur code à l'aide d'IPP et des actions associées - la version requise des optimisations sera appelée automatiquement.
IPP est écrit en C en utilisant des fonctions de compilateur dites intrinsèques. Pour différents modèles d'utilisation de la bibliothèque, il en existe différentes versions: mono-thread pour les appels de différents threads d'applications externes et multi-thread, utilisant une parallélisation interne efficace.
Pour ceux qui s'intéressent à la vitesse de travail sur Intel Xeon et Core - quelques points de repère .
IPP est actuellement disponible dans le cadre d' Intel Parallel Studio XE , d' Intel System Studio et uniquement de lui-même... Et - absolument gratuit pour un usage personnel et commercial.
Fait intéressant, le domaine le plus «fermé» de notre vie est la cryptographie, dans le cas de l'IPP, c'est maintenant le plus ouvert - c'est un projet open source disponible sur Github .
Le travail de base, l'approche et l'API qu'IPP a apportés lors de son apparition dans le traitement du signal et des images peuvent désormais être qualifiés de standard tacite - la même chose s'applique à la cryptographie.
Tous les composants de la bibliothèque sont utilisés par des millions d'utilisateurs dans des centaines de milliers d'applications à travers le monde. Y compris au sein de l'entreprise elle-même - dans diverses divisions d'Intel. Intel IPP fournit une accélération significative de la bibliothèque OpenCV. Au fait, un IPP Intel personnaliséavec les fonctions utilisées par OpenCV, sorti en 2015, est devenue la première version gratuite et gratuite d'IPP.
Intel IPP peut être trouvé dans les applications de reconnaissance et d'amélioration d'image dans tous les domaines, y compris la médecine; imprimantes, y compris 3D; vidéosurveillance numérique; véhicules autonomes; reconnaissance et synthèse de la parole; compression de données; télécommunications et jeux. IPP fonctionne partout - des serveurs aux appareils portables. On peut affirmer que si une machine à remonter le temps était inventée, son logiciel utiliserait certainement Intel IPP.
Histoire de l'IPP
Tout a commencé avec les bibliothèques de traitement du signal (SPL) et de traitement d'image (IPL) d'Intel, développées par Intel au centre nucléaire fédéral VNIIEF à Sarov (nous en avons parlé dans notre article sur OpenCV ).
En 1996 (ou 1997, selon divers témoins oculaires), au siège d'Intel Santa Clara, une réunion a eu lieu sur les futurs projets de développement de SPL et IPL avec la participation de conservateurs de projets américains et d'experts invités de Sarov, parmi lesquels se trouvait le futur architecte, inspirateur et chef de l'équipe IPP Boris Sabanin, ainsi que Sergey Kirillov, qui dirige actuellement les travaux sur la cryptographie IPP.
L'équipe Sarov a apporté sa liste de propositions, et l'une d'entre elles était d'ouvrir les interfaces des fonctions IPL et SPL de bas niveau pour les utilisateurs, car elles avaient déjà été implémentées et optimisées de toute façon, alors que certains utilisateurs n'étaient pas à l'aise avec les formats de données IPL, ils avaient déjà leurs formats d'image établis. Le prototype proposé de l'interface IPP, utilisant des structures plus simples par rapport à IPL / ISL, a été créé par Boris Sabanin lors d'une discussion littéralement sur une serviette. Mais à cette époque, la proposition de la partie russe, bien qu'elle n'ait pas été rejetée, n'a pas reçu beaucoup de soutien - elle était au milieu de la liste avec une faible priorité. Mais après quelques années, quelqu'un chez Intel s'en est souvenu (très probablement Shin Li, qui est devenu plus tard l '«évangéliste» d'Intel IPP) et les plans ont changé.
Un livre Intel IPP 2004 par Stewart Taylor, un participant à la réunion historique IPP (à l'époque un célibataire Stanford nouvellement embauché d'Intel) Le
travail a donc commencé sur les bibliothèques Intel Performance Primitives, qui ont ensuite été renommées Integrated Performance Primitives.
Une version interne d'IPP, appelons-la 1.0, a été créée en 1999. C'était plutôt une preuve de concept, un prototype pour prouver la viabilité du concept. Il n'a pas été publié en tant que produit, mais il a permis de définir et d'affiner le concept, l'architecture et les spécifications d'IPP. La première version publique porte immédiatement le numéro 2.0 et est sortie en avril 2002.
Jusqu'en 2009, la plupart des travaux sur les bibliothèques IPP étaient menés sous la direction de Boris Sabanin, qui peut à juste titre être considéré comme le parrain et l'âme de l'IPP. Il a mis beaucoup d'efforts dans le projet, a construit une équipe de spécialistes polyvalents, mais n'a malheureusement pas été à la hauteur du 20e anniversaire d'Intel IPP.
Peinture "Le Pont de la Tour Sarov" de Boris Sabanin, connue non seulement de l'IPP ( ici vous pouvez voir d'autres peintures de Sabanin, y compris son autoportrait)
Mais l'héritage d'IPL / ISL ne s'est pas limité à. Les primitives de cryptographie et de compression de données sont apparues presque immédiatement. Les expériences ont commencé dans le domaine de la vision par ordinateur, qui est ensuite devenu un projet avec OpenCV, utilisant l'accélération d'algorithmes utilisant des primitives dans le domaine ippCV.
Bien sûr, ce n'était pas la seule expérience et ramification de l'histoire de la création de bibliothèques. IPP a suivi le rythme de tous les Intel. Ainsi, par exemple, la cinquième version d'IPP, en plus de x86, supportait le processeur Intel XScale (architecture ARM) et Intel Itanium (IA-64)! Au fil des ans, IPP a inclus des composants tels que le rendu réaliste, les petites opérations matricielles, l'intégrité des données, les codecs vidéo et audio.
Cette fonctionnalité peut être utilisée maintenant, si vous le souhaitez, à l'aide du package IPP Legacy Libraries disponible en téléchargement.
De plus, les codecs vidéo IPP ont ensuite servi de base à un autre produit Intel bien connu - Intel Media SDKet le lancer de rayons a été implémenté dans le projet open source Intel Embree .
Parmi les expériences technologiques intéressantes dans le domaine de la structure IPP, on peut noter un exemple de pilote Windows pour démontrer la possibilité d'IPP fonctionnant en mode noyau, ainsi qu'une version d'IPP pour fonctionner sur des GPU Intel intégrés écrits en C pour Metal .
Curieusement, les numéros de version IPP sont d'abord passés dans l'ordre de 1 à 9, puis ont commencé à être désignés par l'année de sortie - 2017-2020.
L'équipe de développement Intel IPP en 2003
Au cours de l'existence de la famille de bibliothèques IPP, plus de 100 personnes ont participé à leur travail - à Sarov, Nizhny Novgorod et Moscou. Maintenant, le siège de l'IPP est situé à Nizhny Novgorod et semble très attrayant!
Décoration de sol IPP chez Intel
IPP n'est pas du tout une bibliothèque primitive!
Bien que le nom d'Intel IPP contienne le mot «primitif», et à première vue, il ne peut y avoir de difficultés fondamentales dans l'ensemble des «parties concepteur» pour créer des programmes productifs, qui en fait est IPP, la structure de ces bibliothèques n'est pas du tout triviale. Des solutions technologiques intéressantes ont été appliquées pour garantir des performances et une utilisabilité maximales de l'IPP.
Comme déjà mentionné, IPP contient des milliers de fonctions (et chaque fonction a plusieurs versions optimisées pour une architecture spécifique), ce qui conduit à d'énormes tailles de bibliothèques prêtes à l'emploi, ce qui n'est pas du tout un élément de la liste des avantages pour les utilisateurs d'IPP.
Par conséquent, l'IPP est collecté d'une manière spéciale. Les fichiers source, qui incluent un grand nombre de fonctions simples, sont coupés par un script spécial en plusieurs petits avant la compilation, une fonction par fichier. Et puis ces minifiles sont compilés. De plus, ils sont compilés non pas une fois, mais plusieurs fois - pour différentes architectures avec les indicateurs correspondants. Le résultat est plusieurs énormes bibliothèques statiques - pour chaque domaine IPP. Mais ces bibliothèques statiques sont collées ensemble à partir de très petits fichiers objets. Par conséquent, lorsque IPP est lié statiquement à une application, la taille de l'application augmente presque exactement de la taille des fonctions utilisées depuis IPP, et non de plus d'octets.
IPP dispose également d'un mécanisme pour générer des bibliothèques personnalisées basées sur des outils existants sans avoir à ouvrir le code source aux utilisateurs. À savoir, l'utilisateur sélectionne une liste de fonctions d'intérêt dans les fichiers d'en-tête, après quoi une petite bibliothèque dynamique avec uniquement les fonctions nécessaires et leurs dépendances est automatiquement créée par un script à partir d'énormes bibliothèques statiques. De plus, pour réduire davantage la taille, cette bibliothèque dynamique peut inclure des options d'assemblage pour ces fonctions non pas pour toutes les options matérielles, mais exclusivement pour une liste de plates-formes spécifiée par l'utilisateur.
Dans une situation où chaque pourcentage supplémentaire des performances des bibliothèques IPP compte, il devient très important de décider à quel niveau paralléliser le code: à l'intérieur des fonctions de la bibliothèque, ce qui est bon pour les appels IPP à partir d'un thread utilisateur, ou à l'extérieur, au niveau des applications utilisateur, ce qui est bon pour applications multithread qui séparent indépendamment le travail et les données pour IPP.
Comme les applications sont différentes et que les IPP sont également différents. À savoir, le package IPP comprend deux ensembles de bibliothèques en versions 32 et 64 bits: l'un est purement monothread à l'intérieur, et le second est avec la parallélisation interne d'un nombre important de fonctions à l'aide d'OpenMP (la liste exacte des fonctions est jointe dans les documents d'accompagnement). En outre, il existe une version supplémentaire pour les bibliothèques de traitement d'images - le "Threading Layer", qui est un add-on sur IPP monothread et utilise OpenMP ou Intel TBB pour la parallélisation externe du travail sur les images, qui sont divisées en fragments (tuiles) pour cela ... Le code source IPP Threading Layer est disponible dans le package IPP pour ceux qui veulent le plus de contrôle sur la façon dont leur code s'exécute simultanément.
Presque depuis la création de l'IPP, les développeurs ont dû s'inquiéter du problème que les pipelines de traitement d'image et de signal, constitués de fonctions IPP individuelles, fonctionnent plus lentement qu'ils ne le souhaiteraient. L'explication est simple: lors de l'appel de fonctions IPP, en règle générale, le chargement et le déchargement à partir du cache ou même de la mémoire se produisent, et cette opération peut s'avérer beaucoup plus coûteuse que les calculs réels. Cet effet est particulièrement perceptible lors du traitement de Big Data - pas celles que l'on appelle Big Data, mais par exemple des images FullHD (sans parler de 4K).
La décision de combiner plusieurs fonctions à l'intérieur d'IPP en une seule dans ce cas ne convient pas - alors au lieu de briques primitives, nous obtiendrons des détails fantaisistes du jeu "Tetris", qui seront problématiques à insérer dans les applications utilisateur, et la variété de ces combinaisons possibles dépassera toutes les limites raisonnables.
En conséquence, un module complémentaire C ++ sur IPP a été implémenté, qui a construit des graphiques de pipelines, découpé des images en morceaux, puis lancé une boucle parallèle qui n'a pas effectué une opération dans chaque thread, mais l'ensemble du pipeline IPP sur une tuile séparée. En fin de compte, bien sûr, les résultats sont restés cohérents. Tout d'abord, un prototype a été fabriqué, il a montré une accélération décente. Ensuite, un paramètre a été créé appelé DMIP (traitement d'image en mode différé). De plus, en 2011, lors de l'une des premières réunions du comité de normalisation OpenVX à Khronos, DMIP a été mentionné et chaleureusement soutenu par le comité étant donné la popularité des graphiques parmi les développeurs de matériel. Le standard OpenVX s'est donc avéré être basé sur la technologie des graphes. Pour diverses raisons, la norme OpenVX n'a pas reçu une popularité suffisante, mais le paradigme graphique est désormais pris en charge et développé par l'équipe d'API Intel Graph.Et comme l'API Graph est incluse dans OpenCV, OpenVINO, Movidius SDK, les technologies IPP ont un impact direct sur les normes de vision par ordinateur et les API modernes.
IPP - liens utiles
Encore une fois, voici les liens les plus importants de cet article.
- Page Intel IPP
- Intel Parallel Studio XE
- Intel System Studio
- IPP Crypto - projet open source
- Bibliothèques héritées IPP
Première personne Intel IPP
Donnons la parole aux personnes qui ont joué un rôle important dans le destin des Intel Performance Primitives au fil des ans.
Vladimir Dudnik, chef de l'équipe Intel IPP en 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, .