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

Algorithmes et structures de données Discussion :

Critere de permutation de boucles


Sujet :

Algorithmes et structures de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de torNAdE
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    255
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 255
    Par défaut Critere de permutation de boucles
    Salut,

    je voudrais savoir,pourquoi dans le cas de deux boucles imbriquées je dois mettre la boucle ayant le nombre maximum d'iterations la plus externe.

    Svp j en ai bsoin pour mon PFE.

    Merci.

  2. #2
    Membre émérite
    Avatar de ol9245
    Homme Profil pro
    Chercheur
    Inscrit en
    Avril 2007
    Messages
    985
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chercheur

    Informations forums :
    Inscription : Avril 2007
    Messages : 985
    Billets dans le blog
    1
    Par défaut
    qu'est-ce qui te fait dire ça ?

  3. #3
    Expert confirmé
    Avatar de PRomu@ld
    Homme Profil pro
    Ingénieur de Recherche
    Inscrit en
    Avril 2005
    Messages
    4 155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur de Recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 4 155
    Par défaut
    Intuitivement, j'aurai plutôt dit le contraire.

    De toute façon le nombre d'itération total sera le même, ça serait juste pour diminuer les calculs si tu dois faire des opérations avec la boucle la plus interne, mais hormis ce cas (somme toute extrêmement rare, et dans ce cas je doute que tu puisses inverser les boucles), je ne vois absolument pas l'intérêt d'échanger les boucles (si tant est que ça soit possible).

  4. #4
    Rédacteur

    Avatar de millie
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    7 015
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 015
    Par défaut
    Je dirais qu'il faut privilégier le sens pour lequel les accès sont le plus proche.

    Par exemple, pour une image, qui en mémoire est stocké par ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    1 2 3 
    4 5 6
    7 8 9
    Est stocké en mémoire comme ça :

    Il vaut mieux parcourir l'image dans le sens de la ligne plutôt que dans le sens des colonnes.

    Pourquoi cela ? Car il est souvent préferable de grouper les accès de zone proche. Car il est possible que des parties alignées soit mis dans le cache du processeur.

    Cela dit, je n'ai jamais fait de benckmark sérieux.

    Mais le système d'exploitation (ou autres) utilisent souvent le principe de la localité spatiale et temporelle pour optimiser les accès (que ce soit au niveau du disque dur (buffer cache) qu'au niveau de la mémoire (cache sur le processeur))

  5. #5
    Expert confirmé
    Avatar de PRomu@ld
    Homme Profil pro
    Ingénieur de Recherche
    Inscrit en
    Avril 2005
    Messages
    4 155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur de Recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 4 155
    Par défaut
    Oui, ça permet d'éviter les défauts de page, et de rendre ton programme "cache-friendly", suivant la machine les résultats sont plus ou moins importants. Mais en règle général, le compilateur peut réorganiser les boucles pour traiter ces cas.

    En revanche, par rapport à la question originale, ça n'est pas la longueur de la boucle qui importera.

  6. #6
    Rédacteur
    Avatar de Zavonen
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 772
    Détails du profil
    Informations personnelles :
    Âge : 77
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 772
    Par défaut
    Le seul cas où on peut avoir à réfléchir sérieusement à ce problème c'est quand les boucles sont contrôlées par des instructions de sorties extraordinaires, par exemple en C 'continue' et 'break'.
    Il faut de plus savoir quand on peut s'attendre à avoir ces sorties. Alors on peut s'attendre à des améliorations notables en imbriquant correctement les boucles, mais c'est au cas par cas.
    Ce qu'on trouve est plus important que ce qu'on cherche.
    Maths de base pour les nuls (et les autres...)

  7. #7
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Par défaut
    Citation Envoyé par torNAdE
    je voudrais savoir,pourquoi dans le cas de deux boucles imbriquées je dois mettre la boucle ayant le nombre maximum d'iterations la plus externe.
    ??

    Oui, moi aussi je voudrais bien savoir pourquoi ??!!!?
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  8. #8
    Membre éprouvé

    Inscrit en
    Juin 2004
    Messages
    1 397
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 1 397
    Par défaut
    Ce n'est pas un devoir de mettre la boucle ayant le plus grand nombre d'itérations en amont, mais c'est souvent mieux, sauf si c'est contraire, comme le disait millie, au sens des données.

    Un exemple, qui s'appelle le cache blocking :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    For (i=0 ; i<10000 ; i++)
     
    	for (j=0 ; j<10000 ; j++)
     
    		for (k=0 ; k<10000 ; k++)
     
    			C[j][k] += A[i][k]*B[j][i];
    Dans ce cas précis, il y a un problème quand on est dans les boucles j/k, car A peut très bien ne plus se trouver en cache.
    La solution en général, pour améliorer les choses :
    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
    18
    19
    20
    21
    for (i=0 ; i<10000 ; i++)
     
      for (j1=0 ; j1<100 ; j1++)
     
        for (k1=0 ; k1<100 ; k1++)
     
          for (j2=0 ; j2<100 ; j2++)
     
            for (k2=0 ; k2<100 ; k2++)
     
    	{
     
    	  j = j1*100 + j2;
     
    	  k = k1*100 + k2;
     
     
     
    	  C[j][k] += A[i][k]*B[j][i];
     
    	}

Discussions similaires

  1. Boucle sur tests de permutation
    Par Jennn dans le forum SAS STAT
    Réponses: 1
    Dernier message: 30/05/2012, 18h04
  2. [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
  3. [directsound] boucle de traitement de son
    Par gargle dans le forum DirectX
    Réponses: 5
    Dernier message: 24/03/2003, 10h47
  4. Sortir d'un progamme qui boucle ou qui refresh
    Par mikevador02 dans le forum C
    Réponses: 12
    Dernier message: 14/12/2002, 09h38
  5. Réponses: 2
    Dernier message: 29/05/2002, 20h43

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