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

Langages de programmation Discussion :

Meilleure vitesse d'exécution : Fortran vs C++ ?


Sujet :

Langages de programmation

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Doctorant en Astrophysique
    Inscrit en
    Mars 2009
    Messages
    312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Doctorant en Astrophysique
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2009
    Messages : 312
    Par défaut Meilleure vitesse d'exécution : Fortran vs C++ ?
    Tout d'abord bonjour tout le monde, je suis nouveau venu ici.

    Je débute en programmation (C/C++ que je suis en train de voir en école d'ingé) et j'ai un projet en tête et je voudrai quelques conseils. Mon but est de créer un simulateur de gravité à N corps en temps NlogN (algorithme de Barnes-Hut) par une méthode de Runge-Kutta d'ordre 4.

    Mon but est que l'algorithme soit le plus rapide possible. J'ai commencé à regarder les langages des applis scientifiques et beaucoup reposent sur du Fortran. Quels sont ses avantages vis à vis du C++. Pour mon projet, le Fortran donnera-t-il un programme plus rapide à l'éxécution ? Pour mon projet (programme surtout pour Windows, si c'est multiplateforme c'est mieux), quel serait le langage le plus "rapide" ?

    Et d'ailleurs comme je suis débutant, quels sont les facteurs déterminants pour la vitesse d'exécution ? Le langage (Fortran vs C++) ? Le compilateur ?

    Enfin, je ne suis pas sur de bien comprendre le contenu de ce site : http://www.polyhedron.com/pb05-win32-f90bench_p40html
    Le même code compilé avec le compilateur d'Intel et ftn95 prend 3 fois plus de temps à l'exécution s'il a été compilé avec ftn95 ?

    Merci beaucoup

  2. #2
    Expert confirmé
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 540
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 540
    Par défaut
    Citation Envoyé par Kaluza Voir le message
    Pour mon projet (programme surtout pour Windows, si c'est multiplateforme c'est mieux), quel serait le langage le plus "rapide" ?

    Et d'ailleurs comme je suis débutant, quels sont les facteurs déterminants pour la vitesse d'exécution ? Le langage (Fortran vs C++) ? Le compilateur ?
    Pour la rapidité de projet tout dépend quel type de projet c'est s'il est avec une interface utilisateur
    Un programme en mode console programmé en Java sera aussi sinon plus rapide qu'un programme en C++ nativement.
    Mais pour peu que tu fasses un projet avec une fenêtre utilisateur et des boutons le C++ risque d'être plus rapide.
    Sauf si tu lances des threads spécifiques de calcul en tache de fond.
    La différence entre Fortran et C++ c'est que les bibliothéques de code pour le calcul doivent être particulièrement optimisées et plus performantes qu'en C++
    Par contre peut-être que C++ sera plus performant en calcul parallèle je précise que c'est une éventualité.
    Tout dépend ce que l'on veut faire ; il est clair qu'un compilateur C++ ( genre VC++ 2008 ) + biblios d'Intel sera très performant notamment pour le calcul parallèle le multithreading...parce qu'évidemment les biblios d'Intel "colleront" plus au mode de fonctionnement du CPU.
    En d'autres termes comme les CPU sont majoritairement fabriqués par Intel , c'est plus logique d'utiliser ce qui est fait maison
    tu pourras utiliser de manière optimales les cpu à double , 4 coeurs etc...


    Une astuce qu'il ne faut pas perdre de vue : tu peux compiler des fichiers objets en Fortran qui sont particulièrement optimisés et faire une édition de liens avec des fichiers .obj initialement en C++.
    C'est une technique particulièrement intéressante du C++ et toc c'est un argument de plus dans le débat Java vs C++

    Citation Envoyé par Kaluza Voir le message
    Le même code compilé avec le compilateur d'Intel et ftn95 prend 3 fois plus de temps à l'exécution s'il a été compilé avec ftn95 ?
    Merci beaucoup
    Eh oui y'a pas photo les compilateurs d'Intel semblent être performants peut-être que le Fortran c'est dépassé comme langage parce que il ne prend pas en compte les innovations technologiques récentes comme les architectures parallèles , les CPU à n coeurs etc...
    Fortran c'est un langage qui a quelques années comme le C++ seulement il n'a pas évolué parce que trop limité aux calculs scientifiques ; contrairement à C+

  3. #3
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Mat.M Voir le message
    Eh oui y'a pas photo les compilateurs d'Intel semblent être performants peut-être que le Fortran c'est dépassé comme langage parce que il ne prend pas en compte les innovations technologiques récentes comme les architectures parallèles , les CPU à n coeurs etc...
    Fortran c'est un langage qui a quelques années comme le C++ seulement il n'a pas évolué parce que trop limité aux calculs scientifiques ; contrairement à C+
    Non, c'est parce que Fortran et ses compilateurs/utilisateurs n'ont en général jamais été sur des PCs,mais des minis, gros, voire super calculateurs..

    Le portage de Fortran sur PC est assez récent (voir ftn95), et je ne sais pas du tout quelle est l'optimisation incluse.

    De plus, par rapport à ce que tu disais, les CPU à n coeurs et les machines parallèles sont intégrés depuis longtemps avec la bibliothèque MPI.

    Enfin tes exemples sont faux..

    Tout langage multi-purpose (IHM et code) sera par définition plus lent qu'un langage mono-purpose.

    Et Fortran, comme C, ne sera pas abandonné de sitôt, simplement parce que d'une part son but est spécifiquement le calcul scientifique, et d'autre part parce que la quantité de bibliothèques disponibles, débuggées, testées, et exhaustives est tout simplement sans pareil.


    Après encore une fois cela dépend des compilateurs.


    Après, il est possible que sur Intel personne n'ai vraiment fait l'effort de faire un compilateur Fortran performant... MAis en général tout le monde s'en fiche, car c'est rarement sous W$ que les applis scentifiques tournent...

  4. #4
    Expert confirmé
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 540
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 540
    Par défaut
    Citation Envoyé par souviron34 Voir le message
    Enfin tes exemples sont faux..
    euh pardon je ne comprends pas à quoi tu fais allusion.
    J'ai écrit: Eh oui y'a pas photo les compilateurs d'Intel semblent
    être performants
    Tout langage multi-purpose (IHM et code) sera par définition plus lent qu'un langage mono-purpose.
    Ah bon parce que la plupart des projets informatiques sont en mode console et mono-purpose comme tu écris ?

  5. #5
    Inactif  
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    1 958
    Détails du profil
    Informations personnelles :
    Âge : 60
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 958
    Par défaut
    Citation Envoyé par Mat.M Voir le message
    [...]
    Fortran c'est un langage qui a quelques années comme le C++ seulement il n'a pas évolué parce que trop limité aux calculs scientifiques ; contrairement à C+
    Je pense que tu t'égares. Les compilateurs FORTRAN sont encore sous le scalpel des développeurs. C'est quand même le langage le plus utilisé dans le domaine des calculs scientifiques. Et c'est justement pour ça qu'il y en a beaucoup qui continue à voir le jour. C'est pourquoi aussi les multi-coeurs et le parallélisme y est intégré depuis longtemps comme le souligne Souviron : dans le domaine du calcul scientifique, on a réellement besoin de puissance de calcul, bien plus que dans n'importe quel autre domaine. C'est les physiciens, les géomaticiens, les chimistes qui demandent de la puissance de calcul. D'ailleurs je me demande, mais n'en suis pas certain, si ce n'est pas FORTRAN qui a bénéficié en premier de toutes les améliorations qu'on a maintenant dans la majorité des compilateurs pour ce qui concerne ce genre d'optimisation (liée au parallélisme par exemple).

    Pour répondre un peu plus à la question initiale, la force du FORTRAN c'est avant tout ses bibliothèques. Elles ont été validés par l'expérience ! Tant d'années d'utilisation ont aidé à obtenir du code qu'on estime « très probablement » valide.

  6. #6
    Expert confirmé
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 540
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 540
    Par défaut
    Citation Envoyé par Garulfo Voir le message
    C'est pourquoi aussi les multi-coeurs et le parallélisme y est intégré depuis longtemps comme le souligne Souviron
    je me suis mal exprimé je voulais parler explicitement des CPU multi-coeurs d'Intel en particulier .
    C'est certain qu'il y a des calculateurs et des systèmes tournant sous Unix par exemple qui possèdent des processeurs plus performants qu'Intel.
    Mais ce genre de machine n'est pas à la portée de tout le monde ce que Mr Souviron semble perdre de vue ( et toc ! ).

  7. #7
    Inactif  
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    1 958
    Détails du profil
    Informations personnelles :
    Âge : 60
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 958
    Par défaut
    Citation Envoyé par Mat.M Voir le message
    je me suis mal exprimé je voulais parler explicitement des CPU multi-coeurs d'Intel en particulier .[...]
    Ah ok. Perso, moi et les PC ont a pas une grande histoire d'amour ^_^ Je te crois donc sur parole.

  8. #8
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Mat.M Voir le message
    euh pardon je ne comprends pas à quoi tu fais allusion.
    J'ai écrit: Eh oui y'a pas photo les compilateurs d'Intel semblent
    être performants
    Ok autant pour moi


    Citation Envoyé par Mat.M Voir le message
    Ah bon parce que la plupart des projets informatiques sont en mode console et mono-purpose comme tu écris ?
    Quand on parle d'un programe scientifique, en général il est mono-purpose.

    Ensuite, et seulement ensuite, il y a en général une IHM pour présenter les résultats.. (très souvent stockés dans des fichiers) Il est extrêmement rare en sciences d'avoir à faire une présentation dynamique temps réel de résultats calculés au vol, et qui plus est dans la même application..

    (modèles numériques, etc etc).


    Citation Envoyé par Mat.M Voir le message
    je me suis mal exprimé je voulais parler explicitement des CPU multi-coeurs d'Intel en particulier .
    C'est certain qu'il y a des calculateurs et des systèmes tournant sous Unix par exemple qui possèdent des processeurs plus performants qu'Intel.
    Mais ce genre de machine n'est pas à la portée de tout le monde ce que Mr Souviron semble perdre de vue ( et toc ! ).
    Euh

    Un bon serveur multi-coeurs Lunix est aussi accessible qu'une machine multi-coeurs Intel...

    Nous ne reviendrons pas sur la "mode" M$, mais par exemple en général encore une fois quand on fait un code suffisamment scientifique pour se poser des questions de perfomances, c'est qu'on est dans un labo ou une équipe qui a un tant soit peu les moyens, la différence de prix étant relativement négligeable ...



    Mais là nous sommes HS....

  9. #9
    Membre éprouvé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 537
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 537
    Par défaut
    Citation Envoyé par souviron34 Voir le message
    Un bon serveur multi-coeurs Lunix est aussi accessible qu'une machine multi-coeurs Intel...
    Trop gros, passera pas.

  10. #10
    Membre émérite
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2009
    Messages
    552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mars 2009
    Messages : 552
    Par défaut
    Bonjour,

    J'ai toucher un peu aux deux langages et j'ai eu à réaliser un projet en Fortran (simulation 3D de circulation) avec un collègue en école d'ingé.

    Je t'avoue que j'ai été fort surpris par la rapidité du programme en Fortran, notamment sur les tableaux (on s'est retrouvé avec une fluidité que l'on espérait pas). Le hic a été au niveau des bibliothèques (graphiques, IHM, images...) qui ne sont pas autant à jour et développées que ce que l'on trouve en C/C++.

    Fortran est plus strict et plus propre que le C (notamment pour le passage de paramètres et la gestion des tableaux).

    Pour ce qui est du multi-thread, c'est un problème au niveau de l'OS et non au niveau du langage (il est tout à fait possible de créer un processus en fortran, que ça soit sous windows, ou sous linux)

    Ensuite, si tu utilises Fortran, il existe différents Fortran. Je te conseille le 90/95, pour du calcul, tu auras ce dont tu as besoin.

    Enfin, je pense que si vraiment tu veux jouer avec du multi-threading abordable pour du calcul, tu peux regarder plutôt du coté des cartes graphiques et la programmation GPU en C (CUDA chez NVIDIA par exemple). Inutile de lancer 150 processus sur un pauvre processeur quatre coeurs, il passera son temps à swapper entre les processus et a se faire interrompre par les frappes clavier...

    En espérant que ça t'aide,
    Bon courage

  11. #11
    Rédacteur/Modérateur

    Avatar de gorgonite
    Homme Profil pro
    Ingénieur d'études
    Inscrit en
    Décembre 2005
    Messages
    10 322
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur d'études
    Secteur : Transports

    Informations forums :
    Inscription : Décembre 2005
    Messages : 10 322
    Par défaut
    Citation Envoyé par bretus Voir le message
    Ensuite, si tu utilises Fortran, il existe différents Fortran. Je te conseille le 90/95, pour du calcul, tu auras ce dont tu as besoin.

    justement, je conseillerais plutot de rester au 77 le plus longtemps possible, et de basculer vers 2003 si vraiment ça ne suffit pas... mais en évitant soigneusement 90/95
    je connais plein de personnes qui préfèrent rester sur 77, car les performances sur le code qu'ils utilisent sont meilleures qu'en 90 par exemple



    pourrais-tu détailler ton choix du 90/95 ?
    Evitez les MP pour les questions techniques... il y a des forums
    Contributions sur DVP : Mes Tutos | Mon Blog

  12. #12
    Membre émérite
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2009
    Messages
    552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mars 2009
    Messages : 552
    Par défaut
    Bonjour,

    En fait, je t'avoue que n'ayant pas testé les deux et que je ne connais pas toutes les différences, je ne peux pas faire de comparaison précise. C'était une consigne, un conseil du prof, avant tout. Si j'ai bien compris le 77 est en forme fixe obligatoirement non? (honnêtement, le coup des cartes perforées, j'aurais eu du mal )

    Voilà, après libre à chacun de faire ses choix, mais pour 2003, je doute que d'ajouter de la P.O.O. au langage le rendra plus rapide à l'exécution...

    Bye

  13. #13
    Rédacteur

    Avatar de millie
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    7 015
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 015
    Par défaut
    Citation Envoyé par bretus Voir le message
    Pour ce qui est du multi-thread, c'est un problème au niveau de l'OS et non au niveau du langage (il est tout à fait possible de créer un processus en fortran, que ça soit sous windows, ou sous linux)
    Par hasard, tu es conscient que thread (ou fil d'exécution) et processus, ce n'est pas la même chose ?

  14. #14
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    oui, mais MPI s'intègre parfaitement au Fortran...

  15. #15
    Membre émérite
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2009
    Messages
    552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mars 2009
    Messages : 552
    Par défaut
    Citation Envoyé par millie Voir le message
    Par hasard, tu es conscient que thread (ou fil d'exécution) et processus, ce n'est pas la même chose ?
    J'avoue ne pas avoir compris directement ce que tu voulais dire parceque je ne pensais pas le thread aussi limité... Dis moi si j'ai bien compris maintenant stp :

    Le processus est ordonnancé par l'OS, les threads sont ordonnancés par le processus qui les créés. Donc le thread n'est pas une affaire d'OS, c'est juste un mécanisme mis à disposition pour simuler le parallélisme au sein d'un même processus? Je disais donc une grosse connerie?

    (merci pour la remarque en tout cas, pardon pour la connerie)

  16. #16
    Rédacteur

    Avatar de millie
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    7 015
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 015
    Par défaut
    Sur tous les systèmes que je connais, c'est l'OS qui ordonnance les threads.

    D'ailleurs, chaque changement de threads nécessite une mise à jour du contexte d'exécution (notamment pour la pile), et seul l'OS sait le faire.

    On choisit souvent du faire du multithread au lieu du multiprocessus car :
    - le temps de création est plus rapide
    - le changement de contexte est plus rapide
    - il n'y a qu'un tas en mémoire
    - on peut partager des données entre les threads (on veut synchroniser des traitements etc.) (il y a des solutions avec du multi processus avec des shmalloc est compagnie, mais la gestion des mutex, et d'après mes souvenirs plus délicates)

    EDIT : @souviron : Tu t'adressais à moi avec RMI (aaah, non, t'as dit MPI, je connais pas ) ?

  17. #17
    Membre émérite
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2009
    Messages
    552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mars 2009
    Messages : 552
    Par défaut
    Ok, merci pour ces précisions, ça m'évitera surement de faire une connerie de conception un jour...

    bye

  18. #18
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par millie Voir le message
    EDIT : @souviron : Tu t'adressais à moi avec RMI (aaah, non, t'as dit MPI, je connais pas ) ?
    oui..

    Message Passing Interface

    ce qui est utilisé pour le traitement parallèle...

    http://www.mcs.anl.gov/research/projects/mpi/



    C'est ce qui est utilisé mondialement pour le parallèlisme dans la plupart des programmes scientifiques, et cela s'intégre parfaitement au Fortran (ou à d'autres, bien sûr, mais la biblothèque d'origine est en Fortran).

Discussions similaires

  1. [SQL]ADODataset et ADOQuery Vitesse d'exécution.
    Par aityahia dans le forum Bases de données
    Réponses: 1
    Dernier message: 30/06/2008, 19h44
  2. Réponses: 8
    Dernier message: 01/01/2008, 20h38
  3. Vitesse d'exécution d'un code en C.
    Par criga dans le forum C
    Réponses: 8
    Dernier message: 11/12/2007, 05h17
  4. Au sujet de la vitesse d'exécution des programmes
    Par emie31 dans le forum Langage
    Réponses: 5
    Dernier message: 09/11/2006, 13h42
  5. Réponses: 4
    Dernier message: 02/04/2006, 18h42

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