gpu.js : le JavaScript accéléré par la carte graphique
gpu.js : le JavaScript accéléré par la carte graphique
Le , par yahiko
Il se fait tard au moment où je tape ces quelques lignes, mais je viens de tomber sur quelque chose qui pourrait se révéler être un moyen d'optimisation très intéressant à l'heure où les applications JavaScript deviennent de plus en plus gourmandes en ressources de calcul. Le JavaScript étant principalement monothread et les calculs en JS étant pour une large part à l'heure actuelle synchrone, quand ils deviennent nombreux et complexes, ça peut devenir un problème comme dans le domaine des jeux vidéos, de la simulation numérique, du Big Data, de l'Intelligence Artificielle ou plus généralement du calcul scientifique qui commence à pointer le bout de son nez sur navigateur.
Il se trouve qu'un composant existant sur de nombreux ordinateurs, la carte graphique, est justement spécialisée dans le calcul numérique avec l'avantage que ces calculs peuvent être exécutés en parallèle, ce qui change tout. Depuis quelques années déjà, il existait des solutions pour détourner l'usage premier de la carte graphique, afficher des pixels, pour en faire une unité de calcul à vocation généraliste, concept connu sous l'acronyme barbare de GPGPU. Mais c'était réservé à quelques langages comme le C++, Python ou la plateforme .NET. Pour les développeurs JavaScript, point de salut, cela restait un peu le vide intersidéral.
Et bien, il se trouve que ce vide vient d'être comblé tout récemment puisqu'une bibliothèque du nom de gpu.js permet d'exécuter certains calculs sur la carte graphique et non pas sur le processeur principal qui sera ainsi libre de réagir aux interactions de l'utilisateur. Le champ d'action de cette bibliothèque est pour le moment assez restreint, mais elle n'en est qu'à sa version 0.0.Alpha. Il y a donc certainement de la marge de progression.
Mais déjà, selon le benchmark fourni en guise de démonstration et mon PC portable au moment où j'écris, les calculs seraient accélérés d'un facteur trois avec le circuit intégré Intel HD Graphics et au delà d'un facteur 8 avec une véritable carte graphique. Loin d'être négligeable donc.
Même si je n'ai pas encore vraiment pu regarder sous le capot, la bibliothèque doit sans doute générer des shaders à la volée qu'elle transmet ensuite à la carte graphique via la couche WebGL. A vérifier mais en gros, ça doit ressembler à quelque chose comme ça.
Quoiqu'il en soit, cela ouvre des perspectives tout à fait intéressantes pour le langage JavaScript. Si on considère le projet WebAssembly et l'évolution de la norme vers le parallélisme et la concurrence (Web Workers et SharedArrayBuffer), je vois mal ce qui ne pourra pas tourner à l'avenir sur le navigateur.
N'hésitez pas à me dire ce que vous pensez de cette bibliothèque.
Bon développement !
source : Site officiel
Une erreur dans cette actualité ? Signalez-nous-la !