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]Lecture et écriture en mémoire


Sujet :

C

  1. #1
    Membre éclairé

    Inscrit en
    Juin 2004
    Messages
    1 397
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 1 397
    Points : 763
    Points
    763
    Par défaut [Optimisation]Lecture et écriture en mémoire
    Bonjour tout le monde !
    J'utilise en ce moment l'outil VTune pour profiler un code afin de détecter des problèmes "subtils". Dans le cas qui me préoccupe, j'ai un problème de "64K aliasing" qui est décrit ainsi :

    Case 1: 64K Aliasing caused by code mostly made up of loads. Loads can compete with other loads for a load request buffer. If most of the 64K aliasing events are by code that is almost entirely loads (as opposed to loads intertwined with stores) then the performance impact for this case is rather insignificant.
    Recommendation: Move on to other performance issues. Collect data on secondary events for tuning if you have not already done so.

    Case 2: 64K Aliasing caused by code with loads mixed with stores. Loads that need a request buffer can get stuck behind a store. The store has to retire and get kicked out of the cache before the load can proceed. If most of the 64K aliasing events are caused by code that has intertwined loads and stores then the performance impact in this situation is significant.
    Quelques solutions sont aussi données :

    Try doing multiple loads and then multiple stores to avoid the significant penalty.

    One way to implement a memory allocator to avoid aliasing is to allocate more than enough space and pad. For example, allocate structures that are 68KB instead of 64KB, or have the allocator pad and return random offsets that are a multiple of 128 bytes.

    When declaring multiple arrays that are referenced with the same index and are each a multiple of 64KB, pad them to avoid declaring them contiguously. Padding can be accomplished by either intervening declarations of other variables, or by artificially increasing the dimension of the array.

    Voici maintenant mon cas personnel. J'ai une fonction, à qui je passe un pointeur en argument (sur un short*) et qui va réécrire ensuite les données, après traitement, via le même pointeur.

    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
    void mafonction(short *src, int alpha, int beta)
    {
      int p0 = src[-4];
      int p1 = src[-3];
      int p2 = src[-2];
      int p3 = src[-1];
      int p4 = src[0];
      int p5 = src[1];
      int p6 = src[2];
      int p7 = src[3];
     
    /* Un tas de traitements complexes :) */
     
      src[-4] = p0_modif;
      /* etc. */
    }
    J'ai un problème de 64k aliasing au début du programme, au chargement des données, et à la fin, lors de l'écriture.

    Il doit exister une façon simple de s'en sortir, mais j'avoue ne pas bien voir...

    Merci d'avance de votre réponse !

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 298
    Points : 886
    Points
    886
    Par défaut
    Salut, j'avoue ne pas tout comprendre à ton code : pourquoi les indices de scr commencent à -4 et non à 0 ?
    dans un tableau, les indices vont de 0 à N-1...
    est-ce une erreur de ta part, ou bien y a-t-il qqch qui m'a échappé ?

  3. #3
    Membre éclairé

    Inscrit en
    Juin 2004
    Messages
    1 397
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 1 397
    Points : 763
    Points
    763
    Par défaut
    C'est un pointeur, et on a besoin des données commençant à -4 (en fait, c'est plus général que cela, mais l'exemple est bon).

  4. #4
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 949
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 949
    Points : 5 663
    Points
    5 663
    Par défaut
    Dia,
    Citation Envoyé par progfou
    C'est un pointeur, et on a besoin des données commençant à -4 (en fait, c'est plus général que cela, mais l'exemple est bon).
    Je ne suis pas sûr que ce soit correct. A voir.

  5. #5
    Rédacteur

    Avatar de gege2061
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2004
    Messages
    5 840
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Points : 11 625
    Points
    11 625
    Par défaut
    Citation Envoyé par droggo
    Je ne suis pas sûr que ce soit correct. A voir.
    C'est correct, du moment que la zone pointée est valide : http://c.developpez.com/faq/c/?page=...LEAUX_pointeur

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 24/01/2011, 18h02
  2. Réponses: 2
    Dernier message: 09/07/2010, 13h31
  3. Réponses: 5
    Dernier message: 25/01/2010, 11h35
  4. Réponses: 3
    Dernier message: 30/06/2009, 15h45
  5. optimisation lecture/écriture de txt volumineux
    Par tibofo dans le forum VB 6 et antérieur
    Réponses: 10
    Dernier message: 25/01/2009, 14h00

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