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 :

Instruction SIMD, classe F32vec4


Sujet :

C++

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 31
    Points : 29
    Points
    29
    Par défaut [Resolu]Instruction SIMD, classe F32vec4
    Voilà j'ai un petit problème avec l'utilisation de cette classe ...
    Je l'utilise pour construire un 2 tableau qui ensuite seront additionné élément par élément (ce qui permet d'additionner 4 flottant à la fois).

    Sauf que ... Je n'arrive pas à utilise un F32vec4 pour réaliser mon addition

    Mon code est le suivant :

    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
    22
     
     __declspec(align(16)) F32vec4 * tableau;
      __declspec(align(16)) F32vec4 * tableau1;
      __declspec(align(16)) F32vec4 * tableau2;
     
      int taille = 10;
      tableau  =(F32vec4*)malloc(sizeof(F32vec4)* taille);
      tableau1  =(F32vec4*)malloc(sizeof(F32vec4)* taille);
      tableau2  =(F32vec4*)malloc(sizeof(F32vec4)* taille);
     
     
      for (int i = 0; i < taille; i++){
        for (int j = 0; j < 4; j ++){
          tableau[i][j] = i*10+j;
          tableau1[i][j] = i*10+j;
     
        }
      }
     
      for (int i = 0; i < taille; i++){
       tableau2[i] = tableau1[i] + tableau[i];
      }
    L'erreur donnée est qu'il y a un problème d'accès en lecture ... Ce que je comprend pas car quand je veux afficher le contenu des données sources (tableau et tableau1) je n'ai pas de probleme.

    (Je fais mon affichage simplement en utilisant un printf("%f %f %f %f\n", tableau[i][0], tableau[i][1],tableau[i][2],tableau[i][3]) )

    Si quelqu'un à une idée, je suis preneur car là je seche


    Merci d'avance

    ++ Beleys

  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
    Points : 460
    Points
    460
    Par défaut
    Ton allocation mémoire n'est probablement pas alignée sur 16 octets.
    (L'adresse hexadécimale du tableau doit se terminer par 0)

    Il ne faut pas utiliser la fonction malloc et free, mais celle convenant à ton système.
    Tu peux piocher parmi les fonction suivantes
    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
    22
    23
    24
    25
    #if (defined(__ICL) || defined(_MSC_VER) || defined(__ICC))
      #include <fvec.h>
      inline void *aligned_malloc (size_t size, size_t align=16) { return _mm_malloc(size,align); }
      inline void  aligned_free   (void *p)                      { return _mm_free(p); }
    #elif defined (__CYGWIN__)
      #include <xmmintrin.h>
      inline void *aligned_malloc (size_t size, size_t align=16) { return _mm_malloc(size,align);  }
      inline void  aligned_free   (void *p)                      { return _mm_free(p); }
    #elif defined(__MINGW32__)
      #include <malloc.h>
      inline void *aligned_malloc (size_t size, size_t align=16) { return __mingw_aligned_malloc(size,align);  }
      inline void  aligned_free   (void *p)                      { return __mingw_aligned_free(p);             }
    #elif defined(__FreeBSD__)
      #include <stdlib.h>
      inline void* aligned_malloc (size_t size, size_t align=16) { return malloc(size); }
      inline void  aligned_free   (void *p)                      { return free(p); }
    #elif (defined(__MACOSX__) || defined(__APPLE__)) 
      #include <stdlib.h>
      inline void* aligned_malloc (size_t size, size_t align=16) { return malloc(size); }
      inline void  aligned_free   (void *p)                      { return free(p); }
    #else
      #include <malloc.h>
      inline void* aligned_malloc (size_t size, size_t align=16) { return memalign(align,size); }
      inline void  aligned_free   (void *p)                      { return free(p); }
    #endif

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 31
    Points : 29
    Points
    29
    Par défaut
    Merci beaucoup ....

    J'avais du louper cela dans la doc ...
    J'avais bien vu le problème d'alignement, donc qu'il fallait le préciser à l'affectation mais pas vu qu'il fallait aussi le préciser à la réservation ...

    Encore merci

    ++ Beleys

Discussions similaires

  1. Optimiser une boucle à l'aide d'instructions simd
    Par moomba dans le forum Débuter
    Réponses: 5
    Dernier message: 10/11/2012, 19h31
  2. Instruction catch et classes dérivées.
    Par emmr.rida dans le forum C++
    Réponses: 15
    Dernier message: 24/06/2009, 12h20
  3. Instruction SIMD, véritable gain ou chimère
    Par beleys dans le forum C++
    Réponses: 9
    Dernier message: 20/07/2008, 21h04
  4. Instruction class pouet;
    Par oodini dans le forum C++
    Réponses: 1
    Dernier message: 21/03/2007, 19h20
  5. Instruction Class Of
    Par Bruno75 dans le forum Langage
    Réponses: 5
    Dernier message: 09/10/2003, 16h22

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