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 :

fortran ou C, voire 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
    ingénieur calcul
    Inscrit en
    Décembre 2007
    Messages
    363
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : ingénieur calcul
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2007
    Messages : 363
    Par défaut fortran ou C, voire C++ ?
    Bonjour le forum,
    mon métier est le calcul de structures, dans l'aéronautique; il consiste, quand mes collègues dessinateurs ont fait les plans d'une pièce ou d'un assemblage de pièces, à vérifier par le calcul si c'est assez léger pour décoller puis assez solide pour ne pas casser en vol.
    Je vais prochainement devoir améliorer sérieusement un programme que j'ai commencé à faire; c'est une vulgaire moulinette séquentielle, qui traduit des codes qu'elle trouve dans un premier fichier d'entrée, à l'aide de données se trouvant dans deux autres fichiers, pour fabriquer un fichier de sortie qui est une image modifiée du premier fichier d'entrée.
    Il se trouve que le premier fichier d'entrée fait environ deux millions de lignes, et les deux autres quelques centaines seulement, et le traitement complet dure environ cinq minutes; il faudrait s'arranger pour que ce processus soit réalisable trois cent mille fois en une semaine; soit en six cent mille secondes, ce qui fait que le processus unitaire devrait durer deux secondes au lieu de cinq minutes. (gain d'un facteur 150)
    Il est bien évident que l'on va changer de machine; un linux itanium tourne déjà près de six fois plus vite que la vieille HP 9000 où il y a le compilateur fortran que j'utilise pour l'instant, mais on pourrait gagner un peu plus s'il le faut vraiment.
    Il doit également être possible d'utiliser un compilateur le plus performant possible pour cette application.
    Par ailleurs dans le programme, certaines boucles de recherche parcourent entièrement les deux petits fichiers d'entrée, et je vais m'employer à ce que les variables puissent être trouvées par indexation, donc directement et sans recherche.
    Toujours dans le code, je vais m'arranger pour qu'aucune partie de test ne se fasse deux fois.

    Mais j'ai peur que cela ne suffise pas.

    En me présentant ces objectifs, mon chef à évoqué du développement en C ou C++; je connais un peu le C, que j'utilise séquentiellement, exactement comme du fortran; alors est-ce que le basculement vers ce langage pourrait nous faire gagner du temps d'exécution ?
    Et qu'en est il du C++ ? Je connais très peu la POO (je n'ai jamais fait qu'un seul développement en python) mais il me semble que cette structure de langage ne changerait pas grand chose.

    Que pensez vous de tout ça ?
    Mreci de me donner toutes vos impressions, même les plus farfelues, parce qu'il me faut vraiment faire feu de tout bois pour y arriver.
    David

  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
    Par défaut
    Bonjour,

    Je pense que la meilleure solution est d'embaucher un ingenieur specialise en developpement C qui a de bonnes notions de performances, pour un contrat de 18 mois par exemple . Tu pourrais par exemple en trouver en M2 de Systemes Repartis (Universite de Paris 5), ou bien a l'ENSIMAG (ecole d'ingenieur a Grenoble), et pleins d'autres encore.

    Sinon, je ne connais pas les compilateurs fortran, mais je sais que les programmes C sont reputes plus rapides que leurs homologues Fortran. Tu ne gagneras rien a passer en C++.
    "La route est longue, mais le chemin est libre" -- https://framasoft.org/
    Les règles du forum

  3. #3
    Membre éclairé
    Homme Profil pro
    ingénieur calcul
    Inscrit en
    Décembre 2007
    Messages
    363
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : ingénieur calcul
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2007
    Messages : 363
    Par défaut
    Il est bien évident que je ne peux pas rivaliser en développement avec un habitué du C et de la performance, mais il est hors de question d'embaucher ou de faire appel à quelqu'un d'extérieur; de plus, un informaticien s'y connait rarement suffisemment dans notre métier qui est la mécanique, et ça a déjà posé problème.
    Je ne connais pas assez, mais il me semble également que le C pourrait être légérement plus rapide, mais que le C++ n'apporterait rien.

  4. #4
    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
    Par défaut
    Citation Envoyé par dva2tlse Voir le message
    il est hors de question d'embaucher ou de faire appel à quelqu'un d'extérieur; de plus, un informaticien s'y connait rarement suffisemment dans notre métier qui est la mécanique, et ça a déjà posé problème.
    Je comprends les problemes de budget, ou de temps, mais l'argument de la connaissance metier me laisse pantois : c'est ce qu'on appelle la collaboration, et c'est ce qu'utilisent enormement de chercheurs, en France et a l'etranger : une equipe de specialistes qui s'occupent de la partie theorique, des algorithmes a implementer, etc... et une equipe de developpeurs qui s'occupent d'implementer lesdits algorithmes.

    C'est d'ailleurs bien pour ca que j'ai precise qu'il fallait quelqu'un avec un haut niveau d'etudes (Bac+5), non pas parce que ses competences en developpement seront plus elevees, mais parce qu'il sera plus a meme de comprendre le projet, permettant une meilleure synergie entre les deux equipes.


    Bref, si vous voulez tout faire tout seul, le plus performant sera du C avec les parties critiques en assembleur.
    Le C++ pourra vous apporter les templates si vous en avez besoin, ce qui est une simplicite d'ecriture, mais qui est forcement moins performant que du C.

    Pour les structures de donnees, il y a le probleme de charger a chaque fois les deux millions de ligne. Cela pourrait etre fait par un autre programme, via une memoire partagee par exemple : un programme qui charge les donnees dans une zone memoire Z1, un qui travaille sur les donnees dans la zone Z2, puis on inverse : travail sur Z1 et chargement sur Z2.
    On peut aussi chercher a utiliser le parallelisme des multi-coeurs actuels, via un pipeline par exemple, pour peu que vos donnees s'y pretent. Un processeur Nehalem peut se reveler plus interessant dans ce cas, mais je ne suis pas certain.
    Vous allez aussi avoir un probleme sur l'ecriture des donnees apres le calcul : un stockage sur disque est relativement lent, et pendant ce temps-la, le programme ne travaille pas.

    Je partirai donc sur un quad-coeur, avec 2 coeurs de travail, un coeur de chargement des donnees et un de dechargement (transfert de la memoire vers le disque).
    "La route est longue, mais le chemin est libre" -- https://framasoft.org/
    Les règles du forum

  5. #5
    Membre Expert Avatar de DonQuiche
    Inscrit en
    Septembre 2010
    Messages
    2 741
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 2 741
    Par défaut
    En termes de performances le langage est rarement essentiel, surtout entre Fortran, C et C++ qui sont des langages grosso modo de même niveau (ce n'est pas comme si on comparait le C avec un langage dynamique par exemple). C'est avant tout une question d'algorithmes et de structures de données. Il faut donc mettre en balance les avantages théoriques de chaque langage avec la facilité à aisément mettre en oeuvre et maintenir le code. Et sur ce plan-là, C++ > C > Fortran.

    Par ailleurs une des grosses sources possibles de gains est le parallélisme. Or le C++ offre de nombreux outils, notamment MPI qui est orienté vers le calcul scientifique et utilisable efficacement par des personnes venant de filières non-informatiques. Et si l'on souhaite utiliser le GPU (si le problème s'y prête les gains peuvent être fulgurants), j'imagine qu'on se tournera vers C ou C++ avec CUDA. Enfin dans la même veine, il vous faudra un bon outil de profilage, encore un choix qui peut influencer le choix du langage.

    Maintenant, sur les performances pures, C et Fortran peuvent se battre pied à pied. Le C++ souffre quant à lui d'un léger désavantage mais qui est largement compensé par les avantages qu'il offre par ailleurs si bien qu'à coût équivalent le C++ sera souvent plus efficace.

    Bref, choisir le langage le plus "performant" n'est pas la bonne approche.


    PS : A mon avis la seule lecture du fichier (sans aucun traitement) prend déjà plus de deux secondes depuis un disque traditionnel. Vous pouvez toujours le mapper en RAM ou tenter un SSD.

  6. #6
    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
    A mon avis, les 2 langages C ou Fotran sont équivalents pour ceuqe tu veux faire SAUF si tu as du traitement matriciel. Dans ce cas le Fortran sera beaucoup plus facile, car déjà prévu pour.


    Sinon, en gros tu auras les mêmes performances.

    Le seul avantage du C (que tu peux atteindre en Fortran mais en étant très sioux) est d'accélerer les boucles ou les références d'éléments matriciels par une incrémentation de pointeur (une addition) au lieu d'un calcul d'adresse (1 multiplication et une addition.


    Enfin, là aussi un avantage de l'écriture du C par pointeur est que tu pourras développer plus facilement un algo récursif.

    En dehors de ça pas vraiment de différence. Parce que dans l'aure sens, avec Fortran tu pourras éventuellement le paralléliser facilement avec MPI si tu as besoin.

    'fin c'est mon avis..

Discussions similaires

  1. Réponses: 1
    Dernier message: 09/01/2009, 15h40
  2. [mode svga][Voir asm et devc++]
    Par Gonath dans le forum Autres éditeurs
    Réponses: 16
    Dernier message: 16/06/2003, 08h58
  3. Réponses: 7
    Dernier message: 24/05/2003, 15h56
  4. Voir la pile FPU
    Par Qwazerty dans le forum Assembleur
    Réponses: 5
    Dernier message: 11/05/2003, 15h09

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