Developpez.com - Rubrique Java

Le Club des Développeurs et IT Pro

Une équipe de chercheurs présentent TornadoVM, un plug-in pour OpenJDK et GraalVM qui permet de faire tourner Java sur du matériel hétérogène

Comprenant des GPU et des FPGA

Le 2020-03-10 08:30:19, par Christian Olivier, Expert éminent sénior
Le Dr Juan Fumero Alfonso de l’université de Manchester a récemment fait une présentation au QCon de Londres sur TornadoVM, un plug-in pour OpenJDK et GraalVM qui fait tourner Java sur du matériel hétérogène comprenant des unités de traitement graphique (GPU) et des circuits logiques programmables (FPGA ou Field-Programmable Gate Array). Des démonstrations ont montré que le code est accéléré des centaines de fois lorsqu’il fonctionne sur un GPU par rapport à un CPU. Mais Java peut-il être vraiment considéré comme un langage de haut niveau adapté à la programmation sur GPU, sachant que Java est un langage de programmation général et que les GPU ne sont pas des adaptés à un usage général ;?


Les GPU et les FPGA peuvent offrir une amélioration de la vitesse de 2 à 3 fois supérieure pour une charge de travail hautement parallèle. Mais ces améliorations de vitesse ont été difficiles à obtenir, car la programmation nécessite l’utilisation de langages de bas niveau tels que OpenCL et VHDL : et c’est là tout l’intérêt de TornadoVM ;! Ce dernier rend l’accélération accessible aux programmeurs utilisant Java et Node.js, et des annotations sont utilisées pour marquer les blocs de code pouvant être traités en parallèle comme un indice pour le compilateur.


TornadoVM est compatible avec les processeurs multicœurs, les GPU de NVIDIA, AMD et Intel, ainsi que les FPGA d’Intel. Le choix de l’accélérateur matériel est transmis à TornadoVM en paramètre, et le Dr Fumero a fait une démonstration de TornadoVM avec du code fonctionnant sur un CPU, un GPU Intel intégré et un GPU NVIDIA présent sur son ordinateur portable. TornadoVM permet également la migration de tâches en direct entre différents types de matériel, ce qui a également été démontré. Les Tensor Processing Units (TPU) ne sont pas encore supportées, mais le Dr Fumero a déclaré qu’il serait simple d’ajouter un backend supplémentaire à TornadoVM tant que le support OpenCL est présent. L’équipe en charge du projet travaille actuellement sur l’ajout du support de la technologie Parallel Thread Execution (PTX) de NVIDIA.


D’après l’équipe en charge de développement du projet, TornadoVM n’est pas encore prêt pour une exploitation à grande échelle, car le produit n’est pas encore finalisé. Cependant, ils précisent que ce produit a déjà été utilisé par la société Exus pour accélérer la formation des modèles d’apprentissage machine (Machine Learning) travaillant sur des données relatives aux soins de santé. Néanmoins, en raison de limitations dans le modèle de programmation sous-jacent, TornadoVM ne supporte pas les objets (sauf pour les cas triviaux), la récursion, l’allocation de mémoire dynamique ou les exceptions (un nouveau JavaCard ;?).

Le Dr Juan Fumero Alfonso n’a malheureusement pas précisé si TornadoVM se rapprochait plus d’un outil permettant de lancer une JVM (machine virtuelle Java) sur un GPU ou d’un outil (compilateur, par exemple) permettant la programmation de certaines tâches à l’aide d’un sous-ensemble Java restreint limité aux bibliothèques spécialisées sur un GPU ou un FGPA.

Source : Démos publiées sur Github, Slide (PDF)

Et vous ?

Que pensez-vous du projet TornadoVM ?
Java peut-il être considéré comme un langage de haut niveau adapté à la programmation sur GPU ? Pourquoi, selon vous ?
Pensez-vous que le problème, s’il existe, vienne du langage en lui-même ou plutôt des outils mis à disposition pour l’exploiter ?
  Discussion forum
3 commentaires
  • L33tige
    Membre expérimenté
    TornadoVM ne supporte pas les objets (sauf pour les cas triviaux), la récursion, l’allocation de mémoire dynamique ou les exceptions
    Ça valait le coup d'utiliser java du coup.

    Java Card supporte néanmoins les objets et les exceptions non ?
  • Uther
    Expert éminent sénior
    En effet, faire du Java non idiomatique, j'ai déjà donné avec des projet J2ME absolument infâmes pour satisfaire les contraintes, là ça a l'air encore pire. C'est complètement idiot.

    Autant faire du C, ou du Rust si on veut un langage plus moderne et plus sur.
  • wax78
    Modérateur
    Tiens quelqu'un a-t-il déjà essayer ceci : http://aparapi.com/introduction/gett...g-started.html ?