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

Fortran Discussion :

Problèmes d'exécution d'un programme Fortran


Sujet :

Fortran

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    87
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 87
    Points : 43
    Points
    43
    Par défaut Problèmes d'exécution d'un programme Fortran
    Alors autre question qui pour moi est très mystic.
    J ai un programme Fortran qui marche a priori, je n ai aucun problème à la compilation, mais lorsque je l execute les résultats sont affichés beaucoup trop lentement et en plus il plente parfois et miracle quand je traduit mon code en C et que je l exécute ca marche et ca marche.
    Ma question étant pourquoi? et comment je pourrais faire pour éviter cette traduction?

    Je vous remercie...

  2. #2
    Membre éclairé Avatar de genteur slayer
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2002
    Messages
    710
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

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

    Informations forums :
    Inscription : Juin 2002
    Messages : 710
    Points : 825
    Points
    825
    Par défaut
    quel compilateur tu utilise? quel environnement (windows, unix, cygwin)? tu traduit comment en C? quel sont les messages d'erreurs quand tu en as?

    as-tu essayé d'autre compilateurs? des fois cela peut venir de là...
    il n'y a que ceux qui savent qui ne savent pas qu'ils savent...
    Libere-toi hacker, GNU's Not Unix!!!

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    87
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 87
    Points : 43
    Points
    43
    Par défaut
    Je travaille sur un environnement unix et je compile mon programme a l aide d un makefile (commande f90)
    pour la traduction je fait
    make -f makec
    et je fait un makefile de mon programme C
    Ce qui est etrange c est qu il ramme à mort en executant le programme Fortran et que ca marche avec C.
    Si tu veux, mon programme marche très bien sur un jeu de données, mais sur d autres il bug ou il me donne des valeur pas cohérente et j essaie donc de localiser l erreur par élimination, c est pour ca que je pose cette question.
    Sinon meme au niveau pratique si a chaque fois que je modifie mon programme je dois le retraduire c est chiant et je ne sais pas ou chercher.

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    87
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 87
    Points : 43
    Points
    43
    Par défaut
    Pour les erreurs de compilation, il n y en a pas.
    En ce qui concerne ma formation, je suis numéricienne et les proplème machine je ne m y connais pas trop malheureusement je me suis rarement heurtée à ce genre de problème.

    Je te remercie.

  5. #5
    Modérateur

    Profil pro
    Inscrit en
    Août 2006
    Messages
    974
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Août 2006
    Messages : 974
    Points : 1 346
    Points
    1 346
    Par défaut
    Il n'y a pas de raison de convertir en C. Ton programme Fortran devrait être aussi rapide que le programme C. La solution est donc de trouver l'erreur...

    Comme ça fonctionne avec un compilateur (C) et non avec l'autre (F), c'est probablement lié à un débordement de tableau. Le succès ou non dépend alors de l'organisation de la mémoire. Y a t'il un tableau de dimension fixe mais dont tu ne valide pas s'il y a débordement ? Ton compilateur permet-il d'activer les « bound checking » ? C'est généralement intégré au mode « debug ».

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    87
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 87
    Points : 43
    Points
    43
    Par défaut
    A priori ca ne pourrait pas venir des débordement de tableau le programme exécuté en C me donne de bons résultats.
    Je me dis, qu en fait ce ne serrai pas possible d avoir de bon résultats si j avais un problème de tableau, je ne suis pas experte mais je crois que si on dépasse les indices on ecrase un autre tableau.
    Mais je ne serrai pas contre un peu plus d explication à ce propos.
    Et en ce qui concerne le "bound checking" je ne l ai pas trouvé dans mon compilateur.
    Je te remercie...

  7. #7
    Modérateur

    Profil pro
    Inscrit en
    Août 2006
    Messages
    974
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Août 2006
    Messages : 974
    Points : 1 346
    Points
    1 346
    Par défaut
    Supposons que tu as 3 tableaux (A, B et C) et que tu affecte A à B, puis A à C. Dans l'opération d'affectation de A à B, il y a débordement à l'écriture sur B.

    Il serait possible que le débordement se fasse sur la mémoire attribuée à C. Dans ce cas, l'erreur pourrait ne pas être catastrophique, puisque de toute façon C est réinitialisé par la suite.

    Supposons maintenant que le débordement de B se fasse sur la mémoire attribuée à A. C n'est pas affecté initialement, mais lorsque A est affecté à C, A est corrompu par le débordement de B. C sera donc erronné.

    Ainsi, le résultat varie selon la disposition de la mémoire. Il est fort possible qu'il y ait une erreur dans ton programme Fortran et dans ton programme C (la même en fait) mais qu l'un fonctionne et pas l'autre...

  8. #8
    Membre expérimenté
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Points : 1 664
    Points
    1 664
    Par défaut
    Citation Envoyé par Butterfly83
    A priori ca ne pourrait pas venir des débordement de tableau le programme exécuté en C me donne de bons résultats.
    Sylvain Bergeron donne un bon exemple. Le cas general est : tu es confronte(e) a un comportement indetermine. Cela signifie que tout peut arriver, y compris un comportement normal.
    Evidemment, il faut d'abord s'assurer que tes programmes en C et en Fortran sont strictement equivalents. Tu as pu introduire un bug dans le programme Fortran qui n'existe pas dans le programme C. Fait attention aux conventions differentes, egalement. Les indices de tableau commencent a 0 en C, a 1 en Fortran (par defaut).

    Et en ce qui concerne le "bound checking" je ne l ai pas trouvé dans mon compilateur.
    Voir la doc (manpage si disponible). C'est tres variable. Tu dis utiliser f90, mais ce nom correspond a plusieurs compilateurs differents, voire a un alias vers la vraie commande.

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    87
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 87
    Points : 43
    Points
    43
    Par défaut
    Ok j ai bien compris ce que vous m avez dit.

    Tout d abord le programme je ne l ai pas réecrit en C, je l ai juste traduit, je ne pense donc pas qu il puisse y avoir une erreur en Fortran et pas en C.

    Ensuite en ce qui concerne cette histoire de dépacement, si je n ai pas de "bound checking" il faut que je vérifie tout mes tableaux à la mano? parce que si c est le cas j en ai pour des semaines...

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    87
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 87
    Points : 43
    Points
    43
    Par défaut
    Oh fait, merci pour vos réponses c est gentil!

  11. #11
    Membre éclairé Avatar de genteur slayer
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2002
    Messages
    710
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

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

    Informations forums :
    Inscription : Juin 2002
    Messages : 710
    Points : 825
    Points
    825
    Par défaut
    si ton compilateurs n'as pas le bound check, change-le, tu ulise f90, essaye d'en installer un autre (par exemple g95 qui, lui a l'option -fbound-check) ensuite dans ton makefile il doit y avoir un variable genre:
    que tu remplace facilement par:
    (verifie la syntaxe exact je suis plus très sûr)
    plus toutes les options de librairie etc... et surtout, utilise les "warning all" sous f90 je sais pas mais sous g95 tu rajoute l'option -Wall et -Wextras et le compilo te renvoie beaucoup plus de warning (erreur ne mettant pas en danger la compilation mais pouvant générer des erreurs de calcul) et essaye de corriger ces warning de ton programme.

    de plus, utiliser plusieur compilateur est plutôt une bonne chose car certains compilateurs ne renvoie pas les mêmes erreurs et les mêmes warning, ils n'ont pas les mêmes tolérance, et donc un programme qui se compile bien sur deux compilateur différent est sûr (ou presque) de fonctionner. cependant les compilo ont aussi des fonctions spécifique que d'autres compilateurs ne vont pas comprendre...
    il n'y a que ceux qui savent qui ne savent pas qu'ils savent...
    Libere-toi hacker, GNU's Not Unix!!!

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    87
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 87
    Points : 43
    Points
    43
    Par défaut
    Je te remercie pour tes conseils, j avais aussi pensé à changer de compilateur mais malheureusement c est chose impossible dans la boite où je travaille, cependant je vais essayer de trouver l analogue de -wall chez moi, ca pourra toujours m aider...
    J ai essayé un peu, à la mano, de créer des erreurs de dimension de tableau et à priori, à la moindre petite erreur mon programme plante complètement...ce qui parrait assez logique car un même tableau de mon programme peut être utilisé par plusieurs subroutines...
    Merci.

  13. #13
    Modérateur

    Profil pro
    Inscrit en
    Août 2006
    Messages
    974
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Août 2006
    Messages : 974
    Points : 1 346
    Points
    1 346
    Par défaut
    Je comprends que des règles puissent t'empêcher de changer de compilateur pour la production de programmes officiels, mais de telle règles ne devraient pas t'empêcher d'utiliser un deuxième compilateur dans la phase de développement. Surtout si le compilateur additionnel permet d'améliorer le produit.

  14. #14
    Membre régulier Avatar de Fortran90
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    83
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2006
    Messages : 83
    Points : 82
    Points
    82
    Par défaut
    Hum...c'est quoi la machine qui pose problème?
    Quel est son mode d'adressage? 32-64 bits?

    As tu testé sur d'autres plateformes voir si tu as le même problème?
    Quel est l'ordre de grandeur des valeurs contenues dans ton tableau?(voir si Over-Under Flow)

    Pour l'histoire du compilo, tout à fait d'accord avec Sylvain.
    Sans payer, on peut passer par une phase cygwin sur windows avec des outils gnu pour compiler ton fortran et le C.

  15. #15
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    87
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 87
    Points : 43
    Points
    43
    Par défaut
    Je suis désolée mais je n ai rien compris à ce que tu m as dit, je n ai absolument eut de formation en ordinateur ou système, je fait juste des maths et de la programmation.
    Je sais que je travaille sur un environnement unix et c est tout.

  16. #16
    Membre éclairé Avatar de genteur slayer
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2002
    Messages
    710
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

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

    Informations forums :
    Inscription : Juin 2002
    Messages : 710
    Points : 825
    Points
    825
    Par défaut
    le problème quand on veut programmer (je le sais moi aussi je suis plu^to issu du monde matheux) c'est qu'il fo biencomprendre comment fonctionne la machine. en gros un ordinateur est une super calculette qui ne que ce qu'on lui demande et elle fait des conneries si on lui dit de faire des conneries... cependant, suivant le type de machine, sont type d'adressage, sa capacité mémoire, son OS... etc... les conneries ne sont pas les mêmes....

    L'idée derrière tout ça c que lors d'un code de calcul, bien optimiser son code pour la machine qui doit l'exécuter peut faire gagner beaucoup de temps, de précision et de rigueur.... un bon ingé/chercheur/docteur en calcul scientifique doit maitriser sa machine (c ton seul outil de travail/ à part le tableau mais si on peut le résoudre à la main c qu'il y a sûrement un russe au goulag qui l'a déjà fait).

    après il y a des gens dont le métier est de faire des progs qui marchent sur le plus grand nombre de machine, ce n'est pas ton cas... tu dois au moins connaitre toute les carac de ta machine, même si tu n'utilise pas tout, cela peut donner des pistes pour la recherche des bugs...

    de plus si on te laisse pas la liberté d'exploiter les resources de la machine, cela sert à rien d'essayé de résoudre des trucs.... c'est bien aussi de prendre son prog et de le compiler sur une autre machine avec un autre compilo sous un OS différent...

    le minimum à savoir sur sa machine est à mon avis:
    -nombre, type et vitesse du/des processeurs (accéssoirement le niveau de cache)
    -quantité de mémoire (RAM et virtuelle)
    -type 32/64bit (rejoint le type de processeur...)
    -quel OS, windows, linux, unix...etc... et quelle version!!!(tu peux avoir des windows 32bit sur des proc 64....)
    -quel compilateur (et avoir la doc complète surtout pour les options de compilation)
    -quel éditeur de liens (idem que pour compilo)

    Dans la question 'quel OS', ce peut être OS+emulateur (par exemple, windows+cygwin) dans ce cas fo aussi la version de l'émulateur et ses options
    il n'y a que ceux qui savent qui ne savent pas qu'ils savent...
    Libere-toi hacker, GNU's Not Unix!!!

  17. #17
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    87
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 87
    Points : 43
    Points
    43
    Par défaut
    Je te remercie pour tes infos, je vais essayer de me procurer ces renseignements.

Discussions similaires

  1. Réponses: 5
    Dernier message: 22/02/2011, 13h52
  2. Problème d’exécution d'un programme
    Par lucciana dans le forum Qt
    Réponses: 3
    Dernier message: 02/02/2011, 23h47
  3. Problème à l'exécution d'un programme C++ : bug assembleur
    Par lyxthe dans le forum x86 32-bits / 64-bits
    Réponses: 2
    Dernier message: 16/08/2010, 21h43
  4. Problème à l'exécution d'un programme ADA
    Par daninou dans le forum Ada
    Réponses: 4
    Dernier message: 01/10/2007, 17h48
  5. Réponses: 7
    Dernier message: 10/10/2006, 01h42

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