Les processeurs dotés de multiples cœurs prolifèrent sur les smartphones et les tablettes. L’année 2013 a signé l’arrivée des processeurs mobiles dotés de huit cœurs avec notamment l’Exynos 5410 du Galaxy S4 GT-I9500. Rapidement, les compétiteurs se sont mis en ordre de marche afin de proposer encore mieux. C’est le cas de la puce MT6592 de MediaTek avec ses « vrais » huit cœurs ou encore la future Helio X20 avec ses 10 cœurs. Mais à quoi servent vraiment tous ces cœurs sur une plateforme mobile ? Sont-ils utiles pour les performances ou pour la consommation ? Réponse dans ce dossier dédié aux processeurs multi-core.

Tegra-x1

Les smartphones dotés de huit cœurs (octo-core) ont le vent en poupe ces derniers temps. Il suffit d’arpenter un salon dédié à la mobilité (ou tout simplement une boutique) et jeter un coup d’œil aux fiches techniques pour s’apercevoir que de nombreux mobiles intègrent un SoC composé d’un processeur octo-core. C’est en fait grâce à MediaTek, qui a permis – par l’intermédiaire de ses puces à bas coût – d’inclure des processeurs octo-core dans des smartphones bon marché. Malheureusement, on aurait aimé voir le département R&D de MediaTek se pencher sur d’autres sujets comme l’efficacité énergétique de chaque cœur. Pour mieux comprendre la problématique des processeurs multi-cœur sous Android, commençons par les bases.

octo-core

L’évolution des processeurs dans les Samsung Galaxy

 

L’augmentation des performances

Il y a différentes manières pour augmenter les performances d’une architecture processeur. La première, et la plus simple, est d’augmenter le nombre de cœurs. De cette manière, le processeur est capable de traiter plus d’informations en un cycle d’horloge (exprimé en Hz). Un processeur octo-core est ainsi capable, en théorie, de traiter 8 fois plus d’informations qu’un processeur mono-core. L’autre manière d’augmenter facilement les performances est d’augmenter la fréquence du processeur. Ainsi, un processeur cadencé à 2000 MHz est capable, en théorie, de traiter deux fois plus d’informations qu’un processeur cadencé à 1000 MHz. Mais c’est sans compter sur l’architecture même des cœurs et du processeur, capable d’influencer le nombre de tâches réalisables en un cycle d’horloge : on appelle ça l’IPC (Instructions Par Cycle). Ce dernier type d’optimisation réclame de longues heures et de nombreux dollars de R&D et on comprend donc mieux pourquoi les concepteurs de SoC préfèrent multiplier les cœurs plutôt que de créer leur propre cœur hautement optimisé.

Pourtant, un cœur optimisé vaut mieux que plusieurs cœurs peu optimisés. Nous l’avons déjà vu avec les cœurs Krait de Qualcomm qui disposent de performances plus élevées par cycle d’horloge comparé aux cœurs Cortex d’ARM, bien que les cœurs Krait soient basés sur le même jeu d’instruction que les Cortex. De nombreux éléments différencient ces cœurs, par exemple le fonctionnement du sous-système mémoire ou encore une meilleure prédiction de branchement. Ce sont notamment eux qui améliorent l’IPC d’un cœur (le nombre d’instructions réalisables en un cycle d’horloge).

 

Android et le multi-core

Android n’est pas le meilleur ami des processeurs multi-core. Il les supporte très bien, mais réclame un travail de la part des développeurs pour les prendre en charge de manière optimale. Lorsqu’un développeur crée son application, il découpe les différentes fonctionnalités en différentes tâches (thread). Chaque tâche sera réalisée par un seul et même cœur. Si plusieurs tâches sont réalisées en même temps, le processeur pourra faire appel à plusieurs cœurs. Encore faut-il que les développeurs multiplient les tâches, ce qui n’est pas toujours le cas. De plus, il est impossible de diviser son application en des milliers de tâches. Au final, les applications et les jeux disposent de quelques tâches en simultanées et exploitent donc assez mal les 8 cœurs d’un processeur octo-core.

Capture d’écran 2015-07-17 à 14.22.55

Les tâches de Real Racing 3 (GameBench)

Prenons le cas de Real Racing 3 qui constitue notre suite de benchmarks : le jeu n’utilise pas l’ensemble des cœurs d’un processeur octco-core et se limite plutôt à une lourde tâche et quelques petites tâches simultanées. Toutefois, OpenGL (l’API graphique du moteur graphique) a un comportement particulier puisque l’API parvient à se décomposer en de multiples tâches. Mais sur Real Racing 3, le processeur est loin d’être limitant puisque sa puissance est utilisée à moins de 50 % quel que soit le smartphone. C’est alors la puce graphique qui n’est pas assez puissante pour réussir à saturer le processeur. Sur les applications plus standards, comme Word, les tâches simultanées sont plus nombreuses, jusqu’à 8 sur le Kirin 930 du Huawei P8. Malgré tout, l’utilisation totale du processeur ne dépassait pas 30 %, ce qui prouve que la puissance disponible des cœurs n’est pas totalement utilisée et qu’il aurait été possible d’obtenir les mêmes performances avec un nombre de cœurs réduit.

Pour les performances, les octo-core ne sont pas forcément l’idéal

En 2013, Qualcomm se moquait ouvertement des concurrents qui proposaient huit cœurs quand le géant de San Diego se limitait à des processeurs quad-core. Une vidéo résume plutôt bien la situation. Pourtant, avec le Snapdragon 810, Qualcomm a mis de côté son argument marketing puisque c’est le premier processeur octo-core de la marque, équipé de cœurs Cortex d’ARM peu optimisés face aux Krait. Et les quelques mois de recul nous permettent aujourd’hui d’affirmer que ce SoC était une mauvaise idée, sortie de manière précipitée pour contrer la concurrence du point de vue marketing et proposer un processeur octo-core 64 bits.

Lien Youtube
Chaine Youtube FrAndroid

Il est donc clair que, pour les performances, il vaut mieux privilégier quelques cœurs performants à une multitude de cœurs peu performants sous Android. Mais les problématiques de consommation pourraient-elles changer la donne ? On peut se poser la question puisque les concepteurs de puces octo et déca-core mettent en avant l’efficacité énergétique de telles puces.

 

Des processeurs octo-core pour réduire la consommation

Prenons l’exemple du Helio X20 de MediaTek : on trouve deux cœurs Cortex-A72 pour les performances et deux groupes de quatre Cortex-A53 pour les tâches moins gourmandes. Les Cortex-A72 sont les plus énergivores et seront donc uniquement utilisés pour les tâches très gourmandes pour lesquelles les Cortex-A53 ne seraient pas adaptés, puisqu’ils mettraient trop de temps à réaliser l’opération, ce qui pourrait avoir pour effet une consommation finale plus élevée par rapport à celle des Cortex-A72. Les deux groupes de Cortex-A53 se distinguent par la fréquence des cœurs : 2 GHz pour le premier et 1,4 GHz pour le second. Ces derniers cœurs consommeront moins d’énergie que les premiers grâce à une tension (exprimée en volts) plus faible, car plus la fréquence est réduite et moins la tension nécessite d’être élevée pour alimenter les cœurs.

mediatek_x20_power_savings

Mais pourquoi avoir créé ce deuxième groupe de faible consommation alors que le premier groupe aurait très bien pu fonctionner lui aussi à 1,4 GHz à la demande, selon la charge ?On imagine que MediaTek a agi de la même manière que HiSilicon avec le Kirin 930 qui utilise des Cortex-A53e à 2 GHz parallèlement à des Cortex-A53 à 1,5 GHz : les modifications physiques (mineures) réalisées pour atteindre une fréquence élevée ont conduit à augmenter mécaniquement la consommation des cœurs, même utilisés à faible fréquence.

L’architecture big.LITTLE pour réduire la consommation

L’intérêt n’est donc pas d’avoir des processeurs octo ou déca-core mais de posséder différents groupes de cœurs, utilisables selon la charge du système. Avec une faible charge processeur, seuls les Cortex-A53 sont utilisés tandis que les Cortex-A72 sont en veille, sans consommer d’énergie. A contrario, lors des fortes charges, ce sont les Cortex-A72 (ou A57) qui entrent en piste, laissant les Cortex-A53 se reposer. C’est là tout l’intérêt de l’architecture big.LITTLE d’ARM. Certaines fois, il est même possible de faire fonctionner l’ensemble des cœurs, lorsque cela se révèle nécessaire, avec la technologie HMP (Heterogeneous Multi-Processing).

Lien Youtube
Chaine Youtube FrAndroid

On a pu voir sur l’Exynos 7420 qu’une telle architecture était plutôt efficace, avec de bonnes performances et une consommation contenue. Pourtant, Samsung n’utilise pas de cœurs maison, mais simplement les Cortex A53 et A57 d’ARM. On imagine alors que la gravure en 14nm a permis d’éviter une consommation excessive. Mais la multiplication des cœurs physiques à la manière du Helio X20 de MediaTek ne semble pas la meilleure solution, sur le long terme pour le rapport performance – consommation. On ne peut pas multiplier à l’infini le nombre de cœurs, notamment à cause des problématiques relatives à l’espace physique occupé sur le PCB.

 

Le multi-threading et le GPU Computing

Une piste d’amélioration serait l’arrivée du multi-threading au sein des cœurs mobiles, à l’image de ce qui se fait dans le monde PC avec l’hyper-threading d’Intel. L’idée est plutôt simple : un cœur multi-threadé est capable de traiter deux tâches simultanées, à la manière de deux cœurs. Un tel cœur est complexe à réaliser, mais a le mérite de consommer bien moins d’énergie que deux cœurs utilisés en simultané. ARM ne prévoit pas – sur le court terme – de développer des cœurs Cortex multi-threadés. On aimerait alors voir arriver ce type de cœur avec le Snapdragon 820 et ses futurs cœurs Kryo, remplaçants des Krait.

Intel Hyperthreading

Sur le moyen terme, il est possible que le GPU Computing (aussi appelé Portable Heterogeneous Computing) permette de pallier l’absence de cœurs multi-threadés. Ici, l’idéée est d’utiliser la puce graphique pour réaliser des tâches normalement prises en charge par le processeur. Encore faut-il que l’efficacité énergétique soit bonne dans ces conditions. Il y a donc encore de nombreuses améliorations à venir dans le domaine de l’efficacité énergétique sans révolutionner le fonctionnement même d’un processeur.

 

Plus de cœurs = meilleure efficacité énergétique

En attendant l’arrivée du multi-threading et du GPU Computing dans la sphère mobile, on se contentera des processeurs massivement multi-cœurs. Mais attention à ne pas faire d’amalgame puisque les concepteurs de puces utilisent les nombreux cœurs afin d’augmenter l’efficacité énergétique et non pas pour augmenter les performances. Avec davantage de cœurs différents, le processeur est capable d’adapter sa puissance – et donc sa consommation – à différentes situations. Ainsi, il ne sera pas rare de croiser un processeur quad-core largement plus performant que le futur Helio X20 de MediaTek. On pense notamment aux excellents Snapdragon 801 et 805 de Qualcomm. En revanche, en termes de consommation instantanée, il est possible que le Helio X20 repasse devant. Pour l’efficacité énergétique (le rapport performances – consommation), c’est une autre histoire et il sera très difficile de réaliser des mesures précises. Il sera intéressant de voir si Qualcomm a développé deux types de cœurs différents pour son Snapdragon 820 pour proposer une puce octo-core ou si l’entreprise repart sur des processeurs quad-core dotés d’une très bonne efficacité énergétique.

Helio X20 tri cluster