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

C Discussion :

Optimisation d'une boucle for


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Homme Profil pro
    UVSQ
    Inscrit en
    Janvier 2016
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : UVSQ
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2016
    Messages : 4
    Par défaut Optimisation d'une boucle for
    Bonjour,
    Je sollicite votre aide, je suis debutant et je voudrais savoir comment on peut optimiser ce bout de code
    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
    16
    17
     
    for (k = 0; k < 20; k++)
        {
        for (i = 1; i <= size; i++)
          {
          for (j = 1; j <= size; j++)
            {
            x[fonction(i, j, size)] = 
            (a * ( x[fonction(i-1, j, size)] + x[fonction(i+1, j, size)]
             +
             x[fonction(i, j-1, size)] + x[fonction(i, j+1, size)])
             +  
             x0[fonction(i, j, size)]) / c;
            }
          }
        fonction(b, x, size);
        }

  2. #2
    Expert confirmé
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 769
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 769
    Par défaut


    • Supprimer ta première boucle parce que k n'intervient pas dans les calculs (tu fais k fois la même chose )
    • Tu sors tes cours de mathématiques pour simplifier ton addition pondérée des proches en croix (... je pense à des sommes partielles)

  3. #3
    Membre à l'essai
    Homme Profil pro
    UVSQ
    Inscrit en
    Janvier 2016
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : UVSQ
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2016
    Messages : 4
    Par défaut
    Justement a chaque tour de la boucle K j'execute une instruction, sinon je n'ai pas comrpis ce que vous vouliez dire pour le second point.

  4. #4
    Expert confirmé Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 041
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 041
    Par défaut
    salut,

    les maths c'est pas mon fort par contre je me dis que les appels de fonction() doivent couter cher, alors que quand on a fonction(i+1, j+1), au tour de boucle j suivant on relance le même calcul avec fonction(i+1, j), et idem pour i
    du coup avoir un tableau temp[i*j] permettrait d'effectuer des accès mémoire au lieu de calculs potentiellement lourds, ça vaut peut-être la peine de creuser...

  5. #5
    Membre à l'essai
    Homme Profil pro
    UVSQ
    Inscrit en
    Janvier 2016
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : UVSQ
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2016
    Messages : 4
    Par défaut
    Voila donc j'ai reussi a virer les appels de fonctions et la boucle k, y a t-il un moyen d'optimiser encore plus?
    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
    16
     
    for (i = 1; i <= grid_size*20 ; i++)
          {
          for (j = 1; j <= grid_size; j++)
            {
            x[ i % grid_size + 1 + (grid_size + 2) * j] 
            = 
            (a * ( x[ i % grid_size + (grid_size + 2) * j] + x[ i%grid_size + 2 + (grid_size + 2) * j]
             +
             x[ i % grid_size + 1  + (grid_size + 2) * (j-1)] + x[ i % grid_size + 1 + (grid_size + 2) * (j+1)])
             +  
             x0[ i % grid_size + 1 + (grid_size + 2) * j]) / c;
            }
    		if( (i % 20 == 0))
    		function(b, x, grid_size);
        }

  6. #6
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 967
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 967
    Par défaut
    Bonjour,

    Tu calcules souvent i % grid_size et grid_size + 2.

  7. #7
    Expert confirmé Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 041
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 041
    Par défaut
    Citation Envoyé par louyxv Voir le message
    Voila donc j'ai reussi a virer les appels de fonctions et la boucle k, y a t-il un moyen d'optimiser encore plus?
    difficile à dire, ça parait évident pour toi qui connais le code, mais vu d'ici je comprends pas un brin ce qu'est censé faire ce bout de code incomplet et qui pourrait bien être faux qui plus est (devrait pas y avoir un tableau glissant quelque part ?), tu dis que tu fais sauter la boucle k avec un modulo, pourquoi pas...

    et avant de vouloir optimiser plus, est-ce que tu as testé ? quel est le gain concrètement ?

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

Discussions similaires

  1. Optimisation d'une boucle for
    Par Novice_vba dans le forum Macros et VBA Excel
    Réponses: 14
    Dernier message: 24/07/2013, 15h20
  2. Optimisation d'une boucle for each
    Par misscricri dans le forum VB.NET
    Réponses: 3
    Dernier message: 25/01/2012, 23h06
  3. erreur pendant l'optimisation d'une boucle for
    Par bakaratoun dans le forum MATLAB
    Réponses: 2
    Dernier message: 29/01/2010, 14h44
  4. Optimisation d'une boucle for
    Par Vorlane dans le forum MATLAB
    Réponses: 0
    Dernier message: 07/07/2009, 11h36
  5. optimiser mon code avec une boucle for?
    Par Invité dans le forum ActionScript 3
    Réponses: 1
    Dernier message: 16/11/2007, 08h33

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