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 :

Temps de calcul en 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 Temps de calcul en Fortran
    Bonjour,
    j'ai un problème, j'avais un code écrit en Fortran donc je devais améliorer, en autre, le temps de calcul. Je l'ai modifié, mais horreur! les temps de calculs sont plus long. Le truc c'est que je suis assez sûre de mon coup, en gros, sur un problème numérique j'ai fait un maillage adaptatif, donc ça devrait prendre moins de temps!!!
    J'ai fait tourner mon code sur un jeu de données relativement triviales, donc sur lequel le maillage n'est pas modifié, mais horreur! mon programme est toujours plus lent que l'ancienne version...
    Question: je voudrais savoir quelle est la fonction en fortran 77 ou 90 qui calcule le temps?
    Ensuite, juste pour information, le temps de calcul je l'ai en exécutant la commande "timex run", est ce que l'erreur peut venir de là?

    Pour toute autre suggestion je suis ouverte car j'avoue que je ne sais plus où chercher...

    Merci.

  2. #2
    Rédacteur

    Homme Profil pro
    Comme retraité, des masses
    Inscrit en
    Avril 2007
    Messages
    2 978
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 83
    Localisation : Suisse

    Informations professionnelles :
    Activité : Comme retraité, des masses
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 2 978
    Points : 5 179
    Points
    5 179
    Par défaut Temps de calcul en Fortran
    Salut.

    Essaie CPU_TIME ou DATE_AND_TIME

    A part ça, ma longue expérience m'a appris qu'on perdait souvent beaucoup plus de temps CPU avec des algorithmes de calcul mal choisis que pour des questions de programmation.

    Bonne chance
    Jean-Marc Blanc
    Calcul numérique de processus industriels
    Formation, conseil, développement

    Point n'est besoin d'espérer pour entreprendre, ni de réussir pour persévérer. (Guillaume le Taiseux)

  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
    J ai essayé CPU_TIME et DATE_AND_TIME et aucun des deux ne marchent.

    J ai écrit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    call DATE_AND_TIME(t1)
    ......
    ......
    call  DATE_AND_TIME(t2)
    time = t2 - t1
    Peut etre que l erreur vient de la.
    Sinon je n arrive pas à exécuter mon programme en Fortran, donc je le traduit en C et je l'éxecute donc ca peut peut etre venir de la aussi.

    En ce qui concerne mon algorithme je n ai rien inventé c est un algorithme courant pour un maillage adaptatif.

  4. #4
    Rédacteur

    Homme Profil pro
    Comme retraité, des masses
    Inscrit en
    Avril 2007
    Messages
    2 978
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 83
    Localisation : Suisse

    Informations professionnelles :
    Activité : Comme retraité, des masses
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 2 978
    Points : 5 179
    Points
    5 179
    Par défaut Temps de calcul en Fortran
    Re-Salut!

    Je n'ai pas ma documentation sous la main, mais, si je me souviens bien, la routine DATE_AND_TIME prend plusieurs paramètres. Le mieux est d'aller voir dans l'aide en ligne de ton Fortran.

    D'autre part, souviens-toi qu'un algorithme courant est souvent, comme son nom l'indique, un algorithme qui se traine.

    Salutations
    Jean-Marc Blanc
    Calcul numérique de processus industriels
    Formation, conseil, développement

    Point n'est besoin d'espérer pour entreprendre, ni de réussir pour persévérer. (Guillaume le Taiseux)

  5. #5
    Membre du Club Avatar de phy4me
    Inscrit en
    Octobre 2006
    Messages
    116
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 116
    Points : 61
    Points
    61
    Par défaut
    Salut
    Tu peux utiliser la fonction ETIME
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
            T1 = ETIME(TARRAY)
    C
    .....
    .....   INSTRUCTIONS
    .....	
    C
    	T2 = ETIME(TARRAY) - T1
    	WRITE(*,*) 'TEMPS ECOULE  : ',T2

  6. #6
    Rédacteur

    Homme Profil pro
    Comme retraité, des masses
    Inscrit en
    Avril 2007
    Messages
    2 978
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 83
    Localisation : Suisse

    Informations professionnelles :
    Activité : Comme retraité, des masses
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 2 978
    Points : 5 179
    Points
    5 179
    Par défaut Temps de calcul en Fortran
    Salut.

    Fais très attention, car la notion de temps de calcul est devenue ambiguë depuis que les ordinateurs sont devenus multitâches: il faut distinguer

    1) le temps écoulé (elapsed time) qui est la différence entre l'heure à la fin et au début de ton calcul, et qui dépend des autres tâches que le processeur traite simultanément; pour obtenir une mesure reproductible, il faut redémarrer la machine avant chaque essai et désactiver toutes les tâches intermittentes, en particulier ton antivirus (n'oublie pas de le réactiver après!);

    2) le temps processeur (CPU time) qui indique pendant combien de temps le processeur a travaillé vraiment pour ton problème; je ne sais franchement pas ce qui se passe si tu travailles avec une machine avec plusieurs processeurs.

    D'autres difficultés peuvent survenir si tu travailles sous Windows et si tu assignes dynamiquement les tableaux (ce que j'essaie toujours d'éviter). Je ne peux pas t'en dire plus, mais j'ai observé des phénomènes étranges.

    En espérant ne pas t'avoir trop découragé.
    Jean-Marc Blanc
    Calcul numérique de processus industriels
    Formation, conseil, développement

    Point n'est besoin d'espérer pour entreprendre, ni de réussir pour persévérer. (Guillaume le Taiseux)

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Août 2006
    Messages
    197
    Détails du profil
    Informations personnelles :
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Août 2006
    Messages : 197
    Points : 185
    Points
    185
    Par défaut
    en gros, sur un problème numérique j'ai fait un maillage adaptatif, donc ça devrait prendre moins de temps!!!
    J'ai fait tourner mon code sur un jeu de données relativement triviales, donc sur lequel le maillage n'est pas modifié,
    Il me semble que si tu as simplement rajouté l'adaptation de maillage, ton code va forcément prendre du temps pour voir si le maillage a besoin d'être adapté.
    Donc si tu prend un cas ou le maillage n'a pas besoin d'être adapté et que tu compare le code sans et avec remaillage, le second sera forcément plus long.

    C'est le genre de méthode qui permet de gagner du temps sur des maillages qui demandent effectivement un remaillage et qui sont relativement important. La perte de temps due au remaillage n'est compensée par le gain en temps de calcul qu'à partir d'un certain nombre de mailles..

  8. #8
    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
    plusieur remarque:CPU_TIME ou DATE_AND_TIME sont des fonctions de Fortran95... donc si t'a compilé avec un 77 normalement y a erreur....

    de plus pour le temps de calcul on utilise plutot CPU_µTIME que DATE_AND_TIME qui est plus utiliser pour stocker la date du calcul dans un fichier par exemple.... la fonction que tu as faite te donne le temps réel et dépend aussi des autres prog qui tournent sur ta bécanne en général on utilise plutot un truc du genre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    call system_clock(count_rate=freq,count_max=cpt_max)
    call system_clock(count=cpt_init)
    call cpu_time(time=t1)
     ....
    <Calcul>
     ....
    call cpu_time(time=t2)
    call system_clock(count=cpt_fin)
    cpt=cpt_fin-cpt_init
    if (cpt_fin < cpt_init)cpt=cpt+cpt_max
    temps_passes=real(cpt)/freq
    t_cpus=t2-t1
    write(*,*)"temps CPU    :",t_cpus      !affiche le temps CPU
    write(*,*)"temps system:",temps_passes   !affiche le temps réél
    le temps CPU est plus intéréssant car c'est lui qui va permette de mesurer l'efficassité de ton code...

    de plus si tu fait un maillage adaptatif, c'est normal d'avoir un calcul plus long car tu recalcul ton maillage à chaque étape... essaye de réduire les tailles de tableau, elève le "IF" qui ne servent à rien.... chager certains algo qui sont lent... comme cela tu arrivera à l'optimiser (ne pas oublié aussi l'option de compilation -O5 (sous g95 mais y des équivalents...))
    il n'y a que ceux qui savent qui ne savent pas qu'ils savent...
    Libere-toi hacker, GNU's Not Unix!!!

  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
    D'abord merci à tous pour vos réponses.

    phy4me merci pour ton "ETIME" ça marche plutôt bien, même si j'ai jeté un oeil sur de la doc et apparemment c'est plutot déconseillé de l'utiliser comme ça...

  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
    Et M. Blanc sachez qu'il en faut un peu plus à une nana comme moi pour être décourager

  11. #11
    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
    genteur slayer j'ai essayé ce que tu m'as donné mais sur mon programme ça ne marche pas, j'ai des erreur de syntaxe mais je pense que cela doit venir du fait que je traduit mon programme en C pour l'exécution...

  12. #12
    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
    alors si tu traduit en C c'est sûrement pas pour l'exécution ou alors tu as une version interpréteur de Fortran que je ne connaissait pas...

    si c le traditionel f2c de linux, alors c'est à la compilation et il ne supporte que du Fortran77 or le code que je t'ai donné utilise des fonctions de fortran95 donc normal que ça marche pas...

    cependant si tu bosse sous linux/unix/cygwin ou tout autre émulateur unix il y a une commande assez pratique pour l'execution de ton prog c'est "time":

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    time ./<nom_de_ton_executable>
    qui ne fait qu'une seule chose, te renvoyé les temps cpu et user utilisé par ton programme (atention, pour les lire, il faut que la console reste aparente). en gros il affiche ces donné juste à la fin d'exécution.... disons que cela peut aider
    il n'y a que ceux qui savent qui ne savent pas qu'ils savent...
    Libere-toi hacker, GNU's Not Unix!!!

  13. #13
    Membre habitué
    Profil pro
    Inscrit en
    Août 2006
    Messages
    197
    Détails du profil
    Informations personnelles :
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Août 2006
    Messages : 197
    Points : 185
    Points
    185
    Par défaut
    Juste une petite question, qui je l'espère ne fera pas dévier la discussion, Butterfly83, tu dis
    je traduit mon programme en C pour l'exécution
    A quoi cela sert-il ?

  14. #14
    Rédacteur

    Homme Profil pro
    Comme retraité, des masses
    Inscrit en
    Avril 2007
    Messages
    2 978
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 83
    Localisation : Suisse

    Informations professionnelles :
    Activité : Comme retraité, des masses
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 2 978
    Points : 5 179
    Points
    5 179
    Par défaut Temps de calcul en Fortran
    Loin de moi l'idée de te décourager!

    Une petite question tout de même: as-tu traduit ton programme à la main? Il existe un programme qui s'appelle f2c et qui fait ça automatiquement; le résultat n'est pas parfait, mais on peut toujours l'améliorer.

    Si tu cherches vraiment à améliorer la performance, essaie le programme ATLAS (Automatic Tuning of Linear Algebra Subroutines).

    Ces deux programmes sont disponibles gratuitement sur www.netlib.org

    Bonne chance
    Jean-Marc Blanc
    Calcul numérique de processus industriels
    Formation, conseil, développement

    Point n'est besoin d'espérer pour entreprendre, ni de réussir pour persévérer. (Guillaume le Taiseux)

  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 me suis mal exprimée, j'avais dit "pour l'execution", parce que, en fait je n'avais pas de problème à la compilation en Fortran mais seulement à l'execution. Et effectivement j'utilise f2c, qui fait que ça marche...
    Moi j'utilise la commande mais j'ai expliqué que je trouvais des temps de calcul qui ne me plaisait pas et donc je me suis dit que ça venait peut être de cette commande, ma question initiale m'a permit d'avoir deux temps de calcul en réalité.

  16. #16
    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
    gregory2526, pour répondre a ta question, je ne sais pas exactement pourquoi, mais ce que je sais c'est que j'avais un programme bon en Fortran que je compilais mais que je n'arrivais pas à executer, l'horreur!
    Je pense que ça doit venir du compilateur, que je ne pouvais pas toucher évidemment, et on m'a donc dit d'essayer de traduire le code en C puis compiler et executer et ça marche! Et c'est cool!

  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
    gregory2526, juste une chose, je ne pense pas que à partir du moment où tu as un maillage adaptatif tu as un temps de calcul plus court. En tout cas je reste convaincue, et peut être à tord que mon programme devrait avoir un temps de calcul plus court que l'ancienne version.

  18. #18
    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
    En fait, j'ai f(x)=0, que je résoud avec Newton-Raphson, et en gros je fixe un nombre d'essais, et j'ai un test de convergence,
    si ça converge pas on recommence jusqu'à la convergence ou jusqu'à ce que ce nombre d'essai fixé soit dépasser.
    En gros je divise mon pas de temps que si je diverge, donc l'ancienne version ne devrais meme pas me donner de résultat...

    Bref, je me trompe peut être mais ça m'interresserais d'avoir des avis sur cette question c'est plutôt important.

  19. #19
    Membre habitué
    Profil pro
    Inscrit en
    Août 2006
    Messages
    197
    Détails du profil
    Informations personnelles :
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Août 2006
    Messages : 197
    Points : 185
    Points
    185
    Par défaut
    En fait, j'ai f(x)=0, que je résoud avec Newton-Raphson [...] donc l'ancienne version ne devrais meme pas me donner de résultat...
    Donc si je comprend bien, l'ancienne version n'utilisais pas du Newton Raphson ?
    Tu l'as donc pas mal modifié depuis la version précédente.
    Est-ce que tu peux nous donner les algos qui ont changé entre les deux versions ?


    Merci pour ta réponse concernant la conversion en C. Je pensait que c'était un moyen différent de debugger le code, ou une autre astuce de ce genre.

    Sinon, j'ai découvert une méthode interessante qui est le profiling. Il permet de savoir pour chaque subroutine ou chaque ligne du code, le temps processeur utilisé. J'avoue ne l'avoir jamais utilisé (j'ai découvert ça hier soir), mais ça pourrait t'être utile pour savoir d'où vient ta consommation en CPU

    l'outil utilisé est "gprof" (sous linux ou cygwin, je ne sais pas si ça existe sous windows). Et il me semble que tu compile ton programme avec l'option -pg, puis tu l'execute normalement. A la fin tu a un fichier .out, que tu ouvre avec gprof et qui te donne toutes ces infos.
    En espérant que ça puisse t'aider...

  20. #20
    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
    je te conseil en tout cas de changer de compilo.... celui que j'utilise est très bien c'est g95 http://www.g95.org/ il a l'avantage d'être natif (c à d pas de traduction en c avant compilation, mais compile direct) puissant, optimisé et GRATUIT!!!! sur le site y a les version pour tous les os (sauf windows evidemnent mais cygwin)

    ta lenteur peut également venir de cette traduction f2c comme cette traduction n'est pas propre... de plus si on utilise encore fortran de nos jour c'est que niveau fonction math, il est plus rapide que le C donc ce serai domage de ne pas en profiter... de plus avec G95, y a des options d'optimisation de code... si on réduit la taille de l'éxécutable on gagne un peut de vitesse....

    de plus pour ton Newton-Raphson: le fait d'avoir un pas adaptatif va considérablement augmenter ta précisionde calcul ça, c'est un fait, cependant pas forcément réduire le temps de calcul car il se peut que 1ancienne correspondent à 3nouvelles tout comme 3ancienne corespondent à 1nouvelle disons que le temps de calcul devient de plus en plus variable et va dépendre bcp des paramètres de départ....

    si tu veux que ton prog aille plus vite, fo diminué la précision de N-R, fait le calcul de l'ancienne précision de calcul et entre cette valeur dans N-R pour voir....

    sinon:
    P.S. t pa obligé de répondre en 3ou 4 message sur ce forum, fait plutôt 1 seul gros post... c'est plus simple pour ceux qui te lisent
    il n'y a que ceux qui savent qui ne savent pas qu'ils savent...
    Libere-toi hacker, GNU's Not Unix!!!

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [Fortran 90] Le temps de calcul d'un code
    Par driss80 dans le forum Fortran
    Réponses: 17
    Dernier message: 19/11/2007, 11h03
  2. Temps de calcul d'un algo
    Par Rémiz dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 23/12/2005, 13h52
  3. temps de calcul sius VC++ !!
    Par Axiome dans le forum MFC
    Réponses: 16
    Dernier message: 13/12/2005, 09h57
  4. Temps de calcul avec deux écrans
    Par Shaga dans le forum OpenGL
    Réponses: 2
    Dernier message: 14/11/2005, 09h24
  5. temps de calculs extremement long !!
    Par salseropom dans le forum C++
    Réponses: 9
    Dernier message: 19/01/2005, 20h12

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