Présentation
EnglishRÉSUMÉ
Cet article décrit les extensions SIMD des jeux d'instructions des microprocesseurs. Les différentes extensions SSE et AVX de IA-32 et Intel64 (Intel), les extensions Neon d'ARM et les différentes variantes d'IBM (Altivec) sont prises comme exemple. L'article montre les spécificités de l'arithmétique entière, du traitement des structures conditionnelles, des accès mémoire. Il montre comment les extensions comprennent des extensions naturelles des instructions scalaires, et des instructions ad hoc destinées à des applications particulières. Ces instructions s'utilisent soit en aidant le compilateur à «vectoriser», soit en utilisant des intrinsèques, qui sont des appels de fonctions correspondant aux instructions à insérer dans un programme C ou C++.
Lire cet article issu d'une ressource documentaire complète, actualisée et validée par des comités scientifiques.
Lire l’articleAuteur(s)
-
Daniel ETIEMBLE : Ingénieur INSA Lyon - Professeur émérite à l'université Paris Sud
-
Lionel LACASSAGNE : Ingénieur EPITA - Maître de conférences à l'université Paris Sud
INTRODUCTION
Cet article décrit les caractéristiques principales des extensions SIMD des jeux d'instructions des microprocesseurs modernes qui ont été introduites et développées depuis les années 1990. Les opérations arithmétiques et logiques effectuées par les instructions scalaires des jeux d'instructions s'effectuent sur la taille maximale des registres des processeurs, 32 ou 64 bits. Or, les programmes peuvent travailler sur des données de taille inférieure, comme les octets (8 bits), les mots de 16 bits, ces données étant signées ou non signées. C'est le cas notamment pour le traitement d'images, le traitement du signal et de nombreuses autres applications. Le principe des instructions SIMD est donc d'utiliser des registres de plus grande taille (128, 256 ou 512 bits) et d'effectuer la même opération sur des vecteurs contenant plusieurs éléments 8 bits, 16 ou 32 bits pour les nombres entiers, 32 ou 64 bits sur les nombres en représentation flottante.
Les caractéristiques de ces extensions sont illustrées à partir des plus utilisées : SSE à SSE4.2, AVX et AVX2 pour les jeux d'instructions IA-32 et Intel 64 d'Intel, Neon et Neon2 d'ARM, Altivec et ses différentes variantes IBM.
Les instructions arithmétiques flottantes ne posent aucun problème. Le problème des retenues pour les instructions arithmétiques entières est détaillé. Les instructions SIMD effectuant la même opération sur tous les éléments d'un vecteur, les structures conditionnelles if-then-else impliquent un traitement particulier. Les instructions mémoire doivent accéder à des éléments situés à des adresses mémoire successives, ce qui implique des traitements particuliers lorsque ce n'est pas le cas. L'exemple classique est le cas de données rangées en mémoire sous forme de tableaux de structures (AoS) qu'il faut transformer en structures de tableaux (SoA) pour permettre des calculs SIMD.
La plupart des instructions SIMD sont des extensions naturelles des instructions scalaires des jeux d'instructions accompagnées des instructions de manipulation de données pour faciliter le traitement SIMD. Ces instructions s'accompagnent d'instructions ad hoc destinées à des applications particulières. Les extensions SIMD ont aussi été appelées extensions multimédias, car elles avaient initialement pour objectif de rendre compétitifs les processeurs généralistes sur les applications multimédias, les applications du traitement de signal et de sécurité. Des exemples typiques d'instructions ad hoc visent la détection de mouvement, le calcul sur les nombres complexes, la cryptographie, etc.
Cet article détaille également comment utiliser ces instructions. Une possibilité est d'aider le compilateur à « vectoriser », c"est-à-dire à les utiliser. L'autre approche consiste à utiliser des intrinsèques à insérer dans un code C ou C++ : ce sont des appels de fonctions aux instructions SIMD à utiliser notamment pour l'arithmétique entière ou lorsque des transformations de haut niveau qui ne sont pas à la portée du compilateur sont nécessaires.
Les extensions 512 bits récentes lèvent certaines limites des extensions SIMD en permettant un traitement partiel des éléments des vecteurs selon un masque et en permettant des accès mémoire à des adresses non consécutives. Ces évolutions rapprochent les extensions SIMD des caractéristiques des processeurs vectoriels des années 1980.
MOTS-CLÉS
instructions SIMD SSE AVX Neon Alvitec vectorisation intrinsèque
DOI (Digital Object Identifier)
Cet article fait partie de l’offre
Technologies logicielles Architectures des systèmes
(240 articles en ce moment)
Cette offre vous donne accès à :
Une base complète d’articles
Actualisée et enrichie d’articles validés par nos comités scientifiques
Des services
Un ensemble d'outils exclusifs en complément des ressources
Un Parcours Pratique
Opérationnel et didactique, pour garantir l'acquisition des compétences transverses
Doc & Quiz
Des articles interactifs avec des quiz, pour une lecture constructive
Présentation
1. Jeux d'instructions et types de données
Les langages de haut niveau définissent un certain nombre de types de données, à la fois pour les entiers et les flottants. Pour les entiers, on trouve les variantes signées et non signées sur 8 bits, 16 bits, 32 bits et 64 bits. Pour les flottants, on dispose des flottants 32 bits (simple précision) et 64 bits (double précision). Cette panoplie de formats différents correspond au fait que les besoins des applications sont différents :
-
le traitement d'images va travailler sur des octets (8 bits) avec un octet pour le traitement en niveaux de gris, trois octets pour le traitement couleur ;
-
le traitement du signal utilise généralement des données 16 bits, etc.
Avec les versions classiques, dites scalaires, des jeux d'instructions, les opérations arithmétiques sur les données entières existent uniquement en un seul format, qui correspond au nombre de bits des registres du jeu d'instructions : 32 bits pour les processeurs 32 bits, 64 bits pour les processeurs 64 bits. Lorsque les accès mémoire se font avec un format plus court, il y a extension à 32 bits ou 64 bits, soit par extension de signe pour les données signées, soit par extension de zéros pour les données non signées. Dans les jeux d'instructions RISC, il existe une instruction de chargement (load ) spéciale par type de données entières accédé.
On a donc une situation un peu paradoxale : une opération arithmétique ou logique sur deux octets est réalisée par une unité arithmétique 32 ou 64 bits.
Par ailleurs, les applications multimédias (audio, graphique, vidéo, etc.) ont pris de plus en plus d'importance ces trente dernières années. Alors qu'elles étaient exécutées auparavant sur des processeurs spécialisés comme les processeurs de traitement du signal, elles sont devenues des applications de choix pour les processeurs d'usage général. C'est pourquoi des extensions SIMD, appelées également instructions multimédias, ont été ajoutées dans pratiquement tous les jeux d'instructions existants depuis leur apparition au milieu des années 1990.
Les extensions SIMD reprennent la terminologie « Single Instruction Multiple Data » de la classification de Flynn pour les machines parallèles : une instruction effectue la même action sur plusieurs données, selon le principe illustré dans la figure 1. La même...
Cet article fait partie de l’offre
Technologies logicielles Architectures des systèmes
(240 articles en ce moment)
Cette offre vous donne accès à :
Une base complète d’articles
Actualisée et enrichie d’articles validés par nos comités scientifiques
Des services
Un ensemble d'outils exclusifs en complément des ressources
Un Parcours Pratique
Opérationnel et didactique, pour garantir l'acquisition des compétences transverses
Doc & Quiz
Des articles interactifs avec des quiz, pour une lecture constructive
Jeux d'instructions et types de données
BIBLIOGRAPHIE
-
(1) - INTEL - Intel® 64 and IA-32 architectures software developer manuals. - http://www.intel.com/content/www/us/en/ processors/architectures-software- developer-manuals.html (page consultée le 4 décembre 2014).
-
(2) - ALTIVEC - AltiVec technology programming interface manual. - (1999). http://www.freescale.com/files/32bit/doc/ ref_manual/ALTIVECPIM.pdf (page consultée le 4 décembre 2014).
-
(3) - ARM Infocenter - The architecture of digital world. - http://www.infocenter.arm.com/help/ index.jsp (page consultée le 4 décembre 2014).
-
(4) - KUAH (K.) - Motion estimation with Intel® streaming SIMD extensions 4 (Intel® SSE4). - Intel software solutions group (2008). https://www.software.intel.com/en-us/ articles/motion-estimation-with-intel- streaming-simd-extensions-4-intel-sse4 (page consultée le 4 décembre 2014).
-
(5) - SIEWERT (S.) - Using Intel® streaming SIMD extensions and intel® integrated performance primitives to accelerate algorithms. - Inter developer zone (2009). https://www.software.intel.com/en-us/...
Cet article fait partie de l’offre
Technologies logicielles Architectures des systèmes
(240 articles en ce moment)
Cette offre vous donne accès à :
Une base complète d’articles
Actualisée et enrichie d’articles validés par nos comités scientifiques
Des services
Un ensemble d'outils exclusifs en complément des ressources
Un Parcours Pratique
Opérationnel et didactique, pour garantir l'acquisition des compétences transverses
Doc & Quiz
Des articles interactifs avec des quiz, pour une lecture constructive