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

Affichage des résultats du sondage: Quel est le meilleur langage pour la programmation parallèle ?

Votants
127. Vous ne pouvez pas participer à ce sondage.
  • C

    29 22,83%
  • C++

    45 35,43%
  • Java

    23 18,11%
  • Lisp

    4 3,15%
  • Scala

    14 11,02%
  • F#

    3 2,36%
  • D

    3 2,36%
  • Haskell

    11 8,66%
  • Ruby

    0 0%
  • C#

    21 16,54%
  • Python

    8 6,30%
  • Erlang

    8 6,30%
  • Ada

    2 1,57%
  • MATLAB

    3 2,36%
  • Fortran

    2 1,57%
  • occam

    4 3,15%
  • Autre

    8 6,30%
Sondage à choix multiple
Programmation parallèle, calcul scientifique et de haute performance (HPC) Discussion :

Quel est le meilleur langage pour la programmation parallèle ?


Sujet :

Programmation parallèle, calcul scientifique et de haute performance (HPC)

  1. #1
    Responsable Qt & Livres


    Avatar de dourouc05
    Homme Profil pro
    Ingénieur de recherche
    Inscrit en
    Août 2008
    Messages
    26 695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur de recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2008
    Messages : 26 695
    Points : 188 898
    Points
    188 898
    Par défaut Quel est le meilleur langage pour la programmation parallèle ?
    Petit sondage pour l'ouverture de ce forum : quel langage trouvez-vous le meilleur pour la programmation parallèle/concourante ?

    Le but n'est pas d'avoir une suite de réactions disant que tel langage est meilleur, sans plus d'explications : pourquoi tel langage vous semble-t-il le plus approprié pour la programmation parallèle ? Quels sont les éléments qui vous font pencher en sa faveur : les outils disponibles, la syntaxe... ?

    Peut-être un paradigme de programmation vous semble plus approprié que les autres : impératif, objet, fonctionnel, logique... ?

    Exprimez-vous dans le sondage et précisez votre opinion en répondant à ce message, de manière aussi constructive et détaillée que possible !


  2. #2
    Modérateur
    Avatar de gangsoleil
    Homme Profil pro
    Manager / Cyber Sécurité
    Inscrit en
    Mai 2004
    Messages
    10 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Manager / Cyber Sécurité

    Informations forums :
    Inscription : Mai 2004
    Messages : 10 150
    Points : 28 129
    Points
    28 129
    Par défaut
    Bonjour,

    Pour moi, le C est l'un des langages de la programmation parallele, car il est suffisamment bas niveau pour permettre d'interragir finement avec la machine.

    Mais bien sur, outre le langage, la bibliotheque parallele, et plus encore son implementation, restent fondamentales. Le langage le plus adapte avec une mauvaise bibliotheque ne peut donner de bons resultats.

  3. #3
    Membre émérite

    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    3 995
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 995
    Points : 2 522
    Points
    2 522
    Par défaut
    J'aurais dit Erlang. C'est un langage pour le calcul parallèle avec mémoire distribué, et sa logique dans laquelle les variables ne peuvent être affectées qu'une seule fois et qui rend donc impossible l'accès concurrent en écriture à une donnée (puisqu'elle ne peut être écrite qu'une seule fois, si vous suivez) diminue radicalement les effets de bord et les erreurs de synchronisation. Tout passe par un transfert de message, de manière analogue à MPI.

    Sinon, Clojure, un dialecte Lisp pour la JVM, est bien aussi.

  4. #4
    Membre régulier
    Inscrit en
    Juin 2006
    Messages
    96
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 96
    Points : 72
    Points
    72
    Par défaut
    C# pour la simplicité d'utilisation.

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    309
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 309
    Points : 933
    Points
    933
    Par défaut
    Citation Envoyé par gangsoleil Voir le message
    Pour moi, le C est l'un des langages de la programmation parallele, car il est suffisamment bas niveau pour permettre d'interragir finement avec la machine.
    J'avoue ne pas voir le lien entre le début de la phrase (être adapté à la programmation parallèle) et la fin de la phrase (être bas niveau)...

    Ce sont justement les langage bas niveau qui posent le plus de soucis pour la programmation parallèle, car ils n'offrent pas les abstractions indispensables à ce genre d'activité.

  6. #6
    Responsable Qt & Livres


    Avatar de dourouc05
    Homme Profil pro
    Ingénieur de recherche
    Inscrit en
    Août 2008
    Messages
    26 695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur de recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2008
    Messages : 26 695
    Points : 188 898
    Points
    188 898
    Par défaut
    Citation Envoyé par TropMDR Voir le message
    J'avoue ne pas voir le lien entre le début de la phrase (être adapté à la programmation parallèle) et la fin de la phrase (être bas niveau)...

    Ce sont justement les langage bas niveau qui posent le plus de soucis pour la programmation parallèle, car ils n'offrent pas les abstractions indispensables à ce genre d'activité.
    Le bas niveau te permet de savoir précisément ce qui se passe sur tes processeurs, tu peux contrôler presque jusqu'à l'instruction près ce qui est exécuté, dans quel ordre, sur quel processeur, etc.

    Un peu comme quand on compare la programmation orientée objet et l'assembleur : d'un côté, du très haut niveau, c'est beaucoup plus facile à comprendre pour un être humain que l'assembleur, de l'autre côté, très proche de la machine, de ce qu'on lui demande de faire, pas de la pensée, de l'abstraction humaine.

  7. #7
    Membre éprouvé
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    309
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 309
    Points : 933
    Points
    933
    Par défaut
    Citation Envoyé par dourouc05 Voir le message
    Le bas niveau te permet de savoir précisément ce qui se passe sur tes processeurs, tu peux contrôler presque jusqu'à l'instruction près ce qui est exécuté, dans quel ordre, sur quel processeur, etc.
    C'est quoi la proportion de programmeur sur cette planète capable de comprendre "jusqu'à l'instruction près ce qui est exécuté, dans quel ordre, sur quel processeur" ? Je parie sur moins de 0,1%

  8. #8
    Responsable Qt & Livres


    Avatar de dourouc05
    Homme Profil pro
    Ingénieur de recherche
    Inscrit en
    Août 2008
    Messages
    26 695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur de recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2008
    Messages : 26 695
    Points : 188 898
    Points
    188 898
    Par défaut
    Citation Envoyé par TropMDR Voir le message
    C'est quoi la proportion de programmeur sur cette planète capable de comprendre "jusqu'à l'instruction près ce qui est exécuté, dans quel ordre, sur quel processeur" ? Je parie sur moins de 0,1%
    Et c'est bien dommage : dur de comprendre pourquoi une telle optimisation ne fonctionne pas au final, quand on reste à du très haut niveau. L'explication se situe parfois au très bas niveau. Et ce n'est pas valable que pour la programmation parallèle, c'est valable partout, même en dehors du développement ou de l'informatique : quand on sait comment fonctionnent les boutons de la machine, on peut les utiliser à bon escient.

  9. #9
    Inactif  


    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    5 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5 288
    Points : 15 617
    Points
    15 617
    Par défaut
    C'est quoi la proportion de programmeur sur cette planète capable de comprendre "jusqu'à l'instruction près ce qui est exécuté, dans quel ordre, sur quel processeur" ? Je parie sur moins de 0,1%
    Peut être la même proportion que ceux qui font de la programmation parallèle...

    Il ne faut pas se faire d'illusion, la programmation parallèle (SIMD, GPU computing) nécessite souvent (toujours ?) de connaître le bas niveau de sa machine (transfert de données, buffers, organisation des treads, etc.), simplement parce qu'il faut parfois (souvent ?) adapter l'algorithme au matériel. Je ne crois pas que ce soit possible d'écrire 1 algorithme et qu'il soit parfaitement optimisé sur n'importe quelle plateforme.
    En partant de là, un langage bas niveau sera plus intéressant puisqu'il permet de mieux adapter l'implémentation de l'algorithme.

    Mais je n'ai peut être pas une vision globale de la problématique. Ca serait intéressant d'avoir l'avis de JoelF (c'est son domaine de recherche ; et il a peut être testé aussi la programmation parallèle avec les langages fonctionnelles)

  10. #10
    Membre à l'essai
    Homme Profil pro
    Ingénieur télécom
    Inscrit en
    Février 2011
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur télécom

    Informations forums :
    Inscription : Février 2011
    Messages : 6
    Points : 12
    Points
    12
    Par défaut
    Pour ma part je trouve que les langages C/C++ (j'ai une préférence pour le C++) sont tous les deux bien adaptés. Des bonnes bibliothèques simples d'utilisation existent déjà. J'ai déjà utilisé sans aucune difficulté intelTBB, boost, Qthread et Qrunnable avec toujours les mêmes gains : à savoir proportionnel aux nombres de cœurs/ processeurs utilisés. Bien sur tous les algorithmes ont été si besoin revu afin de pouvoir fonctionner en parallèle donc différents des versions séquentielles.

    Concernant les GPU j'ai mené deux projets à terme et la compréhension du matériel est primordiale car elle influence directement l'algorithmie utilisée derrière. Il faut en effet déterminée les tailles des sous problèmes afin d'utiliser au maximum les capacité de la carte (surtout la mémoire rapide, shared memory pour ceux qui connaissent) tout en faisant attention à la propagation des erreurs qui étant différente peut conduire à des résultats différents.

    Je rejoins donc un peu l'avis de gbdivers, cependant concernant la programmation classique sur CPU une connaissance du matériel est un plus mais pas nécessaire car les bibliothèques de relativement haut niveau fonctionnent très bien, la partie algorithmique est par contre indispensable.
    Sur le GPU les deux sont à mon avis nécessaires, ou du moins pour obtenir un gain minimum d'un facteur 10

  11. #11
    Membre éprouvé Avatar de cs_ntd
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2006
    Messages
    598
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2006
    Messages : 598
    Points : 1 215
    Points
    1 215
    Par défaut
    J'ai voté C/C++ pour les raisons que l'on connait (bas niveau, librairie existantes, ...), mais aussi C# pour la "Parallel Task Library" du framework 4, et d'autres innovations du genre (instruction await, async) qui permettent des trucs vraiment sympa, et très naturellement, vraiment facilement.

    La programmation parrallele est très bien intégrée dans ce langage

  12. #12
    Membre à l'essai
    Inscrit en
    Août 2006
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 6
    Points : 11
    Points
    11
    Par défaut
    erlang !!!
    pourquoi ? concurrency done right ! en plus c'est un langage fonctionnel

  13. #13
    Membre régulier
    Homme Profil pro
    Inscrit en
    Août 2008
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Août 2008
    Messages : 56
    Points : 77
    Points
    77
    Par défaut
    LabVIEW, sans aucune hésitation!

  14. #14
    Modérateur
    Avatar de gangsoleil
    Homme Profil pro
    Manager / Cyber Sécurité
    Inscrit en
    Mai 2004
    Messages
    10 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Manager / Cyber Sécurité

    Informations forums :
    Inscription : Mai 2004
    Messages : 10 150
    Points : 28 129
    Points
    28 129
    Par défaut
    Bonjour,

    Citation Envoyé par TropMDR Voir le message
    C'est quoi la proportion de programmeur sur cette planète capable de comprendre "jusqu'à l'instruction près ce qui est exécuté, dans quel ordre, sur quel processeur" ? Je parie sur moins de 0,1%
    J'espere que tu te trompes. Pour moi, faire de la programmation parallele, ce n'est pas ecrire un programme en Fortran puis le passer dans un paralleliseur. C'est ce que font pas mal de physiciens, avec d'assez bons resultats. Mais lorsqu'ils veulent de vrais programmes paralleles, ils s'adressent a des informaticiens dont c'est le metier, et les performances sont bien meilleures.

    Si tu n'es pas capable de comprendre ce qu'est un niveau de cache, un sous-ensemble de processeurs, une communication reseau, ... Alors je ne pense pas que tu puisses apprehender toutes les contraintes de la programmation parallele.

  15. #15
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    328
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 328
    Points : 1 142
    Points
    1 142
    Par défaut
    Pour la programmation parallèle, j'aurai tendance à dire le C, notamment avec l'API MPI qui est très puissante

    Elle est d'ailleurs utilisée par le CEA et le CNRS

  16. #16
    Membre émérite

    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    3 995
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 995
    Points : 2 522
    Points
    2 522
    Par défaut
    Citation Envoyé par dourouc05 Voir le message
    Le bas niveau te permet de savoir précisément ce qui se passe sur tes processeurs, tu peux contrôler presque jusqu'à l'instruction près ce qui est exécuté, dans quel ordre, sur quel processeur, etc.

    Un peu comme quand on compare la programmation orientée objet et l'assembleur : d'un côté, du très haut niveau, c'est beaucoup plus facile à comprendre pour un être humain que l'assembleur, de l'autre côté, très proche de la machine, de ce qu'on lui demande de faire, pas de la pensée, de l'abstraction humaine.
    Le problème est au niveau de la question. Ca veut dire quoi, "le meilleur langage" ? Si c'est le langage plus efficace pour la programmation parallèle, ce n'est clairement pas le C, où on est obligé de comprendre ce qui se passe jusqu'au niveau le plus bas avant de pouvoir faire quoi que ce soit...

  17. #17
    Membre actif
    Homme Profil pro
    Développeur
    Inscrit en
    Décembre 2008
    Messages
    101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Décembre 2008
    Messages : 101
    Points : 256
    Points
    256
    Par défaut
    Très souvent, on a des algorithmes en O(N^x) ou toute la partie lourde consiste à traiter de manière séquentielle l'ensemble des données d'entrée. Pour ces cas là, où quand on les écris on sens bien que c'est pas très complexe à paralléliser, il y a la bibliothèque OpenMP qui aide énormément et qui permet de diviser le temps de calcule par 2 à 3 sur la plupart des processeurs SMP actuels.

    Elle est extrêmement simple à utiliser et donne de bons résultats, si déjà ce genre de solution étaient plus utilisées ça donnerais un bon bol d'air frais à tout les utilisateurs de CPU multi-coeur. Peut être que des langages de plus haut niveau (Java ou C#) intègre directement ce genre d'optimisation de manière transparente dans le compilateur (ou au runtime), je n'ai pas essayé.

    Mais vraiment, je ne pense pas que c'est en jouant les élitistes pour garder son bout de viande ("je suis irremplaçable parce que moi je sais faire") que l'utilisation des architectures multiprocesseurs va évoluer dans le bon sens.

  18. #18
    Membre émérite

    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    3 995
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 995
    Points : 2 522
    Points
    2 522
    Par défaut
    Citation Envoyé par ulspider Voir le message
    Pour la programmation parallèle, j'aurai tendance à dire le C, notamment avec l'API MPI qui est très puissante

    Elle est d'ailleurs utilisée par le CEA et le CNRS
    La combinaison MPI / OpenMP / OpenCL permet de faire des choses puissantes, mais pas facilement. J'aime mieux la combinaison MPJ / JOMP / JoCL. Au moins Java prend en charge une partie de la complexité !

  19. #19
    Invité
    Invité(e)
    Par défaut
    bah moi je dirai le Go ??
    après tout, c'est un langage jeune, et donc censé être adapté aux technologies modernes, et en plus il est fait pour ça...

    d'accord, il est encore loin d'être parfait, mais...

  20. #20
    Membre averti
    Inscrit en
    Mars 2008
    Messages
    283
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 283
    Points : 380
    Points
    380
    Par défaut
    Je pense que c'est plus de l'ordre du développeur que du langage.

    Les différents problèmes d’inter-blocages persistent dans presque tous les langages.

Discussions similaires

  1. Quel est le meilleur langage pour débuter la programmation ?
    Par Amine Horseman dans le forum Débats sur le développement - Le Best Of
    Réponses: 271
    Dernier message: 26/07/2016, 09h36
  2. Quel est le meilleur langage pour la programmation parallèle en 2015 ?
    Par dourouc05 dans le forum Programmation parallèle, calcul scientifique et de haute performance (HPC)
    Réponses: 7
    Dernier message: 15/05/2015, 13h34
  3. Quel est le meilleur langage pour débuter la programmation ?
    Par Amine Horseman dans le forum Actualités
    Réponses: 144
    Dernier message: 28/11/2014, 18h06
  4. Quel est le meilleur langage pour la portabilité : Windows & Linux (voire Mac) ?
    Par iubito dans le forum Débats sur le développement - Le Best Of
    Réponses: 57
    Dernier message: 27/11/2007, 00h45
  5. Réponses: 4
    Dernier message: 12/05/2007, 01h55

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