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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  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 : 33
    Localisation : Suisse

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

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 307
    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 très actif 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
    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... ?

  3. #3
    Membre confirmé 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
    Par défaut
    Citation Envoyé par Shuty Voir le message
    Et le java du coup... ?
    Il mouline toujours...

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

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

  5. #5
    Membre confirmé
    Inscrit en
    Octobre 2006
    Messages
    108
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 108
    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
    Membre extrêmement actif
    Homme Profil pro
    Graphic Programmer
    Inscrit en
    Mars 2006
    Messages
    1 629
    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 629
    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

  7. #7
    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 : 43
    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
    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...

  8. #8
    Membre confirmé

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

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

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

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

    Informations forums :
    Inscription : Avril 2012
    Messages : 512
    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.

  10. #10
    Modérateur
    Avatar de Gugelhupf
    Homme Profil pro
    Analyste Programmeur
    Inscrit en
    Décembre 2011
    Messages
    1 326
    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 326
    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 éclairé
    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
    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.

  12. #12
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Sekigo Voir le message
    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.
    Croyez-moi c'est réaliste, j'ai travaillé avec un économètre qui codait en python , ce genre "d’optimisation" il n'y aurait JAMAIS pensé

  13. #13
    Membre extrêmement actif
    Homme Profil pro
    Graphic Programmer
    Inscrit en
    Mars 2006
    Messages
    1 629
    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 629
    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

  14. #14
    Membre extrêmement actif
    Homme Profil pro
    Graphic Programmer
    Inscrit en
    Mars 2006
    Messages
    1 629
    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 629
    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.

  15. #15
    Membre éprouvé
    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
    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

  16. #16
    Membre extrêmement actif
    Homme Profil pro
    Graphic Programmer
    Inscrit en
    Mars 2006
    Messages
    1 629
    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 629
    Par défaut
    Citation Envoyé par Saverok Voir le message
    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
    je suis d'accord avec toi mais je pense qu'il est illusoire de penser que peut importe comment l'on code, le compilateur ou l'interpetreuir soit capable de faire le meilleur code, le moin consommatteur de cycle et de memoire vive.

    Moi je code avant tout pour la perf et j'implemente fonction de ce que le langage me permet et l'utilisation des pointeurs reduit de beaucoup la complexite des implementation sans comtper la rapidité en c++.
    C'est sur que l'implementation sera specifique et pas forcement convertible facilement au java ou au c# ou tout est objet, mais je vais pas laisser a un process automatique, dont je ne controle pas le processus, les optimisations que je peux faire moi meme.

    Si on code extremement reutilisable on peut vouloir utiliser des regles d'implementation basique aisement comprehensible par n'importe qui et laisser de toute facon comme c'est à la mode la sur-puissance des becanes gérer le code non optimisé comme si c'était du code opti sur un 386. par contre si on code du code rapide avec une faible emprunte memoire, alors bien connaitre le langage et la facon dont le compilateur va traiter telle protion de code est obligatoire et forcement moins à la portée, mais au fond, vous c'est quand meme bien que l'implementation soit aussi soignement faite que la conception de l'algo.

    et qui dit langage de haut niveau dans ton example dit langage livré avec framework. et la pardon, charger en memoire le framework alors qu'on a besoin de 4 fonctions c'est une abbération à mon sens. j'aime coder ce que je comprends. et la couche d'abstraction fournie par les framework me pose probleme.

    Non seulment je comprends pas comment il focntionne en interne et au 1er bug venu toute mon implementation tombe en morceau.
    je dis pas qu'il faut tout reccrire, mais a force de ce reposer sur tout un tas de truc ecrit par d'autre sur le seul avantage qu'on n'as quasiment plus qu'a convetir l'algo textuellement est trop cher payé. enfin totu depend de la criticté de l'algo en question pour la focntionnalité voulu.

  17. #17
    Membre très actif
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    688
    Détails du profil
    Informations personnelles :
    Localisation : France

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

  18. #18
    Membre actif
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

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

  19. #19
    Membre éclairé

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

    Informations forums :
    Inscription : Octobre 2003
    Messages : 298
    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.

  20. #20
    Membre éclairé
    Profil pro
    Retraité
    Inscrit en
    Novembre 2009
    Messages
    331
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2009
    Messages : 331
    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]

Discussions similaires

  1. Réponses: 29
    Dernier message: 27/12/2016, 12h28
  2. Réponses: 0
    Dernier message: 06/06/2011, 12h47
  3. Meilleur langage pour une erlation bdd
    Par Captain_JS dans le forum Décisions SGBD
    Réponses: 1
    Dernier message: 15/03/2005, 13h44
  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, 16h38

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