Java, un langage de programmation souvent décrié pour ses performances, peut-il être accéléré ? Oui, selon une présentation au JavaOne. Dans le meilleur des cas, on peut accélérer 48 fois certains traitements… en utilisant une carte graphique. La présentation a été effectuée par John Duimovich, spécialiste Java chez IBM.
Java et CUDA
L’accélération est obtenue en utilisant CUDA, la technologie de NVIDIA qui permet d’utiliser un GPU pour faire du calcul. Si les gains pratiques ne sont évidemment pas si élevés dans la pratique, ne serait-ce que parce que tout le monde n’a pas un GPU NVIDIA performant dans sa machine, la démonstration est intéressante.
L’usage d’une carte graphique pour accélérer certains calculs n’est pas une nouveauté, et NVIDIA et AMD proposent même des cartes dédiées à cet usage, en supprimant totalement la sortie vidéo, mais l’utilisation d’un GPU pour accélérer Java est par contre une nouveauté. Pour des calculs scientifiques en Java, tout du moins quand on a besoin d’une précision accrue, utiliser des GPU Tesla de la génération Kepler permet par exemple de calculer environ 10x plus vite qu’avec des Xeon de la génération Sandy Bridge.
Dans d’autres cas, quand la complexité augmente, on a même des gains bien plus importants.
Reste évidemment à prendre en compte quelques points : l’accélération via le GPU n’est valable que sur certains types de calcul et — surtout — les GPU ne sont pas toujours plus rapides qu’un CPU. Dans une machine grand public, les GPU sont souvent des modèles d’entrée ou de milieu de gamme et sont utilisés pour d’autres traitements, comme l’affichage de l’interface.
Si utiliser des GPU pour du calcul dans le monde scientifique a un sens, ne serait que parce qu’on peut placer facilement plusieurs GPU dans une seule machine, c’est beaucoup moins le cas dans le grand public. La seule technologie de GPGPU qui a un temps été utilisée dans le grand public, la compression vidéo, est d’ailleurs en perte de vitesse : utiliser des composants dédiés comme QuickSync chez Intel ou les encodeurs intégrés dans les GPU de NVIDIA et d’AMD est souvent bien plus efficace que d’effectuer les calculs logiciellement sur la carte graphique…
Notons enfin que l’usage de CUDA est regrettable : si la technologie de NVIDIA a des avantages, elle limite de facto l’accélération aux cartes de la société. OpenCL est parfois moins rapide, mais l’API fonctionne sur les cartes graphiques d’AMD et sur celles d’Intel (avec quelques limites…).