IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

SIMD.js : la programmation parallèle s’invite dans JavaScript


Sujet :

JavaScript

  1. #1
    Responsable .NET

    Avatar de Hinault Romaric
    Homme Profil pro
    Consultant
    Inscrit en
    Janvier 2007
    Messages
    4 570
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Consultant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2007
    Messages : 4 570
    Points : 252 372
    Points
    252 372
    Billets dans le blog
    121
    Par défaut SIMD.js : la programmation parallèle s’invite dans JavaScript
    SIMD.js : la programmation parallèle s’invite dans JavaScript
    Mozilla présente les évolutions de l’API

    Le gain de performances qu’apportent les architectures multiprocesseurs n’est pas encore exploité par le langage JavaSctipt qui ne permet pas de pratiquer la programmation parallèle.

    Plusieurs géants de l’écosystème de l’IT, dont Intel, Google et Mozilla ont travaillé de concert pour faire du parallélisme une réalité pour les applications JavaScript.

    C’est ainsi qu’est né le projet SIMD.js, une API qui introduit de nouveaux types et fonctions pour permettre aux développeurs JavaScript de booster les performances de leurs applications, grâce à l’exploitation du parallélisme.

    SIMD.js permet aux développeurs de créer de nouvelles classes d’applications de calcul intensif telles que les jeux, des animations, etc. en JavaScript, sans avoir besoin de s’appuyer sur des extensions ou du code natif « non portable ».

    L’API repose sur le projet open source d’Intel baptisé SIMD (Single Instruction Multiple Data), qui permet d’accélérer les performances des applications grâce à l’utilisation du parallélisme pour traiter simultanément la même opération sur plusieurs éléments de données. SIMD est une technique très populaire pour accélérer le calcul dans les graphiques, l’audio, les codecs, la cryptographie, les simulations en physique et bien plus.

    SIMD.js permet donc d’exposer des interfaces de haut niveau SIMD aux applications JavaScript. Actuellement, le projet supporte les plateformes x86 et les plateformes ARM NEON et ESS. Des travaux sont cours pour l’étendre à plusieurs autres plateformes.

    À l’origine, le projet est dérivé de la spécification Dart SIMD. Il a évolué rapidement pour devenir une API plus générale, avec de nouveaux cas d’utilisation. L’API a été approuvée par le comité ECMA International TC39, responsable de la standardisation de la norme ECMAscript. Elle pourrait donc être prise en compte dans la prochaine spécification du langage JavaScript.

    Une version de SIMD.js peut être testée dans Firefox Nightly. Le projet est en cours d’examen par l’équipe Internet Explorer de Microsoft et un prototype est en cours de développement sur une branche de Chrome. Des démonstrations effectuées lors de la conférence IDF14 sont également disponibles en ligne.

    La spécification de l'API SIMD.js

    Les démos de SIMD.js à l'IDF14

    Source : Mozilla


    Et vous ?

    Que pensez-vous de SIMD.js ? L’avez-vous testé ?
    Vous souhaitez participer aux rubriques .NET ? Contactez-moi

    Si déboguer est l’art de corriger les bugs, alors programmer est l’art d’en faire
    Mon blog, Mes articles, Me suivre sur Twitter
    En posant correctement votre problème, on trouve la moitié de la solution

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    126
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 126
    Points : 351
    Points
    351
    Par défaut
    Citation Envoyé par Hinault Romaric Voir le message
    Le gain de performances qu’apportent les architectures multiprocesseurs n’est pas encore exploité par le langage JavaSctipt qui ne permet pas de pratiquer la programmation parallèle.
    Les web worker ne sont-ils pas une forme de programmation parallèle ?

  3. #3
    Expert éminent
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Points : 9 127
    Points
    9 127
    Par défaut
    lorsque Romaric dit que JS ne permet pas la programmation parallèle il parle du langage.

    le langage défini par la norme ecmascript ne contient rien permettant de faire du multi processing.

    Js est utilisé dans le navigateur qui lui implémente la norme HTML 5et celle-ci contient les webworker
    ceux-ci sont implémenté au niveau du navigateur. comme le prévois la norme ecmascript js est alors complété d'objets de l'environnement d'exécution en premier lieur le DOM qui est présent au travers de l'objet document. le navigateur présent au travers de l'objet navigator et la fenêtre présente au travers de l'objet window etc...

    ni document ni navigator ni window ne sont du javascript. il ne font pas partit du langage pas plus que la fonction toto que tu pourrait définir dans un script. il l'utilise mais ne font pas partit du langage.

    On sais depuis longtemps que les langage type JS sont bien adapté à une utilisation en parallèle. cela est du à la gestion des portée de variables au closures et à la capacité à passer des fonction en paramère.

    A+JYT

  4. #4
    MikeRowSoft
    Invité(e)
    Par défaut
    Je l'ai pas testé. Mais je sais d'expérience que le parallélisme de processus est beaucoup plus MIMD ou MISD. Le SIMD étant utile principalement lorsque l'on souhaite faire des historiques d'états des attributs en mémoires. Se qui permet par exemple de revenir grâce à une pile à un état précédent d'un attribut du programme juste avant qu'il ne bogue par exemple. La suite est facile à deviner.

  5. #5
    Membre éclairé Avatar de rt15
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2005
    Messages
    262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2005
    Messages : 262
    Points : 665
    Points
    665
    Par défaut
    Il me semble que l'article peut porter à confusion.

    A priori ce n'est pas une librairie conçue pour exploiter "les architectures multiprocesseurs". Ce n'est pas une librairie de parallélisme au sens de plusieurs threads s'exécutant sur n coeurs ou n processeurs.
    Cette librairie n'a absolument rien à voir avec les web workers.

    C'est une librairie... SIMD. Single Instruction, Multiple Data. Il suffit de regarder la page du projet pour s'en convaincre.

    Comme son nom l'indique, ça permet de faire la même opération sur plusieurs données. En gros on peut faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    i = i * 2 + 1;
    j = j * 2 + 1;
    k = k * 2 + 1;
    En "une seule instruction". Mais tout ça est réalisé par un seul thread. Ce type d'opération est supporté depuis bien longtemps par les processeurs (Y compris mono coeurs) via des extensions au jeu d'instruction telles que SSE et MMX.

    (En fait ça ressemble beaucoup au parallélisme des cartes graphiques, qui malgré une fréquence moindre, sont plus rapides pour des calculs spécifiques car ils sont réalisés en parallèle).

    Les avantages est que ça permet de faire certains calculs plus vite. Mais il faut que ces calculs rentre dans le moule du jeu d'instruction du processeur et donc dans le moule de SIMD.js dans ce cas précis.
    Bref c'est réservé à certains cas d'usage pas forcément très courant en javascript.

  6. #6
    MikeRowSoft
    Invité(e)
    Par défaut
    Je dirais plutôt qu'en utilisant comme langage de compréhension système l'assembleur c'est d'avoir préparé un certain nombres d'informations et de les traités sur les mêmes cycles d'horloges (ou pas) en parallèle dans des registres différents.

    Après les librairies comme MPI offre une plus vaste approche en proposant de sortir du système local pour avoir une vision de "grappes" (cluster) ou réseaux de communications entre systèmes (entités) de traitements et bibliothèques d'informations qui fonctionnent sous des méthodes de parallélisme (système distribué il me semble).

    Mais là c'est pas vraiment du graphique mais plutôt du Super Calculateur de base CPU pur et dur. CPU qui à vraiment de grave lacune avec un FPU qui s'essouffle face au GPGPU.
    Dernière modification par MikeRowSoft ; 06/11/2014 à 12h25.

  7. #7
    Invité
    Invité(e)
    Par défaut
    http://fr.wikipedia.org/wiki/Streaming_SIMD_Extensions

    (sifflement), la vache, il aura fallut tant d'années pour que les langage de haut niveaux s'intéressent à l'exploitation en profondeur du CPU ?

    Blague a part, a quant l'exploitation de l'AVX 2 ?


    PS: vous avez 15 ans de retard compté à ce jour

  8. #8
    Futur Membre du Club
    Inscrit en
    Mars 2005
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 6
    Points : 6
    Points
    6
    Par défaut
    Whoaa... T.T
    Cet article est du grand n'importe quoi, clairement l'auteur n'a rien compris au sujet, et mélange tout.
    Sérieusement, il ne faut pas laisser ce contenu, les lecteurs vont en ressortir plus bêtes qu'avant lecture ^^'.

    Par contre, rt15 lui a bien compris de quoi il s'agit, et ses explications sont justes ^.^
    Merci à lui de relever le niveau, et d'apporter des corrections.

    SIMD, c'est du parallélisme d'instructions.
    Donc ça se joue au niveau du CPU, au niveau d'un core et de ses registres.
    Ca existait déjà sur les CPU mono-core.
    Rien à voir avec "les architectures multiprocesseurs", rien à voir avec ce qu'on appelle la "programmation parallèle", rien à voir avec le fait d'avoir plusieurs threads, rien à voir avec les WebWorkers, etc.

    Tant qu'on n'a pas coder en utilisant les instructions SIMD, il est très difficile de comprendre la complexité du truc.
    Et effectivement, c'est vieux comme "techno", mais ça réponds à des besoins tellement spécifiques, avec masse de calcul (assez similaires) à faire (et sur des données linéaires, bien organisées, et alignées en mémoire selon la machine), que ça n'avait pas sa place dans JS jusqu'à récemment.

    Ce qui est dommage ce n'est pas tant que les langages de haut niveau ne s'intéressent pas au bas niveau hardware, car comme dit, sans besoin réel ça n'avait aucun sens, mais plutôt que les dev eux ne se renseigne pas plus.
    Du moins à mon sens ^^

  9. #9
    Nouveau membre du Club
    Profil pro
    Ingénieur
    Inscrit en
    Novembre 2007
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur

    Informations forums :
    Inscription : Novembre 2007
    Messages : 18
    Points : 34
    Points
    34
    Par défaut (hors sujet ?) langages de haut niveau et hardware
    ishraam:
    > ...Ce qui est dommage ce n'est pas tant que les langages de haut niveau
    > ne s'intéressent pas au bas niveau hardware...


    Julia (http://julialang.org) est un langage récent dont la première communication officielle date de février 2012 (début des travaux en 2009).

    Julia est gratuit, multi-plateforme, basé sur LLVM (comme le compilateur c++ `Clang` : et on peut y insérer de l'assembleur), développé essentiellement par le MIT et orienté scientifique. Julia est inspiré de Matlab, Ruby, Python,... tout en étant compatible avec la notion de copié-collé !

    Julia intégre nativement les tableaux multidimensionnels et l'algèbre linéaire et dispose d'une communautée très active autour le l'optimisation et des mathématiques appliquées en général.

    Julia est un langage dynamique typé, compilé à la volée, non orienté objet au sens classique mais qui supporte la notion de "multi-dispach" de méthodes, généralisant ainsi la notion d'objets et de méthodes virtuelles. Ses possibilités d'introspection et sa caractéristique homoiconique (comme TCL ;-) lui permette de proposer un système de macro puissant.


    Accessoirement, la page d'accueil de Julia (tableau comparatif des performances) montre que les performances de certaines machines Javascript sont loin d'être ridicules devant d'autre langages dit "classiques".


    -- Maurice

  10. #10
    Membre confirmé

    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    311
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 311
    Points : 545
    Points
    545
    Par défaut
    Citation Envoyé par ishraam Voir le message
    SIMD, c'est du parallélisme d'instructions.
    Donc ça se joue au niveau du CPU, au niveau d'un core et de ses registres.
    Ca existait déjà sur les CPU mono-core.
    Rien à voir avec "les architectures multiprocesseurs", rien à voir avec ce qu'on appelle la "programmation parallèle", rien à voir avec le fait d'avoir plusieurs threads, rien à voir avec les WebWorkers, etc.
    Certes les instructions SSE et MMX date du XXe siècle, a une époque où les CPUs étaient mono-core et les cartes graphiques ne s’occupaient pas encore du pipeline géométrique

    Mais je suppose qu’elles ont évolués avec les architectures, et j’ai constaté sur mes kernels (micro-programme blindé d’instruction SIMD), une parallélisassions des calculs efficace sur des architectures multi-cores, avec le Pixel Bender Runtime de Flash Player 10 (qui a été abandonnée depuis version 11 )

    Pour moi le type de "programmation parallèle" est avant tout d’utiliser un paradigme de type kernel/pipeline, donc ce type de programmation est déjà partiellement disponible, sur navigateur, via WebGL, qui permet, en détournant un peu l’API, de paralléliser d’autre chose que de la rasterisation graphique , cf : les SoundShader de ShaderToy !

    Ensuite je pense que l’API SIMD.js sera surtout utilisé pour améliorer les performances les portages des librairies de simulation physique écrite en C/assembleurs et compilé par une LLVM type Emscripten

    Citation Envoyé par mdiam
    Accessoirement, la page d'accueil de Julia (tableau comparatif des performances) montre que les performances de certaines machines Javascript sont loin d'être ridicules devant d'autre langages dit "classiques".
    Attention, car si les moteurs JavaScripts sont devenu aussi rapide que Java ou DotNet, une fois embarqué dans un navigateur, on déchante rapidement ! Je remarque un facteur 10 quand je passe du code de NodeJS (moteur V8) à Chrome (moteur V8 également)
    ShaderElement : Bénéficier de l’accélération graphique simplement par une nouvelle balise HTML <shader>
    ODE.js : portage JavaScript du célèbre moteur physique 3D Open Dynamics Engine

Discussions similaires

  1. Réponses: 7
    Dernier message: 22/06/2014, 15h44
  2. Cluster Studio XE : lancez-vous dans l’univers de la programmation parallèle
    Par Hinault Romaric dans le forum Programmation parallèle, calcul scientifique et de haute performance (HPC)
    Réponses: 0
    Dernier message: 12/11/2013, 17h23
  3. Cluster Studio XE : lancez-vous dans l’univers de la programmation parallèle
    Par Hinault Romaric dans le forum Programmation parallèle, calcul scientifique et de haute performance (HPC)
    Réponses: 1
    Dernier message: 09/07/2013, 22h34
  4. River Trail : une extension permettant la programmation parallèle en JavaScript
    Par Hinault Romaric dans le forum Général JavaScript
    Réponses: 0
    Dernier message: 19/09/2011, 12h36
  5. liste déroulante asp dans javascript
    Par croco83 dans le forum ASP
    Réponses: 6
    Dernier message: 12/05/2004, 18h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo