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 :

[PERF] Boucle implicite et tableau


Sujet :

Fortran

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4
    Par défaut [PERF] Boucle implicite et tableau
    Bonjour, j'optimise un code scientifique qui comporte beaucoup de boucle implicite du type :

    A(:) = B(:)*C(:)

    A, B et C étant des tableaux.

    Il me semble avoir lu quelque part que ce code pouvait être avantageusement remplacé par des boucles explicites du type :

    Do i=1,100
    A(i) = B(i) * C(i)
    ENDDO

    Le compilateur notamment a plus de billes pour quelques optimisations (déroulage de boucle...)

    Avez vous déjà pu observer cela ?

    merci,
    Pierre

  2. #2
    Membre confirmé 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
    Par défaut
    Sur des cas triviaux comme A=B+C, non. Enfin, modulo la taille de la pile envoyé lors du link à ton programme. Il y a des chances que la pile explose si les dimensions sont trop importantes.

    Sur des opérations plus complexes, à proscrire. Généralement, notre petit cerveau fonctionne mieux de manière dédiée qu'un grand programme qui est destinée à traiter tout et nimporte quoi.

    Moralité un bon do..enddo ça mange pas de pain et au pire ça s'optimise aussi bien qu'une instruction "à boucle implicite"

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4
    Par défaut
    J'avais fait une maquette de code qui était censé reproduire le phénomène et je n'observais aucun gain à remplacer les boucles implicites.

    En revanche sur mon code indus, le passage à une boucle explicite (DO, ENDDO) me fait gagner 5% sur le temps total (et je n'ai pas remplacé toutes les occurences du phénomène).

    Lorsque je profile le code au niveau de la ligne de code, je remarque que je peux passer 600s. sur une initialisation d'un tableau de dimension 3 (il faut préciser que le code a une durée d'exécution de plusieurs jours et que je parle là du temps total passé sur cette initialisation). Je gagne un facteur 10 en passant à la boucle explicite.

    Je confirme donc cette voie. Un conseil cependant, ce constat ne touche pas toutes les boucles explicites, il est préférable de profiler son appli pour changer uniquement les lignes concernées les plus couteuses.

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

Discussions similaires

  1. [Perfs] Boucle for et iterateurs
    Par Uther dans le forum Contribuez
    Réponses: 14
    Dernier message: 17/06/2008, 12h13
  2. [MySQL] Pagination : faire une boucle dans un tableau ?
    Par benjam89 dans le forum PHP & Base de données
    Réponses: 9
    Dernier message: 13/09/2007, 20h10
  3. [Tableaux] Boucle sur un tableau associatif
    Par alexfrere dans le forum Langage
    Réponses: 11
    Dernier message: 28/06/2006, 15h44
  4. [Tableaux] Boucle dans un tableau
    Par apprenti-fab dans le forum Langage
    Réponses: 9
    Dernier message: 24/04/2006, 10h14
  5. Appel d'une fonction dans uns boucle d'un tableau
    Par PrinceMaster77 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 04/02/2005, 15h37

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