Performances x100 avec l'accélération matérielle sur POWER
Est-il possible d’accélérer une application d'un facteur 10, voire 50 ou même 100 ? Voilà une question que vous vous posez sûrement.
POWER est une formidable architecture processeur alternative au x86. Mais au-delà de ses performances, le processeur POWER est unique en son genre par ses capacités. il possède en effet une interface très spéciale, baptisée CAPI qui est présente depuis le POWER8. Cette interface permet des gains de performances très importants pour un grand nombre d'applications, et je vous propose de découvrir comment.
Pourquoi IBM a-t-il créé une telle interface ?
Pour répondre, parlons quelques instants de la loi de moore, qui annoncait dès 1965 qu'à prix constant, la puissance fournie par un ordinateur allait doubler tous les 1 an et demi. Cette loi empirique est restée valide pendant de nombreuses années, mais elle n'est maintenant plus vraie. Nous sommes arrivés aux limites physiques de la technologie silicium, le processeur n’est plus la clef des problèmes de performance, il faut l’aider à fournir la puissance de calcul attendue par des applications toujours plus gourmandes. Un des moyens de le faire est de confier les calculs à un accélérateur matériel.
Parlons maintenant de cet accélérateur. Il s'agit d'un FPGA, un Field Programmable Gate Array. Un FPGA est un circuit intégré reprogrammable qui est ajouté au serveur, sous la forme d'une carte branchée dans un slot PCI Express.
Il est programmable, mais pas au sens de la programmation informatique, en C ou en Java. Il n'y a pas de jeu d'instruction figé comme dans un CPU, pas de compilateur qui transforme le code du programmeur pour le mapper sur ce jeu d'instruction. Par exemple, voici un additionneur écrit en assembleur, le langage le plus proche du matériel sur un processeur :
section ".opd", "aw"
.align 3
.global _start
_start:
.quad ._start, .TOC.@tocbase, 0
.text
li 3, 1 #load "1" into register 3
li 4, 2 #load "2" into register 4
add 3, 3, 4 #add register 3 to register 4 and store the result in register 3
li 0, 1 #load "1" into register 0 for the system call
sc
Su un FPGA, la programmation se joue ici à un niveau bien plus proche du matériel, car c'est directement l'arrangement des portes logiques qui est programmable. On peut donc programmer l'exécution d'un algorithme en connectant les portes logiques, comme des AND, des OR qui sont des briques de base de l'électronique, et en créant du parallélisme physique adapté à ces calculs.
On obtient alors un maximum d'efficacité pour cet algorithme. Le gain de performances est énorme, le code peut s'exécuter plusieurs dizaines de fois plus rapidement sur le FPGA que sur le processeur. Si l'algorithme change, si des paramètres doivent être modifiés, pas de problème ! Le FPGA peut être reprogrammé à l'envie, en quelques minutes.
CAPI accélère encore plus
Sur POWER, c'est maintenant que CAPI entre en jeu. CAPI permet d'améliorer considérablement les performances du FPGA. Grâce à cette interface entre le CPU POWER et le FPGA, une application peut appeler directement les fonctions qui sont accélérées par le FPGA, sans passer par un device-driver comme pour un FPGA standard, et sans faire une copie des données. En effet, CAPI permet au FPGA branché sur le serveur d'accéder à la mémoire du serveur de manière cohérente avec le processeur, dans un seul même espace d'adressage virtuel.
Les cas d'usage sont très nombreux. Par exemple, un FPGA avec CAPI peut réaliser de la reconnaissance d'objets sur un flux vidéo en temps réel à 30 images par seconde, ce qu'un logiciel seul a du mal à de réaliser. Un algorithme de Monte Carlo, pour une simulation de risques, est accéléré d'un facteur x40. La plupart des algorithmes sont éligibles à une exécution sur FPGA.
Exploitez plus de données, statiques ou en flux
Mais ce n'est pas tout ! En effet, les cartes FPGA possèdent 2 atouts supplémentaires : 2 To de mémoire Flash et des ports d'entrée / sortie en connectique par fibre optique. Avec ces ports externes, vous avez donc accès aux réseau IP, SAN ou Infiniband. Vous pouvez traiter des flux entrant ou sortant, comme par exemple de la détection de paquets sur des flux réseau. Une autre application ? faire de la compression / décompression de données à la volée qui sont lues ou écrites sur un stockage externe.
La mémoire Flash permet quant à elle d'étendre l'espace mémoire disponible pour une base de données montée en mémoire, comme une base Redis. Il n'est plus nécessaire d'utiliser un cluster de 8 ou 16 serveurs x86 pour disposer d'une base de données en mémoire de 2 ou même 4 To. 1 seul serveur POWER8 suffit, avec une carte FPGA et CAPI. encore plus fort, il est possible d'interfacer une baie de stockage flash, à travers une carte FPGA CAPI, pour que la base de données en mémoire voie jusqu'à 40 To d'espace disponible.
CAPI SNAP rend la programmation du FPGA facile
la principale difficulté du FPGA classique réside dans sa programmation : c'est la tâche d'un développeur hardware, en conception électronique, ce n'est pas de la programmation informatique. Elle s'effectue dans un langage bien particulier, le Verilog ou le VHDL, et les compétences sont rares, et les temps de développement s'étalent sur plusieurs mois. Programmer un FPGA classique est une tâche longue et réservée à des spécialistes en électronique.
Pour éviter ces difficultés, IBM a développé un environnement qui s'appelle CAPI SNAP. il permet à un développeur logiciel de programmer un FPGA directement à partir de son code C/C++ ou en langage Go, et de l'implémenter en quelques heures dans un FPGA. Toutes les difficultés de programmation d'un FPGA sont levées !
Le framework de développement vous propose une API très simple, qui vous permet de désigner la source des données, l'action à réaliser sur ces données, et le lieu où envoyer le résultat du traitement. On comprend ici toute l'intérêt des connections d'entrée sortie, et du stockage local sur le FPGA. Le framework prend en charge tous les mouvement de données, et vous pouvez vous concentrer sur votre code C. Ce code est ensuite transformé automatiquement pour programmer le FPGA.
Vous accélérez ainsi très facilement le cœur de votre application, ce qui permet des gains de performances très significatifs, voire même des résultats impossibles à obtenir autrement, comme dans l’exemple de la reconnaissance d’image en temps réel.
CAPI est bien sûr présent sur la gamme POWER9, dans une version encore plus puissante en CAPI 2.0, appuyé sur le bus PCI Express 4.0, et une version encore plus ouverte, grâce à OpenCAPI.
Comment tester ?
Nous vous invitons à tester CAPI SNAP pour accélérer votre code, que vous soyez éditeur de logiciel ou utilisateur final.
Pour la partie logicielle, le framework est disponible sur Github, et pour vous donner facilement accès au matériel, IBM met à votre disposition un environnement CAPI en cloud sur SuperVessel. Pour vous accompagner, nos meilleurs spécialistes de la technologie CAPI sont français et là pour vous aider, alors contactez-nous !
Technical Presales Power Systems chez IBM
6 ansYes, I can do that !
IBM Global Technical leader - Ecosystem expansion initiative
6 ansLa même en anglais thibaud ?
Pre-Sales Consultant chez Getronics France
6 ansTrès bon article, merci !
.
6 ansDidactique et motivant à souhait pour appuyer sur le champignon.. Profitons en, pas de contrôle de vitesse dans le coin ;-) Merci Thibaud.
Senior Research Scientist at IBM
6 ansSympa ton article. J’ai hâte de lire “Acceleration Matérielle sur Power - Part 2” qui j'espère couvrira un peu plus en détails CAPI/SNAP et le x100 :-)