Accueil » Actualité » NEON, Tegra, Flash et WebM : explications

NEON, Tegra, Flash et WebM : explications

Image 1 : NEON, Tegra, Flash et WebM : explications

Après notre passage au MWC, nous avons pu discuter avec quelques constructeurs de l’intérêt du jeu d’instructions SIMD « Neon » et de son intégration dans les puces ARM actuelles. Expliquons.

NEON, c’est quoi ?

NEON (alias MPE, Media Processing Engine) est un jeu d’instructions SIMD — Single Input Multiple Data — destiné aux puces ARM. En simplifiant, le SIMD permet d’appliquer une instruction sur plusieurs données à la fois, ce qui permet d’accélérer certains traitements de façon importante, comme le décodage vidéo. Un exemple de jeux d’instructions SIMD est le SSE, proposé en diverses versions dans les processeurs x86 depuis une dizaine d’années. NEON est généralement intégré dans les puces ARM de type ARMv7 : les Cortex A8, les Cortex A9, le Scorpion de Qualcomm, utilisent tous NEON. Tous ? Non. Tegra 2, le SoC de NVIDIA, n’intègre pas NEON.

L’intérêt de NEON

Dans la pratique, NEON est très utilisé. Les raisons sont multiples, mais une est intéressante : les instructions SIMD sont utilisées pour pallier les faiblesses de la FPU des Cortex A8. En effet, si le Cortex A9 a une unité à peu près correcte au niveau des performances, celle du très utilisé Cortex A8 est par contre très lente. La raison principale est qu’elle n’est pas pipeliné, ce qui limite très fortement le nombre d’instructions exécutées par cycle. Dans les faits, NEON est donc utilisé pour du décodage vidéo ou de l’affichage 2D (le SIMD est très efficace pour filtrer une image) mais aussi pour remplacer la FPU classique. La société ARM nous a par exemple expliqué que les routines de décodage de WebM, le format vidéo de Google, contenaient plus de 10 000 lignes de code utilisant NEON. Et l’implémentation Android de Flash 10.1 nécessite aussi NEON pour fonctionner.

Le problème de NVIDIA

Le dilemme de NVIDIA a été le suivant sur Tegra 2 : intégrer NEON, qui augmente la taille du core d’environ 30 %, ou s’en passer et optimiser certains logiciels pour Tegra 2 et la FPU du Cortex A9, au détriment de la compatibilité. C’est le second choix qui a été fait, et NVIDIA a dû travailler avec Adobe pour effectuer certaines parties du décodage sur la carte graphique dans Flash pour Android, mais la société a visiblement changé d’avis depuis. En effet, « Tegra 3 », qui porte encore le nom de code Kal-El, sera compatible NEON, c’est une des petites différences entre la puce actuelle et son successeur. La taille du core devrait donc augmenter, mais les performances, dans certains cas, être meilleures. Point intéressant, nous avons rencontré NVIDIA avant la présentation de Kal-El et le responsable nous a bien indiqué que le rapport place/intérêt de NEON rendait son utilisation caduque…

Reste que le raisonnement original de NVIDIA se tient : la société pousse les développeurs à utiliser les fonctions de décodage vidéo du GPU et pour des calculs en flottant, la FPU du Cortex A9 est plus performante que NEON. Mais, comme souvent dans l’informatique la rétrocompatibilité gagne, même si elle implique quelques sacrifices.