jeudi 27 octobre 2011

SoC : anatomie d’une puce, pour tout savoir sur les entrailles de votre tablette !

Au cœur de toute tablette ou de tout Smartphone il y a un SoC, un « system on chip ». Qu’est-ce qu’un SoC ? Que recèle-t-il ou que recèlera-t-il dans un futur proche ? L’objet de ce dossier est d’essayer d’y voir un peu plus clair sur ce sujet quelque peu technique.

Dans les appareils mobiles, l’espace et l’énergie sont limités, ainsi l’intégration est-elle fondamentale. Une tablette est une machine très complexe, il faut gérer la vidéo, le son, la connectivité Wifi/Bluetooth, l’écran tactile, parfois même la téléphonie, etc. Chacune de ces fonctions nécessite une prise en charge par des circuits spécifiques. Le but est d’avoir le moins de puces possible, d’où l’intégration dans un même boitier et souvent sur un même die (c’est à dire gravé sur un même support) d’un maximum de fonctions.

Sur un SoC typique peut trouver :

  • Un ou plusieurs cœurs CPU (Souvent ARM)
  • Un plusieurs cœurs GPU (Power VR, Mali, Geforce etc.)
  • Le contrôleur-mémoire
  • Des DSP pour le traitement de l’image, du son, etc.
  • Des contrôleurs de périphériques (pointage, GPS, etc.)
  • Des circuits vidéo auxiliaires (sortie HDMI, etc.)
  • Un baseband (pour la téléphonie)
  • Etc.
Sans minimiser l’importance des autres composants, on s’intéressera ici principalement aux différents CPU et GPU qui peuvent être présent dans les SoC du marché.

En effet, un SoC est comme un puzzle que chaque constructeur compose à sa guise. Par exemple, Apple décide que son A5 contiendra un Cortex A9 double cœur comme CPU et un GPU PowerVR 543 double cœur. Apple doit ainsi acheter une licence à ARM pour utiliser son design Cortex et une licence à Imagination technologie pour son design PowerVR. Ensuite, il doit faire les plans précis de son SoC pour le transmettre à un fondeur, qui va effectivement fabriquer la puce. Ici, ce sera Samsung.

Chaque « constructeur » crée ainsi son propre circuit en fonction de briques existantes et le fait réaliser par un prestataire qui a les usines adéquates (s’ils ne peuvent le faire eux-mêmes…).

Cela dit, les constructeurs peuvent rajouter leurs touches personnelles aux designs existants, Qualcomm par exemple avec ses architectures Scorpion et Krait. Le paysage des SoC n’est ainsi pas toujours très lisible. Le but de ce qui suit est d’en faire une petite synthèse en comparant les CPU et GPU des SoC présents et futurs des principaux constructeurs, sans aucune prétention à l’exhaustivité.

Les CPU (Central Processing Unit)

Pratiquement toutes les tablettes actuellement en circulation ont un point commun, c’est l’architecture de leur processeur central : ARM. Ils sont de la même famille en quelque sorte, ils partagent des structures et des langages similaires. L’histoire d’ARM est très ancienne puisqu’elle commence en 1978, à l’époque de la fondation d‘Acorn Computer. Cette société britannique fondée à Cambridge a produit des ordinateurs jusqu’au milieu des années 80. Ces derniers fonctionnant avec des processeurs « maison », les « Acorn RISC Machines ». A la suite de difficultés financières, l’entreprise a progressivement cessé de fabriquer des ordinateurs pour se consacrer seulement à la commercialisation de leur architecture « Advanced RISC Machine ». Aujourd’hui « ARM » commercialise les « plans » de toute une gamme de microprocesseurs que l’on retrouve absolument partout.

Car on n’a pas tout le temps besoin d’un Xeon ou d’un Opteron, surtout dans un téléphone portable ou une Game Boy. Or les processeurs ARM ne sont pas très puissants, mais ils sont, et de très loin, plus petits et plus économes en énergie que les modèles d’Intel ou d’AMD. Ils sont aussi moins chers et fleurissent ainsi dans une incroyable variété de machines, mobiles (Nintendo DS, Smartphones, Baladeurs) ou non (NAS, Routeurs etc.).

C’est le boum des tablettes et des Smartphones qui met les processeurs ARM sur le devant de la scène. Ces derniers sont nombreux et en évolution rapide. Leurs architectures se complexifient sans cesse et deviennent comparables à celle des processeurs pour ordinateur « de bureau ». Pour plus de détails sur certains termes employés ci-dessous et sur l’architecture des processeurs en général, on se reportera au dernier paragraphe.

La gamme « Cortex »

Les Cortex sont des processeurs 32 bits comprenant le jeu d’instruction ARMv7, une évolution de l’ARMv6, présent dans les puces « ARM11 » de l’iPhone 3 G par exemple. La gamme est constituée des Cortex A8, A9 et A15. Elle marque une réelle évolution dans la complexité de l’architecture des processeurs embarqués.

On se souvient que l’iPhone 3GS passait pour être 2 fois plus rapide que l’iPhone 3G. La raison principale étant que le 3GS possédait un Cortex A8 au lieu d’un ARM11. Or le Cortex A8 est « 2 issue », c’est-à-dire qu’il peut exécuter deux instructions pendant dans un même cycle d’horloge.

Malheureusement, il ne peut le faire que si les instructions sont indépendantes, car il ne peut pas réordonner les instructions. Il est dit « in order ». Il possède également un pipeline plus long (13 étapes) qui lui permet de briguer de plus hautes fréquences (1Ghz en 45nm).

Le Cortex A9, quant à lui, est aussi « 2 issue » mais en plus, il est « out of order ». Cela signifie qu’il peut réorganiser les instructions pour tirer un meilleur profit de son architecture superscalaire. De plus, il supporte le multi-core (jusqu’à 4 cœurs) et atteint les 1.2Ghz à 40nm. Le NVidia Tegra 2 et l’Apple A5 sont des exemples très populaires de Cortex A9.

Le Cortex A15 promet d’être un petit monstre : « 3 issues » out of order, quadri-cœur avec un pipeline de 15 étages… Le Texas Instrument OMAP5, le NVIDIA Tegra 3 et, peut-être, l’Apple A6 seront de ce type.

La Gamme « Snapdragon » de Qualcomm

Qualcomm est une entreprise très importante dans le domaine de la télécommunication. Elle produit quantité de puces pour téléphones mobiles et est à l’origine de la technologie CDMA, le protocole de 3G le plus utilisé à travers le monde (l’UMTS/HSPDA est surtout utilisé en Europe). Elle produit aussi les CPU de la ligne « Snapdragon », les S1, S2 et S3, équipés de cœurs « Scorpion », et S4, utilisant la nouvelle architecture « Krait ». Scorpion et Krait ont des architectures propriétaires, mais sont compatibles avec le jeu d’instruction ARMv7. Un peu comme AMD fabrique des processeurs x86 mais avec une architecture différente de celle d’Intel.

Les processeurs « Scorpion » se situent en quelque sorte entre les Cortex A8 et A9. Ils sont « 2 issue », dotés d’un pipeline plus long (10 étapes) que le A9, ils ne sont cependant que partialement « out of order ». Leurs fréquences d’horloge peuvent aller jusqu’à 1,5Ghz. Ils sont présents dans de très nombreux téléphones ainsi que dans le Lenovo LePad et le HP Touchpad.

La nouvelle génération « Krait », sera quand à elle complètement « out of order », et « 3-issue » avec un pipeline de 11 étapes. Un processeur assez comparable au Cortex A15 somme toute. Elle est attendue pour 2012.

Les Outsiders : Intel et AMD

C’est toujours un peu bizarre de placer Intel dans le camp des « outsiders » et pourtant, il est totalement absent du marché pour le moment. Intel, comme AMD fabrique des microprocesseurs x86, utilisé jusqu’à présent sur les PC « de bureau ». L’architecture x86 est très ancienne, puisque que son origine se retrouve dans le 8008 qui fut le premier microprocesseur 8 bits de l’histoire, lui-même faisant directement suite au 4004 qui fut tout simplement le premier microprocesseur de l’histoire tout court ! À l’époque, l’architecture x86 était relativement complexe : on parlait alors de design CISC pour « Complex Instruction Set Computer ». Des alternatives (Alpha, MIPS, PowerPC, ARM…) apparurent assez vite et se basaient sur un jeu d’instructions simples et uniformes, mais incompatibles avec le standard x86. Intel a fait le choix stratégique de préserver la rétrocompatibilité de ses processeurs. Ce choix lui a permis d’accumuler une logithèque et une base d’utilisateurs immense au fil des années et c’est probablement une des raisons de son succès. Malheureusement, on ne peut pas être gagnant sur tous les fronts. La simplicité des designs RISC (pour « Reduced Instruction Set Computer »), concurrents à Intel, s’est révélée cruciale pour fabriquer des processeurs compacts, économes et bien adaptés à la mobilité. Dans ce domaine, c’est ARM qui a fini par s’imposer, au détriment d’Intel, dont ça n’a jamais vraiment été le cœur de métier. Depuis quelques années cependant, Intel tente de refaire son retard avec ses processeurs Atom. Il faut dire que le « handicap » de la rétrocompatibilité x86 n’est plus aussi lourd qu’il y a 10 ans et le savoir-faire de ses usines, qui seront bientôt en mesure de graver des CPU « trigate » en 22nm, pourront largement le compenser.

Intel pari donc sur les Atom de la série « Medfield » puis « Silvermont » pour conquérir des parts de marché en 2012. On ne sait pas encore grand-chose sur les détails de l’architecture Medfield sinon qu’elle sera gravée en 32nm.

Pour AMD, frère ennemi d’Intel dans la famille x86, c’est la plateforme « Fusion » qui pourra se révéler intéressante dans les tablettes. AMD ayant fait le rachat d’ATI en 2006, il peut désormais fabriquer des puces incluant CPU et GPU. Ces dernières, issue des Radeon série 6200 sont d’ailleurs, pour le moment, bien plus efficaces que les GPU intégrées d’Intel. Fort de son architecture CPU basse consommation « Bobcat », l’avènement de Windows 8 sur les tablettes lui permettra peut-être de proposer des alternatives intéressantes, puisque compatibles avec toute la logithèque PC.

Les GPU (Graphics Processing Unit)

Comme les pour les CPU, il existe plusieurs modèles de GPU possibles pour constituer un SoC. En règle générale, les GPU sont constituées de multiple unités de calcul capables d’exécuter de tous petits programmes: les « shaders », décrivant comment rendre les pixels d’une scène en fonction de l’éclairage et des textures. Le nombre de ses unités, leurs fréquences et leurs sophistications vont conditionner la fluidité et la qualité de l’image. Tous les GPU du monde mobile sont compatibles avec l’API OpenGL ES, et certains (comme les PowerVR) le sont aussi avec des versions de DirectX (requis pour faire fonctionner Windows). En plus des scènes 3D et des effets graphiques de l’interface du système d’exploitation, les GPU accélèrent aussi le décodage de la vidéo. Le 1080p « high profile » (équivalent au Blu ray) est à portée de main. D’autres tâches, par exemple l’accélération des graphismes vectoriels (OpenVG) ou carrément le calcul parallèle (OpenCL) sont parfois aussi de la partie.

PowerVR

Dans les années 90, PowerVR (Imagination Technologie), était un sérieux concurrent des 3Dfx dans le coeur des gamers PC. Elle a aussi fait le bonheur des joueurs sur Dreamcast ! Pourtant, elle a peu à peu disparu des machines de salon pour s’épanouir dans les téléphones mobiles, les PDA, et maintenant les tablettes.

Les PowerVR utilisent des shader dit « USSE/USSE2 » pour « Universal Scalable Shader Engine », on en retrouve de 1 à 16 selon les modèles. On notera par ailleurs que les GPU aussi peuvent être multicores. Par exemple, le SGX543MP2, le GPU de l’Apple A5 est dual core, il possède un total de 32 cœurs. La série actuellement employée est la série 5, celle des SGX53X et SGX54X, déclinées en configurations 1 à 4 cœurs (la PS VITA, par exemple aura droit à un SGX543MP4 !). Ces puces sont compatibles OpenGL 2.x et DirectX 9 ce qui les rend compatibles Windows. On a d’ailleurs déjà vu des puces PowerVR dans les Intel Atom Z550. La future Serie 6 (Rogue) serait lancée en 2013 dans les SoC Nova de ST-Ericsson. Ci-dessous, Infinity Blade 2, optimisé pour le SGX543MP2 (iPhone 4S).

Adreno

ATI développait en son temps des solutions mobiles, les ATI Imageon (quelqu’un a eu un Toshiba E800 ??). Après le rachat par AMD, la branche Imageon a été cédée à Qualcomm qui l’a rebaptisée Adreno. Ces solutions devinrent les GPU de leurs puces Snapdragon. Les modèles actuellement utilisés sont les Adreno 220 (couplée avec « Scorpion ») et 225 (avec « Krait »). Ci dessous, une démo du Adreno 220.

Mali

Mali est la solution GPU proposée par la société ARM elle-même. Elle est compatible OpenGL ES 2.0, mais pas DirectX, et supporte les configurations 4 cœurs (Mali MP4). La dernière version disponible est le MALI 400MP4 utilisée par Samsung pour ses SoC Exynos (que l’on retrouve dans les Galaxy S2).

Le MALI T604 devrait être quatre fois plus rapide et supporter OpenCL ! Une partie des calculs lourds pourront ainsi être déportés du CPU sur le GPU. Ci dessous, une démo du ARM MALI 400.

Geforce

Les GPU geforce de NVIDIA sont bien connues des gamers PC. Des versions lights se retrouvent dans les SoC de la marque: les Tegra. La Geforce ULP (Ultra Low Power) d’une puce Tegra 2 possède 8 shaders compatibles OpenGL ES 2.0. Le Tegra 3 en comprendra 12. Les unités du Tegra 2 sont analogues à des Geforce 6 (de 2004) alors que celles du Tegra 3 seront proches des Geforce 8 (de 2006). Ci dessous, “Glowball”, la démo du Tegra 3.

Un autre petit tableau: qui fait quoi ?

Constructeur SoC CPU GPU Exemples de machines
Apple

A4, A5

Cortex A8, A9 (1Ghz)

PowerVR SGX535, SGX543MP2

iPad, iPad 2

NVIDIA

Tegra 2, Tegra 3

Cortex A9 (1Ghz / 1,2Ghz ?)

Geforce ULP

Asus Transformer et Transformer Prime

Texas Instrument

OMAP 4460, OMAP 5

Cortex A9, Cortex A15 (1,2-1,5Ghz)

PowerVR SGX 540, SGX544

Archos 101 (Gen9), Kindle Fire

Qualcomm

Snapdragon S3, S4

Scorpion, Krait (1,5Ghz – 2,5Ghz)

Adreno 220, 225

HP Touchpad (Scorpion)

Samsung

Exynos 4210, 4212

Cortex A9 (1,2 – 1,5Ghz)

ARM Mali 400MP4

Samsung Galaxy S2

Intel

Atom

Medfield, Silvermont

PowerVR ? GMA ?

Tablettes Windows 8 ?

AMD

Fusion C-30, C-50 etc.

Bobcat (64 bits 1Ghz)

Radeon 6200

Tablettes Windows 8 ?

Ce tableau est loin d’être exhaustif, de nombreux acteurs ne sont pas cités : NEC, Marvell, Freescale, VIA, etc. Il représente juste les principaux acteurs du marché et fait une place aux deux challengers possibles de 2012 – 2013.

Et les performances ?

Vu la complexité de chaque SoC, comparer les performances de chacun est loin d’être évident. Même de manière empirique, les résultats dépendent beaucoup du type de tâche et du degré d’optimisation des logiciels. Il faut donc rester très prudent quant à la fiabilité et à la pertinence de tels résultats comparé à une utilisation quotidienne. Néanmoins, ci-dessous, quelques résultats Coremark comparant les CPU de : l’Apple A5, le TI OMAP 4430, le Qualcomm Snapdragon S3, le NVIDIA Tegra 2 et le NVIDIA Tegra 3.

Bon, une chose est sûre, vous n’avez pas fini de faire des économies afin renouveler votre matériel pour toujours plus puissant, plus fin, plus léger, plus autonome !

Ce looong dossier s’achève, n’hésitez pas à lire ce qui suit si vous voulez éclairer certains termes ou certaines notions techniques utilisées plus haut.

Addendum : Un peu plus de technique… (youpi !)

Ce n’est peut-être pas complètement évident pour nous, simples consommateurs, mais coller à cette satanée loi de Moore est un véritable casse-tête. Une interprétation de cette « loi » (qui est par ailleurs totalement empirique) veut que la puissance des ordinateurs double tout les 18 mois. Plus facile à dire qu’à faire ! Parce que doubler la vitesse d’un processeur… ça se fait pas tout seul. D’ailleurs, les méthodes pour y arriver pourraient faire l’objet de plusieurs ouvrages, alors ici, on va essayer de simplifier un maximum.

Augmenter les performances : la fréquence

Un CPU est un circuit électronique composé de myriades de transistors (autour du milliard pour un Core i7 d’Intel) dont les commutations sont synchronisées par une horloge. Il y a plusieurs manières « d’accélérer » un CPU : augmenter sa fréquence, c’est-à-dire le nombre de cycles de travail par seconde, accroitre le travail effectué à chaque cycle, ou encore travailler sur plus de données à la fois.

La première solution semble bien plus simple, et de fait: elle l’est. Sauf qu’à mesure qu’on augmente la fréquence, on augmente aussi la consommation et la température du processeur qui finit par… fondre. C’est que même si la commutation d’un transistor unique consomme et dissipe une énergie minuscule, le faire des milliards de fois par seconde sur des milliards de transistors vous permettra sans problème de faire un cuire un œuf sur votre micro processeur.

Heureusement, il y a des solutions techniques pour limiter la casse. La première repose sur la taille des composants, lié à la finesse de gravure des puces. Au plus les composants sont petits, au moins ils consomment. Les processeurs modernes ont des finesses de gravure comprises entre 45nm et 28nm. Mais cela ne suffit pas forcément pour atteindre plein de gigahertz. On doit aussi « pipeliner » le processeur.

Chaque « fonction » d’un processeur moderne est scindée en plusieurs miniétapes qui devront être accomplies successivement, et qui ne prennent en général qu’un cycle d’horloge. Les étapes sont en « pipeline », c’est-à-dire organisées comme sur une chaine de montage d’usine. Chacune donne son résultat partiel à la suivante. Quand le pipeline tourne à plein régime, chaque instruction exécutée, même complexe, ne parait prendre qu’un seul cycle. Un autre bénéfice est qu’au plus le pipeline est long, au plus les étapes sont « élémentaires ». Chacune consommant moins d’énergie, le processeur peut monter un petit peu plus en fréquence.

Un exemple extrême serait le pentium 4 Prescott dont le pipeline possède 31 étapes. Il montait jusqu’à 3.8Ghz en 90nm ! Il reste que la fréquence maximale est finalement limitée par la technologie de gravure employée.

Augmenter les performances : l’ILP

La seconde solution consiste à augmenter ce que l’on appelle l’ILP pour « Instruction Level Parallelism ». Puisqu’on ne peut pas avoir plus de cycles, on fait plus de choses à chaque cycle. Un programme et un flot d’instructions, pourquoi ne pas essayer d’en exécuter le maximum à la fois ? Les processeurs capables de faire cela sont dits « superscalaires ». Le premier CPU grand public à pourvoir le faire avec deux instructions fut le Pentium d’Intel (oui, celui qui est sorti buggé… !). On dit qu’il est « 2 – issue ». Bien sur, les instructions d’un programme ne sont pas sans suite logique et dépendent souvent l’une de l’autre. Du coup, faire un CPU « 3 – issue » n’apporte pas forcément grand-chose. Sauf si on n’est pas capable de réorganiser le programme pour utiliser au mieux les 3 unités d’exécution. Le pentium pro et son cousin le Pentium 2 furent les premiers processeurs Intel à proposer 3 pipelines (2 simples et un complexe) avec réorganisation à la volée des instructions. On dit qu’ils sont “out of order” puisqu’ils n’exécutent par forcément les instructions dans l’ordre. Pratiquement tous les processeurs modernes sont superscalaires et « out of order », même dans le monde de la mobilité (Cortex A9, A15 Snapdragon S4 etc). Cela dit, augmenter l’ILP devient de moins en moins rentable au fur et à mesure que les processeurs deviennent plus « larges ». Le surcroît de complexité nécessaire fini par annuler le gain de performances obtenu.

Augmenter les performances : le DLP

Pour faire plus de travail par cycle d’horloge, on peut aussi travailler sur plusieurs nombres à la fois plutôt qu’un seul. C’est le DLP « Data Level Parallelism ». Les processeurs étaient à l’origine « scalaires », c’est-à-dire que par exemple, dans une addition : a = b + c, a, b et c sont des nombres, des “scalaires” comme on dit en mathématiques. L’idée est de remplacer ces nombres par des vecteurs, c’est-à-dire des groupes de nombres. On travaille alors en SIMD, « Single Instruction Multiple Data ». La première occurrence de SIMD dans le grand public (les ordinateurs Cray étaient déjà vectoriels depuis un bail…) est le MMX, introduits avec une révision du Pentium. Les registres MMX font 64 bits et peuvent être utilisés, par exemple, comme des groupes de 4 entiers de 8 bits. Avec le Pentium 3, on passe au SSE (pour « Streamed SIMD Instruction ») de 128 bits de longueurs, utilisables en virgule flottante. Dans le monde ARM, c’est le jeu d’instructions NEON (en 64 ou 128 bits) qui fournit des capacités SIMD aux processeurs Cortex. Très efficace pour certains types de calcul, le SIMD n’est néanmoins pas si simple à utiliser à son maximum. Cela demande un effort non négligeable du côté des programmeurs.

On l’a vu, si on augmente trop la fréquence, on se heurte à un « mur thermique ». Augmenter l’ILP à ses limites, le SIMD n’est pas adapté à toutes les tâches. Alors que faire des tous les transistors que les processus de fabrications toujours plus sophistiqués mettent à notre disposition ? Et bien… pourquoi ne pas mettre plusieurs processeurs en un ? Banco !

Augmenter les performances : le TLP

Que faire quand on a saturé les performances d’un processeur ? Et bien on en prend deux. Mettre deux processeurs (ou 4 ou 8…) en parallèle n’est pas nouveau et ça ne l’était pas non plus en 2005 quand AMD a introduit son Athlon 64 X2. La nouveauté, c’était que les deux processeurs étaient non seulement dans le même package, mais gravés sur le même die. L’ère du multicœur avait commencée. Le problème, c’est qu’avoir deux cœurs dans un même processeur n’apporte rien si le programmeur n’en tient pas compte. Pour profiter de cette puissance supplémentaire, le programmeur doit scinder son programme en plusieurs sous-programmes (threads) s’exécutant en parallèle. On parle ainsi de multithreading et de TLP «Thread Level Parallelism ». Le multicoeur a gagné nos machines mobiles dès l’iPad 2 avec les premiers Cortex A9. Aujourd’hui, le multicoeur est toujours plus « multi », 4 cœurs pour un ordinateur portable milieu de gamme, et jusqu’à 12 pour un Opteron « Magny court » d’AMD. À tel point que la prochaine étape semble être le manycore : plusieurs dizaines ou centaines de cœurs et beaucoup de migraines pour les programmeurs à la clé…

Bon, on pourrait continuer des heures, mais on arrêtera ici ce qui n’est bien sûr qu’un modeste aperçu du domaine : on n’a par exemple pas du tout parlé de la problématique de la mémoire ! Mais bon, si ça vous intéresse vraiment, la licence d’informatique vous attend !

Source : Tablette-Tactile.net au 27/10/2011

Aucun commentaire: