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 :

Conversion d'une boucle DO à l'ancienne


Sujet :

Fortran

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    110
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2004
    Messages : 110
    Par défaut Conversion d'une boucle DO à l'ancienne
    Bonjour,

    je suis en train de réécrire un bout de code (des FFTs) en vieux Fortran:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
          do 1001 i=1,10
                do 1001 j=1,20
             [...]
    1001 continue
    J'ai bêtement pensé que c'était équivalent à:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
          do 1001 i=1,10
                do 1002 j=1,20
             [...]
    1002 continue
    1001 continue
    Et donc en version plus récente:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
          do i=1,10
                do j=1,20
             [...]
                enddo
          enddo
    Mais apparemment, ce n'est pas le cas... La dernière version me fait un plantage "sigsev / stacksize overflow". Il n'y a que ce genre de boucles dans la subroutine.

    Ce post me confirme que ces versions sont les mêmes: http://www.developpez.net/forums/d37...o/#post2307861

    Qu'en pensez-vous?

  2. #2
    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
    Par défaut
    Pas évident.

    La première transformation pourrait introduire une erreur via un goto 1001 dont le sens passerait de "cycle" à "exit", mais ça n'explique pas que l'erreur se produise avec la version "enddo" (il ne peut y avoir de goto 1001 oublié puisque la compilation avorterait).

    Il reste selon moi 2 possibilités :
    1. Tu as bousillé autre chose.
    2. Le code un peu différent en syntaxe produit un exécutable un peu différent "permettant" de rendre visible un problème initialement invisible, mais déjà présent.

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    110
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2004
    Messages : 110
    Par défaut
    Je penchais pour la deuxième solution et tu confirmes ce que je pense.

    Je ne mets pas de côté la 1ère mais j'ai bien vérifié à coup d'outils de diff (tkdiff, emacs diff et vimdiff ;-) ). Mais bon ca fait quand même 2000 lignes...

    Enfin bref, tant pis, j'abandonne!

    Merci pour la réponse

  4. #4
    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
    Par défaut
    Comment ça, « j'abandonne » ? Comme dirait l'autre, de quessé ?

    Le problème avec ta stratégie (abandon), c'est que le problème risque de revenir dès tu changeras quelque chose (un petit bout de code, le compilateur, ...).

    Pour trouver ce genre d'erreur, la stratégie est toujours la même : mettre toutes les switches d'optimisation à off, toutes les switches de contrôle à on, et si possible, utiliser plus d'un compilateur.

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    110
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2004
    Messages : 110
    Par défaut
    Non mais 2000 lignes de code de fft que je pige que dalle

    Mais pour faire avancer les choses, j'ai entrepris de faire la même chose avec le dgemm de BLAS, c'est-à-dire remplacer les continue par les enddo et oui apparemment les effets des optimisations compilateur se voient sur le résultat ....

  6. #6
    Membre émérite
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    489
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 489
    Par défaut
    Bonjour,
    Citation Envoyé par TheOyoStyledMan Voir le message
    Mais pour faire avancer les choses, j'ai entrepris de faire la même chose avec le dgemm de BLAS, c'est-à-dire remplacer les continue par les enddo et oui apparemment les effets des optimisations compilateur se voient sur le résultat .... :cry:
    Oui, ce n'est pas plus étonnant que ça, surtout si les optimisations du compilo sont "agressives".

    Par contre, pour en revenir à ton premier post et le fait que
    La dernière version me fait un plantage "sigsev / stacksize overflow".
    Ca peut aussi venir de ton environnement qui inclurai un stacksize "trop petit": la nouvelle version demanderai plus de mémoire que l'ancienne et se ferait ainsi tuer à l'exécution lorsqu'elle atteint ce plafond.
    Mais ce n'est qu'une hypothèse...
    (que tu peux tester en changeant la mémoire "stack" allouée à ta session; sous Unix/Linux via la commande "ulimit -s").

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XSLT] Faire une boucle sur une variable [i]
    Par PoT_de_NuTeLLa dans le forum XSL/XSLT/XPATH
    Réponses: 8
    Dernier message: 07/06/2010, 12h45
  2. Modification de composant ds une boucle
    Par sinsenono dans le forum C++Builder
    Réponses: 10
    Dernier message: 22/02/2004, 12h46
  3. swf dans une boucle asp
    Par Chucky69 dans le forum Flash
    Réponses: 11
    Dernier message: 10/02/2004, 17h07
  4. [Vb.net] Indexé un objet crée dans une boucle
    Par picpic dans le forum Windows Forms
    Réponses: 10
    Dernier message: 17/12/2003, 14h37
  5. Pause dans une boucle
    Par HT dans le forum Langage
    Réponses: 4
    Dernier message: 03/06/2003, 08h52

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