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

Algorithmes et structures de données Discussion :

Une étude compare différents langages pour le calcul intensif


Sujet :

Algorithmes et structures de données

  1. #1
    Rédacteur

    Avatar de Davidbrcz
    Homme Profil pro
    Ing Supaéro - Doctorant ONERA
    Inscrit en
    Juin 2006
    Messages
    2 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ing Supaéro - Doctorant ONERA

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 307
    Points : 4 732
    Points
    4 732
    Par défaut Une étude compare différents langages pour le calcul intensif
    Une étude compare différents langages pour le calcul intensif
    Le résultat va-t-il vous faire changer de langage ?


    Une équipe universitaire a sorti une étude comparant différents langages pour le calcul intensif. L'étude se base sur un modèle économique mais peut être appliqué à d'autres domaines.

    Ils ont comparé

    • C++11
    • Fortran 2008
    • Java
    • Julia
    • Python
    • MATLAB
    • Mathematica
    • R


    Afin de na pas biaiser les résultats, ils n'ont en général pas cherché à tirer profit des particularités de chaque langage. L'étude ne commente pas la difficulté à porter l'algorithme dans un langage donné.

    Les résultats principaux sont :

    • Le C++ et Fortran tiennent toujours les meilleures performances
    • L'avantage du C++ sur le Fortran n'est que de 5-7%
    • Julia avec son compilateur JIT donne un exécutable qui tourne en moyenne 2.7 fois plus lentement que le meilleur programme C++
    • L’implémentation Pypy donne un programme 44 fois plus lent que celui en C++. Quant a l’Interpréteur CPython, la facteur oscille entre 155 et 269
    • Utiliser Numba (un compilateur JIT Python) , demande de revoir un peu le code mais donne des performances très proches du C++ (1.6 plus lent en moyenne)
    • MATLAB est entre 9 et 11 fois plus lent que le C++. Mais combiné avec des fichiers Mex, la différence tombe entre 1.24 et 1.64
    • R est entre 500 et 700 fois plus lent que le C++. Compiler le code augmente par deux la performance
    • Mathematica donne de bonnes performances (4 fois lent que le C++) mais au prix d'un grand effort de ré-écriture de code pour tirer parti des optimisations du langage,


    Les résultats détaillés sont ici et le code est accessible sur Github

    Cette étude va-t-elle vous faire changer de langage pour vos applications lourdes en calcul ?
    "Never use brute force in fighting an exponential." (Andrei Alexandrescu)

    Mes articles dont Conseils divers sur le C++
    Une très bonne doc sur le C++ (en) Why linux is better (fr)

  2. #2
    Membre éprouvé Avatar de Shuty
    Homme Profil pro
    Ingénieur en développement
    Inscrit en
    Octobre 2012
    Messages
    630
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur en développement
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2012
    Messages : 630
    Points : 1 174
    Points
    1 174
    Par défaut
    Citation Envoyé par Davidbrcz Voir le message
    ...
    • Le C++ et Fortran tiennent toujours les meilleures performances
    • L'avantage du C++ sur le Fortran n'est que de 5-7%
    • Julia avec son compilateur JIT donne un exécutable qui tourne en moyenne 2.7 fois plus lentement que le meilleur programme C++
    • L’implémentation Pypy donne un programme 44 fois plus lent que celui en C++. Quant a l’Interpréteur CPython, la facteur oscille entre 155 et 269
    • Utiliser Numba (un compilateur JIT Python) , demande de revoir un peu le code mais donne des performances très proches du C++ (1.6 plus lent en moyenne)
    • MATLAB est entre 9 et 11 fois plus lent que le C++. Mais combiné avec des fichiers Mex, la différence tombe entre 1.24 et 1.64
    • R est entre 500 et 700 fois plus lent que le C++. Compiler le code augmente par deux la performance
    • Mathematica donne de bonnes performances (4 fois lent que le C++) mais au prix d'un grand effort de ré-écriture de code pour tirer parti des optimisations du langage,

    Et le java du coup... ?
    Agence web Dim'Solution, créateur de solutions numériques
    Sites internet, ecommerce, logiciels, applications mobiles, référencement (SEO), plugin Prestashop, Magento, WordPress, Joomla!...

    Cours de trading gratuit | Envoyer des sms gratuitement | Envoyer des fax gratuitement | Plateforme de Fax à l'international

  3. #3
    Membre éclairé Avatar de Grabeuh
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2009
    Messages
    114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

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

    Informations forums :
    Inscription : Février 2009
    Messages : 114
    Points : 653
    Points
    653
    Par défaut
    Citation Envoyé par Shuty Voir le message
    Et le java du coup... ?
    Il mouline toujours...

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 16
    Points : 22
    Points
    22
    Par défaut
    Il faut allez voir les résultats complets....
    java 2.69 fois plus lent 3 ème.

  5. #5
    Membre régulier
    Inscrit en
    Octobre 2006
    Messages
    108
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 108
    Points : 118
    Points
    118
    Par défaut
    Citation Envoyé par Grabeuh Voir le message
    Il mouline toujours...
    la méthode de comparaison est assez mal faite :
    • Les calculs ne sont faits qu'une fois par exécution, alors que parmi les langages testés certains sont compilés à la volée (Java, langages de script, ...). N'exécuter le test qu'une fois fait que le temps de compilation est compté dans le temps de calcul...
    • Les options d'exécution ne sont pas étudiées (par exemple -server pour du Java est quand même la moindre des choses pour du calcul intensif).

    Résultat: sur mon PC (pas une bête de course), avec ces simples points, le temps de calcul Java passe de 2.5s à 1.9s...

    Avec ce genre de conditions d'analyse, les résultats ne veulent pas dire grand chose

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Citation Envoyé par Davidbrcz Voir le message
    Afin de na pas biaiser les résultats, ils n'ont en général pas cherché à tirer profit des particularités de chaque langage.
    Bah c'est complètement débile

    Quand on utilise un langage particulier pour une tâche donnée, c'est généralement parce qu'il y est particulièrement adapté. Je me fous pas mal de savoir si X est plus rapide que Y sans utiliser les particularités de Y ; si justement ces particularités permettent à Y d'être plus rapide pour la tâche que je dois effectuer, c'est Y que je choisirai, parce qu'il est plus adapté.

    Un langage n'est pas "meilleur" ou "plus performant" qu'un autre dans l'absolu, il faut utiliser le plus approprié à chaque besoin et c'est tout...

  7. #7
    Membre habitué

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 90
    Points : 154
    Points
    154
    Par défaut
    Surtout si tu peux optimiser ça via le compilateur , autrement ça n'a pas de sens .

  8. #8
    Membre expérimenté Avatar de nchal
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    512
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Haute Savoie (Rhône Alpes)

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

    Informations forums :
    Inscription : Avril 2012
    Messages : 512
    Points : 1 654
    Points
    1 654
    Par défaut
    Il y a un concours organisé pour savoir qui va arriver à pondre l'étude la plus débile ? Parce qu'en ce moment, on est bien servi.

    Si on me dit, "on va comparer les performances en cherchant à optimiser le code le plus possible suivant le langage", je dis OUI, un grand OUI. On sait tous que le C++ est le plus rapide, mais on ne sait pas si le Java est 15x ou 2x plus lent, et ça peut-être intéressant comme info. Mais l'étude se présente comme un bête copier-coller entre les langages, alors qu'il aurait pu sortir quelques préco sur comment programmer ou configurer la JVM par exemple pour optimiser les perfs Java.
    Si la réponse vous convient, un petit ça encourage.
    Avant tout nouveau post, pensez à : la FAQ, Google et la fonction Recherche
    Si vous devez poster, pensez à: Ecrire en français, la balise [CODE] (#) et surtout

  9. #9
    Membre extrêmement actif
    Homme Profil pro
    Graphic Programmer
    Inscrit en
    Mars 2006
    Messages
    1 537
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Graphic Programmer
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 537
    Points : 3 909
    Points
    3 909
    Par défaut
    Citation Envoyé par Grabeuh Voir le message
    Il mouline toujours...
    Que'st ce que j'ai rit merci.

    M'enfin ont peut dire ce qu'on veut, pour le C++ et le fortran, on discute jamais tout le monde est d'accord, et comme par hazard, le java on critique toujours plein de trucs donc la methode..
    c'est bien la preuve que le java est une horreur sur patte

  10. #10
    Modérateur
    Avatar de Gugelhupf
    Homme Profil pro
    Analyste Programmeur
    Inscrit en
    Décembre 2011
    Messages
    1 320
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Analyste Programmeur

    Informations forums :
    Inscription : Décembre 2011
    Messages : 1 320
    Points : 3 740
    Points
    3 740
    Billets dans le blog
    12
    Par défaut
    Tu peux augmenter la mémoire pour Java mais je ne vois pas trop ce qui pourrait changer, sachant que pour faire leur bench ils utilisent un petit tableau.
    Je le trouve un peu moyen leur bench, il y a mieux ici (avec plus de langages, et pas de copier/coller d'algorithme entre les langages).
    N'hésitez pas à consulter la FAQ Java, lire les cours et tutoriels Java, et à poser vos questions sur les forums d'entraide Java

    Ma page Developpez | Mon profil Linkedin | Vous souhaitez me contacter ? Contacter Gokan EKINCI

  11. #11
    Membre extrêmement actif
    Homme Profil pro
    Graphic Programmer
    Inscrit en
    Mars 2006
    Messages
    1 537
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Graphic Programmer
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 537
    Points : 3 909
    Points
    3 909
    Par défaut
    Citation Envoyé par tomlev Voir le message
    Bah c'est complètement débile

    Quand on utilise un langage particulier pour une tâche donnée, c'est généralement parce qu'il y est particulièrement adapté. Je me fous pas mal de savoir si X est plus rapide que Y sans utiliser les particularités de Y ; si justement ces particularités permettent à Y d'être plus rapide pour la tâche que je dois effectuer, c'est Y que je choisirai, parce qu'il est plus adapté.

    Un langage n'est pas "meilleur" ou "plus performant" qu'un autre dans l'absolu, il faut utiliser le plus approprié à chaque besoin et c'est tout...
    enfin la c'est meme pas le langage en lui meme qui est dritiqué, c'est plutot les compilateurs/interpreteur voir la methode d'execution, parce que a ce compte la en assembleur ca va etre galere de faire des op matricielle mais on peut y arriver ( quand tu voit ce qu'arrive a faire les gars des demo 4k en full asm ), apres tout au final le seul langage executé par le proc c'est l'assembleur

  12. #12
    Membre extrêmement actif
    Homme Profil pro
    Graphic Programmer
    Inscrit en
    Mars 2006
    Messages
    1 537
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Graphic Programmer
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 537
    Points : 3 909
    Points
    3 909
    Par défaut
    Moi ce qui m'a fait choisir le C++, c'est les possibilités offettes pas le langage, on peut quasiment tout faire, voir integrer du code asm. Quitte à y passer des années si on doit en maitriser un autant que s'en soit un qui puisse tout faire ou presque. mais qui soit quand meme plutot accessible. (l'assembleur est pas vraiment accessible a mon sens ou sur certain fonction, comme les fonction matricielle de base )
    Java ou C# on est bloqué, déja rien que de penser qu'il y a un ramasse miette en tache de fond et qui se declenche quand bon lui semble sans qu'on puisse y faire grand chose, ca me fou la migraine...
    Si je veux un ramasse miette je peux me le faire en c++, mais quel interet, les pointeurs c'est tellement bien que franchement en avoir peur est absurde. oui c'est sur faut savoir ce qu'on fait c'est tout.

  13. #13
    Expert éminent
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2007
    Messages
    2 161
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2007
    Messages : 2 161
    Points : 7 952
    Points
    7 952
    Par défaut
    Un langage de haut niveau est justement fait pour abstraire la technique non liée à ton algorithme. (ainsi, le développeur peut se concentrer sur les fonctionnalité de son programme et non sur la technicité de son matériel qui le détourne de la raison même pour laquelle il développe)
    Après, je ne dis pas qu'il faut faire n'importe quoi ou que le garbage collector de Java est bien fait, mais là est l'idée.

    Un développeur ne programme pas pour la beauté du geste (ça n'a aucun sens).
    Un développeur programme des fonctionnalités.
    Toute l'intention du développeur se doit d'être concentrée là dessus et les considérations techniques le détournent de cet objectif.
    C'est la raison pour laquelle de plus en plus d'API permettent de faire de la génération de code par des annotations.

    OK, côté perf, le C++ est meilleurs que Java, pas trop de débat là dessus.
    Côté accessibilité, rapidité de développement, lisibilité du code, maintenance et portabilité : Java passe devant

  14. #14
    Débutant
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    688
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 688
    Points : 176
    Points
    176
    Par défaut
    c++

  15. #15
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 40
    Points : 27
    Points
    27
    Par défaut
    Dommage, il n'y a pas de test sur Linux.
    en sachant que pratiquement tous les super calculateurs sont sur Linux

  16. #16
    Membre régulier
    Profil pro
    Inscrit en
    Février 2012
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 48
    Points : 105
    Points
    105
    Par défaut
    Citation Envoyé par nchal Voir le message
    Si on me dit, "on va comparer les performances en cherchant à optimiser le code le plus possible suivant le langage", je dis OUI, un grand OUI. On sait tous que le C++ est le plus rapide, mais on ne sait pas si le Java est 15x ou 2x plus lent, et ça peut-être intéressant comme info. Mais l'étude se présente comme un bête copier-coller entre les langages, alors qu'il aurait pu sortir quelques préco sur comment programmer ou configurer la JVM par exemple pour optimiser les perfs Java.
    L'exemple en python est assez éloquent.
    Le code de base, un script impératif de base, sans fonction, est ~200x plus lent que le code en C. En factorisant un poil (on déplace 10 lignes de code de la boucle principale pour les mettre dans une fonction, on déclare la fonction et on ajoute un décorateur), on arrive à un facteur 1.57x plus lent que le code en C. C'est complètement absurde.
    En utilisant un poil les fonctionnalités/écosystème du langage, on arrive à des résultats qui n'ont plus rien à voir.

  17. #17
    Membre régulier
    Profil pro
    Inscrit en
    Février 2012
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 48
    Points : 105
    Points
    105
    Par défaut
    Citation Envoyé par Davidbrcz Voir le message
    Cette étude va-t-elle vous faire changer de langage pour vos applications lourdes en calcul ?
    Non, parce que je suis développeur :
    In this paper, we take a first step at correcting this unfortunate situation. The target au-
    dience for our results is younger economists (graduate students, junior faculty) or researchers
    who have used the computer less often in the past for numerical analysis and who are searching
    for guideposts in their first incursions into computation.
    En gros, la cible est le jeune économiste tout droit sortis de l'école, ou le chercheur pas très doué avec la programmation. Rien de honteux, on ne peux pas masteriser dans tous les domaines. Et avec cette cible en tête, l'étude semble beaucoup moins absurde, on veut le langage avec les meilleurs perfs avec du code pas forcément idiomatique.
    Mais sur developpez.com, la cible n'est pas le jeune économiste, c'est le développeur. Et donc, venir nous poser ce genre de questions avec ce genre d'études, je trouve ça grotesque.

  18. #18
    Membre confirmé

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

    Informations forums :
    Inscription : Octobre 2003
    Messages : 298
    Points : 484
    Points
    484
    Par défaut
    Citation Envoyé par cueffic Voir le message
    Dommage, il n'y a pas de test sur Linux.
    en sachant que pratiquement tous les super calculateurs sont sur Linux
    Dommage surtout qu'il n'y a pas de tests de calculs intensifs
    Le test est basé sur un vecteur de 17.000 entrées. C'est à dire peanuts !
    En ce moment traiter une matrice de 500.000 entrées, ça me prend juste quelques secondes en java sur une vieille rogne (un amd athlon) et sans aucune recherche d'optimisation.

  19. #19
    Membre confirmé
    Profil pro
    Retraité
    Inscrit en
    Novembre 2009
    Messages
    329
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2009
    Messages : 329
    Points : 606
    Points
    606
    Par défaut
    Pour que la discussion ne tourne pas en rond, reste à définir ce qu'on entend par "calcul intensif" (calcul linéaire, bases de données,...) et à quel type de machine on s'intéresse.

    Pour les "supercomputers", il n'y a pas photo: la référence c'est le Top500 (http://www.top500.org/project/introduction/) basé sur LINPACK et bien évidemment orienté vers le calcul linéaire.

    [troll] Avec la mentalité actuelle, rien ne m'empêche de qualifier de calcul intensif un run de 48 heures sur mon PC personnel, ce qui ne correspond évidemment pas à l'ordre de grandeur des performances que nécessite les prévisions météorologiques de la Météo Nationale.[/troll]
    GraceGTK: a plotting tool at https://sourceforge.net/projects/gracegtk

  20. #20
    En attente de confirmation mail

    Profil pro
    Inscrit en
    Septembre 2013
    Messages
    639
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2013
    Messages : 639
    Points : 2 347
    Points
    2 347
    Par défaut
    N'est-ce pas juste une opération de communication de plus pour nous faire gober que le C++ est le seul langage de programmation valable ?

    [TROLL]Alors que c'est un calvaire d'écrire quoi que ce soit dans ce langage[/TROLL]

Discussions similaires

  1. Réponses: 29
    Dernier message: 27/12/2016, 13h28
  2. Réponses: 0
    Dernier message: 06/06/2011, 13h47
  3. Meilleur langage pour une erlation bdd
    Par Captain_JS dans le forum Décisions SGBD
    Réponses: 1
    Dernier message: 15/03/2005, 14h44
  4. Quel langage pour envoyer un fichier sur une adresse
    Par dai.kaioh dans le forum Développement
    Réponses: 2
    Dernier message: 02/04/2004, 17h38

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