Un meilleur job mieux payé ?

Deviens chef de projet, développeur, ingénieur, informaticien

Mets à jour ton profil pro

ça m'intéresse

[News] Comparaison langages pour calcul intensif

Le , par Davidbrcz, Rédacteur
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 ?


Vous avez aimé cette actualité ? Alors partagez-la avec vos amis en cliquant sur les boutons ci-dessous :


 Poster une réponse

Avatar de forthx forthx - Membre confirmé http://www.developpez.com
le 20/07/2014 à 15:02
Il y a un bout de temps j'avais fait un petit comparatif perso basé sur une résolution de sodoku en brute force.Cela pour me faire une idée (pas pour lancer un troll web ^^) entre java/C++/asm x86 , je ne l'ai jamais publié je l'ai juste partager avec des connaissances qui m'en ont fait la demande, car je trouvais ce comparatif a peine suffisent pour se faire une idée. Quant je vois ce que l'on trouve actuellement sur la toile, finalement mon comparatif était presque scientifique

A mon humble avis si l'on veut comparer 2 langages on doit le faire sur un critère donné (vitesse d'exécution, empreinte mémoire, temps de développement, efficacité de déploiement, ...) et une équipe d'experts dans chacun des langages. Si l'on mélanges plusieurs critères les résultats sont tous sauf pertinent. On peu ajouter pleins d'autres critères, parfois même subjectifs, mais on se retrouve face a une réalité : le résultats dépend toujours en partie de l'équipe d'experts
Avatar de valkirys valkirys - Membre expérimenté http://www.developpez.com
le 20/07/2014 à 20:13
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é
Avatar de Davidbrcz Davidbrcz - Rédacteur http://www.developpez.com
le 20/07/2014 à 21:51
Citation Envoyé par Sekigo  Voir le message
Non, parce que je suis développeur :

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.

Je me permets juste réagir cette intervention.
Il est vrai que j'ai pas assez (re)contextualise la news, mea culpa.

Mais il ne faut pas oublier que dans beaucoup d'endroits (recherche entre autre), il y a aussi beaucoup de programmes qui sont pondus par chercheurs - non développeurs.Et que pour eux developpez.com est un peu un phare dans la nuit. Je pense donc que cette étude est pertinente sur ce site.
Avatar de Franck.H Franck.H - Rédacteur http://www.developpez.com
le 21/07/2014 à 8:25
M'étonne qu'ils n'ont pas pris le C également
Avatar de Aiekick Aiekick - Membre éprouvé http://www.developpez.com
le 21/07/2014 à 18:20
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.
Avatar de DonQuiche DonQuiche - Expert confirmé http://www.developpez.com
le 22/07/2014 à 0:45
Citation Envoyé par cuicui78  Voir le message
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.

Déjà on parle de calcul intensif donc le temps de chargement du framework on s'en cogne un peu. Mais même pour une appli grand public, qu'est-ce qui est le plus important ?
a) Que le programme démarre 5 ms plus lentement (temps requis par le système pour dupliquer les 20Mo du framework déjà en mémoire) et consomme 0,5% de tes 2Go de mémoire en plus ?
b) Que le programme soit exact, sans bogues, le moins coûteux à produire et à maintenir ?

j'aime coder ce que je comprends. et la couche d'abstraction fournie par les framework me pose probleme.

Que ce soit Java ou Dotnet les sources du framework sont dispos, libre à toi de les étudier. Pour ma part je ne m'en prive pas et je sais dans le détail ce que donne mon code au niveau matériel.
Avatar de kolodz kolodz - Modérateur http://www.developpez.com
le 22/07/2014 à 14:29
Cette étude va-t-elle vous faire changer de langage pour vos applications lourdes en calcul ?

Si le benchmark se base sur un calcul intensif de 1 à 2 secondes...
Chez moi, c'est le temps pour d’initialiser l'application pour qu'elle toute pendant 24/48H...
Avatar de Matthieu Vergne Matthieu Vergne - Expert confirmé http://www.developpez.com
le 28/07/2014 à 0:20
De mon point de vue, étude sans réel objectif à part alimenter les trolls. On choisit un langage sur différents critères, ce qui inclut les compétences disponibles dans le langage en question, et donc la possibilité d'avoir quelque chose d'optimisé. Comparer des performances sans exploiter des propriétés qui sont spécifiques au langage, c'est prendre une perspective générique qui n'arrive pas en pratique. Donc on se limite à du trollage général.

- Je sais faire une multiplication de tête plus rapidement que mon grand-frère ou ma petite soeur.
- Et ?
- Et ben je suis meilleur qu'eux !
- Ouais, super. Et donc je choisis qui pour remplir ma feuille de paie ?
- Excel.
Avatar de mrjuls mrjuls - Futur Membre du Club http://www.developpez.com
le 28/07/2014 à 12:31
J'aurais bien aimé voir le C# dans la liste des langages testés...
Avatar de guythom guythom - Candidat au Club http://www.developpez.com
le 01/08/2014 à 23:08
Oui C++ est plus rapide que Java tout comme C lui est plus rapide que C++ tout comme assembleur est largement plus rapide que tous ces langages . ET PUIS QUOI ENCORE ??????
Mes premiers pas c'était Pascal et Assembleur oui. Et je continue de déplorer le coté "style bidouilleur de C" J'aurai aimé qu'il soit rigoureux comme Pascal. je vous assure L'école pascalienne c'est du béton armé. Mais voyons le bon coté des choses. C a changé le monde de l'informatique, C++ et Java ont contribué à sa révolution Ada aussi a joué son grand rôle. Delà sont nés PHP, JS, Python, Perl, ... Et grace à ces derniers nous avons des milliards de sites, des millions de logiciels gratuits mais malheureusement l'évolution a un prix et le prix c'est qu'on se retrouve avec beaucoup de bricoleurs et très peu de vrais spécialistes.
On manque de compétences pour fabriquer un vrai programme java alors on télécharge un PDF sur le web on l'applique aveuglement et on produit UNE MERDE... NOTRE MERDE RAME ALORS ON ACCUSE JAVA
JAVA EST UN LANGAGE DE PROGRAMMATION ORIENTE OBJET CE SEUL STATUT EN FAIT UN OUTIL DELICAT ET NÉCESSITE UN CERTAIN COUT EN TEMPS D’EXÉCUTION JE SUIS DONC DÉSOLÉ SI VOUS VOULEZ UN LANGAGE "TRÈS RAPIDE " N'UTILISEZ PAS LA POO DONC MÊME PAS C++. ASSEMBLEUR c'est le roi en matière de vitesse, pascal son frère direct, C leur petit frère avec eux ça va courir même si votre programme est mal fichu . Mais Java requière de la rigueur, des compétences et des connaissances solides pour pouvoir faire des choses bien pas forcement rapides comme avec C mais forcement plus riche et plus facilement analysables dont facilitant le travail d'équipe et dont adapté pour des projets énormes. Pourtant la grande majorité des développeurs java ne savent même pas ce qu'est Java ils confondent la machine virtuel et le langage, simplicité d'écriture du code et complexité du concept, ils utilisent la POO sans vraiment l'utiliser . Créer des interfaces graphiques avec du drag and drop c'est malheureusement très couteux en gain d’exécution eihn "les IDE...ISSIENS" rentrez donc en mode commande et apprenez à vous servir de "SwingUtilities, de EventQue, System.gc() ça vous dit quelque chose, java.util.BitSet" bref java c'est pas seulement ActionListener, c'est aussi les décalages binaires, les opérateurs binaires, les symboles de Jacobi avez vous comparer l'Api des Random du C et celle de java ???? Je ne crois pas mais si vous vous êtes pliés sur le sujet vous comprendrez que les symboles de Jacobi sont plus rapides que LES GENERATEURS CONGRUENTIELS LINEAIRES. Bref Java peut aussi être rapide tout dépend du programme et du programmeur.
Les grands programmeurs associent richesse et rapidité. Dans bien des grands projets on laisse les géants du calcul calculer et les maîtres de l'interactivité pour le réseau, et le GUI etc . Allez voir chez Matlab par exemple. Nos étudiants ont commis l'erreur des profanes peut être pour des raisons ... je m'attendais à ce qu'ils comparent Matlab et R par example et non Matlab et C++, Java .. car C++, Java sont des langages de programmation dans le sens strict du terme alors que Matlab est un logiciel de calcul numérique développé en C et java quoi qu'on dise ce n'est pas un langage de programmation.

Ne nous comportons pas comme les églises qui se font des guerres inutiles.
En informatique Chacun a sa place et que le meilleur survive
Avatar de Zuthos Zuthos - Membre régulier http://www.developpez.com
le 21/08/2014 à 10:33
Il serait peut-être plus intéressant d'avoir une étude permettant de classer les langages par rapport à leur utilité
Offres d'emploi IT
Développeur c++
Kineti Technologies - France - Mâcon (71870)
Open source (h/f)
Atos - Ile de France - Paris (75000)
Ingénieur logiciel de modélisation 2D/3D (CAO) h/f
Coventor - Ile de France - Villebon-sur-Yvette (91940)

Voir plus d'offres Voir la carte des offres IT
Contacter le responsable de la rubrique C++