mercredi 12 octobre 2011

Des puces massivement parallèles pour les tablettes de demain

La demande en puissance de calcul des tablettes et des smartphones ne cesse d’augmenter. Si les processeurs mobiles profitent des rapides progrès dans les finesses de gravure pour s’offrir des cœurs supplémentaires tous les ans, la start-up « Adapteva » propose de leur donner un sérieux coup d’accélérateur. En utilisant une finesse de gravure 28nm en « low power », un processeur mobile épaulé par une puce « Epiphany » pourrait avoir la puissance d’un ordinateur portable haut de gamme pour une consommation d’à peine 1W.
Les cœurs sur la main
Le GF100 "Fermi" de NVIDIA
Le multicore c’est bien. Mais le « many-core » c’est mieux ! La différence, pas forcément évidente, entre les deux tient tout d’abord aux nombres de cœurs bien sûr. Les processeurs multicore grand public affichent 4 cœurs aujourd’hui, bientôt 8, pendant que les puces « many-core » veulent en concentrer plusieurs dizaines ou centaines. D’où l’appellation de « cloud chips », des processeurs qui regrouperaient un véritable réseau d’unités de traitement comme le « cloud-computing » regroupe des réseaux abstraits de machines à la disposition de l’utilisateur. En fait, tout possesseur d’une carte graphique dédiée possède déjà un « many core chip » : le GPU. Par exemple : le GPU d’une carte graphique Geforce 460 regroupe 336 cœurs ! Ces derniers pouvant aussi bien dessiner des hordes de mutants sur votre écran que calculer la dynamique d’un amas de galaxies…

Adapteva, le roi de l’Epiphany
Les 50 coeurs de l'Intel Knights Corner
Le concept d’Adapteva est conceptuellement proche des divers GPGPU, en particulier de Knight’s Corner d’Intel (anciennement Larrabee). Le processeur « Epiphany » est une matrice pouvant en regrouper de 16 à 4096 cœurs ! Chaque cœur dispose d’une ALU (pour les entiers et la logique), d’une FPU (pour les calculs en virgule flottante) et d’une mémoire locale de 32Ko. De plus, chacun dispose d’un véritable « routeur », permettant aux données d’être communiquées d’un cœur à un autre et jusqu’à la mémoire centrale en voyageant sur la grille comme sur un réseau d’ordinateurs. La puce sera gravée en 28nm et le plus intéressant sera son efficacité énergétique : seulement 1W pour 70Gflops ! Pour vous donner un ordre d’idée, un processeur de portable (le mien pour ne rien vous cacher) Core i7 720 QM développe 23 Gflops quand il est bien fâché, mais consomme près de 45W…

L'architecture de l'Epiphany
Une galette à partager (je sais je suis lourd…)
Schéma de principe de l'AMD Fusion
L’Epiphany n’est pas destiné à être utilisé seul, mais en  tant que coprocesseur. Du coup, on se retrouve dans une configuration très classique de calcul parallèle hybride. Quand vous utilisez votre Geforce (ou votre Radeon, pas de jaloux…), programmée en CUDA ou en OpenCL pour faire des calculs très très sérieux, votre CPU reste chef d’orchestre et votre GPU agit comme « coprocesseur ». L’implantation du GPU sur le même die que le CPU n’est pas non plus nouvelle, car c’est exactement le principe des APU « Fusion » d’AMD. Dans le monde des tablettes cependant, ce système n’est pas encore répandu. C’est un objectif clair pour beaucoup de constructeurs de GPU mobile néanmoins. NVIDIA le premier, envisage de sortir bientôt des GPU compatible CUDA (et probablement OpenCL) au sein même de sa ligne Tegra. Le support de l’OpenCL est par ailleurs déjà présent chez Ziilabs et dans les GPU Mali T604.
Si l’Epiphany propose une efficacité énergétique intéressante, il est clair qu’il aura à supporter une concurrence féroce dans le milieu des tablettes.
Un NVIDIA Tesla 1060: quasiment le TFlops !
Quant à celui des serveurs, il faudra compter là encore avec NVDIA, dont les processeurs Tesla sont de plus en plus utilisés en calcul hautes performances et sur d’autres petits nouveaux, comme Tilera, qui propose des solutions analogues.
Pour ne rien arranger, on ne sait pas encore quels langages seront supportés par Adapteva. Il est fait mention de « C standard », mais c’est étonnant, car le justement le C « standard » n’est pas adapté à la programmation massivement parallèle. Il est peu probable que des programmeurs ayant investi beaucoup de leur temps dans l’apprentissage de CUDA ou d’OpenCL aient follement envie d’apprendre (encore) une nouvelle variante de C…
Quoi qu’il en soit pour Adapteva, il est possible que dans deux ans, votre tablette mette la honte à votre PS3, et ça, c’est réjouissant.

Addendum : Mais au fait, pourquoi faire si compliqué ?
Comme évoqué plus haut, il est facile et pas très couteux d’avoir un GPU correct proposant une bonne centaine de Gflops dans son ordinateur personnel (une carte modeste dotée de 96 cœurs se trouve autour de 60€, bien moins que le prix d’un dual-core Sandy Bridge d’Intel). Alors avec tant de coeurs à porté de main, pourquoi diable votre Core i5 ou votre Tegra 2 flambant neuf n’en regroupent-ils que … 2 ? Pourquoi n’avons-nous pas simplement une seule puce avec 100 ou 200 cœurs dans notre machine et basta ?
Une partie de la réponse est assez simple : ce n’est pas le tout d’avoir plein de cœurs, il faut les utiliser et cela demande aux programmeurs de changer profondément leurs manières de travailler. Des langages spécifiques existent pour programmer ces puces particulières :

  • CUDA : Un des premiers et des plus simples, il ne fonctionne que sur les puces NVIDIA.
  • OpenCL : Un standard du Kronos Group (comme OpenGL), plus lourd à utiliser, mais de loin le plus ouvert (toutes les puces, toutes les plateformes).
  • DirectCompute : Un standard Microsoft pour toutes les puces, mais réservé à Windows.

L'accès à la mémoire devient vite un problème...
Une fois le langage choisi, les ennuis continuent, car toutes les tâches ne peuvent pas (ou pas facilement) être découpées en petites parties indépendantes pour être envoyées simultanément sur des centaines de cœurs. Même si elles les sont, il faudra alors « nourrir » tous ces cœurs avec des données issues de la mémoire centrale, avec à la clef un engorgement des bus de données. On a alors recours à plusieurs niveaux de mémoire (locale, partagée, etc.) ce qui complique encore la tâche du programmeur.
Enfin, les cœurs présents dans un GPU et ceux présents dans un processeur central, un CPU, sont architecturés de manières très différentes. Ils ne sont pas « bons » pour les mêmes choses. Les cœurs d’un GPU sont très simples, optimisés pour du calcul (souvent vectoriels) sur des nombres en virgule flottante. Ils sont cadencés à des fréquences peu élevées et sont très lents sur des codes comportant de nombreux sauts ou des tests logiques.
Un CPU, au contraire, devra être bien plus polyvalent et se comporter le mieux possible vis-à-vis de tout type de code. D’où des puces largement « pipelinées » (fréquences élevées), superscalaires (plusieurs instructions exécutées en simultané), gérant efficacement un gros cache-mémoire, etc. Bref, elles sont bien plus complexes, nécessitent beaucoup plus de transistors ce qui ne permet pas d’en caser des milliers sur un die de quelque cm² au plus.
C’est pourquoi le paradigme utilisé actuellement est celui du calcul « hybride ». Un CPU est utilisé pour les tâches courantes et un coprocesseur spécialisé pour des tâches lourdes et spécifiques (vectorielles et parallélisables et général). Cependant, à moyen terme, on pourra peut-être assister à une convergence, voire à une fusion CPU-GPU.

Le Tianhe-1A, un super ordinateur chinois basé sur des Intel Xeons et des NVIDIA Tesla: 2.5 PetaFlops, à peine la puissance de l'iPad 15...
 
 http://www.tablette-tactile.net/actualite-generale/des-puces-massivement-paralleles-pour-les-tablettes-de-demain-110682/?utm_source=Newsletter+Tablette-Tactile.net&utm_medium=email&utm_campaign=2711dae3d9-RSS_EMAIL_CAMPAIGN

Aucun commentaire:

Enregistrer un commentaire