Une société spécialisée dans les smartbooks, Genesi, vient d'annoncer qu'il était possible d'augmenter les performances de certains appareils en modifiant la distribution Linux utilisée. Le gain, dans certains cas, pourrait atteindre 300 %. Et c'est « simple » : il suffit d'utiliser la FPU. Expliquons.
Bien utiliser la FPU
Dans un processeur, on trouve une unité qui travaille sur les nombres entiers, mais aussi une unité qui travaille sur les nombres à virgules flottantes et qui permet de faire des calculs géométriques (par exemple). Si la FPU (le nom de l'unité en virgules flottantes) est généralisée sur les x86 depuis le milieu des années 90, les ARM, surtout en entrée de gamme, n'ont pas nécessairement ce composant. Actuellement, la majorité des distributions sont compilées dans un mode que l'on appelle « softfloat ». Ce mode permet d'utiliser les unités en virgule flottante des SoC ARM (la fameuse FPU) mais en passant par les unités entières. En simplifiant, l'OS va détecter les appels à la FPU et ensuite éventuellement exécuter le code sur l'unité dédiée. Ce mode est pratique parce qu'il permet d'exécuter le code sans connaître le type exact de FPU — il en existe plusieurs en architecture ARM — et aussi d'exécuter logiciellement les instructions qui ne sont pas disponibles. Le problème du « softfloat » est qu'il est coûteux en temps CPU : l'analyse du code avant son passage sur la FPU ralentit nettement certains programmes.
Passer en hardfloat
La solution la plus simple est de passer en « hardfloat » : les instructions sont passées directement à la FPU, ce qui permet un gain substantiel. Mais c'est évidemment compliqué dans la pratique. Premier écueil, il est nécessaire de recompiler le système et les applications. Si du code en « softfloat » fonctionne sur des SoC qui n'ont pas de FPU, le « hardfloat » nécessite une FPU, et pas n'importe laquelle. Et tous les logiciels doivent aussi être adaptés, là aussi en recompilant. Deuxième écueil, la diversité des SoC ARM : il existe plusieurs FPU, elle n'est pas obligatoire, etc. Globalement, le choix va être simple : un Linux « hardfloat » sera compatible avec les CPU ARMv7 (Cortex A8, Cortex A9, Scorpion), en VFPv3, le nom de la FPU proposée par ARM. le SIMD ne sera a priori pas de la partie, car un des grands fabricants de SoC — NVIDIA — n'a pas intégré cette fonction dans sa puce (Tegra 2). Pour les machines encore en ARMv6 (processeur de type ARM11, comme le Nokia N8), point de salut. Et même si les Cortex A8 et Cortex A9 partagent le même jeu d'instructions, l'absence de pipeline au niveau de la FPU sur le premier grève les performances...
Dans les faits, Genesi devrait proposer d'ici quelques semaines une distribution Debian compilée en « hardfloat » pour remplacer la distribution Ubuntu en « softfloat », avec évidemment tous les programmes classiques adaptés. Espérons que cette initiative sera suivie : beaucoup de systèmes d'exploitations pour les smartphones sont encore en softfloat alors que les appareils actuels sont généralement tous capables de fonctionner en hardfloat.