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 :

Problème d'alignement sur 128 bits


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé

    Inscrit en
    Juin 2004
    Messages
    1 397
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 1 397
    Par défaut Problème d'alignement sur 128 bits
    Bonjour à tous !
    Afin d'exploiter les instructions de type SSE2, j'ai besoin d'aligner mes données sur 128 bits.
    Pour cela, j'utilise le mot clé __declspec(align(16)) comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    __declspec(align(16)) short mon_tab[720];
    Ce tableau est déclaré en private dans une classe.

    Lorsque je regarde l'adresse, il m'a aligné ce tableau sur 8 octets !
    J'ai donc l'impression que ça ne sert à rien.
    Y a-t-il quelque chose qui m'échappe ?

    Merci d'avance !

    PS: Je suis sous Visual, mais j'ai le même problème avec le même code sous gcc...

  2. #2
    Inactif  
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    743
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 743
    Par défaut
    J'ai jamais vérifié mais j'ai jamais remarqué de problème. Depuis le temps que je l'utilise avec ICL (j'utiilse que rarement VC) j'aurais probablement vu des problèmes.

    Par contre je ne sais pas ce que GCC va faire de ce code, peut-être qu'il l'ignore parce que normalement pour GCC c'est "__attribute__((__aligned__(16)))"

    Petit conseil, j'utilise une définition pour rendre le code plus facilement portable.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    #if defined(__ICL) || defined(_MSC_VER)
      #define __aligned __declspec(align(16))
    #elif defined(__GNUC__)
      #define __aligned __attribute__((__aligned__(16)))
    #endif

  3. #3
    Membre éprouvé

    Inscrit en
    Juin 2004
    Messages
    1 397
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 1 397
    Par défaut
    Effectivement, moi aussi j'utilise une définition .
    Donc, je ne comprends pas pourquoi il n'aligne pas sur 16...
    Il peut pourtant !

  4. #4
    Inactif  
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    743
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 743
    Par défaut
    Attends, je vais essayer de vérifier...

  5. #5
    Membre éprouvé

    Inscrit en
    Juin 2004
    Messages
    1 397
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 1 397
    Par défaut
    En fait j'ai trouvé pourquoi...
    A l'appel via l'accesseur, l'adresse retournée n'est pas l'adresse de base du tableau (qui est bien alignée sur 16 octets !) mais une adresse à 56 octets de plus.
    Du coup, ce n'est plus aligné sur 16, forcément !
    Merci quand même, ça me rassure quand à l'utilité du mot clé .

  6. #6
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Par défaut
    GCC, par exemple, n'honore pas les alignements sur la pile supérieurs à l'alignement de la pile elle-même, qui se trouve être 8 octets sous Linux.
    Même chose pour malloc/new.

    Edit: s/Windows/Linux/

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

Discussions similaires

  1. Afficher un nombre contenu sur 128 bits
    Par yoyo1811 dans le forum x86 32-bits / 64-bits
    Réponses: 4
    Dernier message: 19/04/2009, 00h23
  2. Problème d'alignement sur mon site
    Par bob5243 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 0
    Dernier message: 09/04/2009, 14h29
  3. [AC-2007] Problème Recordset aligné sur BD
    Par mike1310 dans le forum VBA Access
    Réponses: 1
    Dernier message: 09/04/2009, 14h27
  4. [VxiR2] Problème déphasage alignement sur plusieurs tableaux
    Par scalpa63 dans le forum Deski
    Réponses: 5
    Dernier message: 27/03/2009, 11h17
  5. Calcul sur 128 bits
    Par helmis dans le forum Débuter
    Réponses: 7
    Dernier message: 28/08/2008, 11h18

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