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 :

Question sur instructions ss3


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti Avatar de uriotcea
    Homme Profil pro
    Ingénieur / physicien
    Inscrit en
    Septembre 2003
    Messages
    1 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur / physicien
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 301
    Points : 444
    Points
    444
    Par défaut Question sur instructions ss3
    Bonjour
    J'essaye de tester l'implémentation d'instruction ss3 avec l'example ci-dessous qui fonctionne bien

    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
     
    void testSSE2(float* v1, float* v2)
    {
      __m128 v1m, v2m;
      memcpy(&v1m, v1, 4* sizeof(float));
      memcpy(&v2m, v2, 4* sizeof(float));
      v1m = _mm_add_ps(v1m, v2m);
      v1m = _mm_sub_ps(v1m, v2m);
      v1m = _mm_mul_ps(v1m, v2m);
      v1m = _mm_div_ps(v1m, v2m);
      v1m = _mm_sqrt_ps(v1m);
      memcpy(v1, &v1m, 4* sizeof(float));
    }
     
    float v1[4] = { 1, 2, 3, 4};
    float v2[4] = { 1, 2, 3, 4};
    for(int i = 0; i < 1000; i++)  testSSE2(v1,v2);
    std::cout << v1[0] << " " << v1[1] << " " << v1[2] << " " << v1[3] << std::endl;
    Maintenant je voudrais passer tout ca en double mais je n'y arrive pas. Je n'arrive pas non plus à savoir si les instruction ss3 acceptent des doubles.

    Merci de votre aide

  2. #2
    Membre chevronné
    Avatar de Goten
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 580
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 580
    Points : 2 205
    Points
    2 205
    Par défaut
    remplace les intrisics *_ps par *_pd (precision double)

    (et pour voir une bonne abstraction bien comme il faut avec un DSEL regarde nt2 :€ )
    "Hardcoded types are to generic code what magic constants are to regular code." --A. Alexandrescu

  3. #3
    Membre averti Avatar de uriotcea
    Homme Profil pro
    Ingénieur / physicien
    Inscrit en
    Septembre 2003
    Messages
    1 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur / physicien
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 301
    Points : 444
    Points
    444
    Par défaut
    Ok merci, ca fonctionne en remplacant aussi __m128 par __m128d
    Au passage, il y a t-il moyen de savoir si un processeur accepte ou non les instructions sse3

  4. #4
    Membre chevronné
    Avatar de Goten
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 580
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 580
    Points : 2 205
    Points
    2 205
    Par défaut
    Citation Envoyé par uriotcea Voir le message
    Ok merci, ca fonctionne en remplacant aussi __m128 par __m128d
    Au passage, il y a t-il moyen de savoir si un processeur accepte ou non les instructions sse3

    C'est /chiant/, ie c'est os-dependant. Du genre sous *BSD j'irais lire le dmesg ou sysctl, sur linux via /proc/cpuinfo et la solution *générique* via cpuid (l'instruction asm).

    Nt2 fait un peu de tout, notamment compiler un programme qui utilise cpuid.

    Si ça t'intéresse j'ai un bout de code (en C) qui fait ça.
    "Hardcoded types are to generic code what magic constants are to regular code." --A. Alexandrescu

  5. #5
    Membre averti Avatar de uriotcea
    Homme Profil pro
    Ingénieur / physicien
    Inscrit en
    Septembre 2003
    Messages
    1 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur / physicien
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 301
    Points : 444
    Points
    444
    Par défaut
    Oui ca m'interresse, pour ma part j'ai trouvé ca, je ne sais pas si c'est compatible

    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
     
    int cpuid;
        asm (    "movl $1, %%eax;"
                 "cpuid;"
            "movl %%edx, %0;"
            :"=&r"(cpuid)
            :
            :"%ebx");
        if(cpuid & 0x800000)
            printf("Found MMX capabilities\n");
        if(cpuid & 0x2000000)
            printf("Found SSE capabilities\n");
        if(cpuid & 0x4000000)
            printf("Found SSE2 capabilities\n");
        if(cpuid & 0x1)
            printf("Found SSE3 capabilities\n");
        if(cpuid & 0x200)
            printf("Found SSE3+ capabilities\n");
        if(cpuid & 0x80000)
            printf("Found SSE4.1 capabilities\n");
    Au passage (un de plus) je suis à la recheche d'example simple d'utilisation d'instruction sse3

  6. #6
    Membre chevronné
    Avatar de Joel F
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Septembre 2002
    Messages
    918
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2002
    Messages : 918
    Points : 1 921
    Points
    1 921
    Par défaut
    pas de memcpy pour charger un registre SSE, on utilise _mm_load_ps/pd.
    ta memoire doit etre allouée alignée aussi , sinon seg fault.

    EDIT: et bien sur http://github.com/MetaScale/nt2 precisement le module (mal/peu documenté) sdk/simd

Discussions similaires

  1. [ARM] Questions sur certaines instructions
    Par Crosser02 dans le forum Autres architectures
    Réponses: 0
    Dernier message: 03/03/2010, 12h11
  2. Jeu d'instructions et petites questions sur l'asm
    Par SimpleMe dans le forum Assembleur
    Réponses: 6
    Dernier message: 16/03/2007, 18h42
  3. Question sur les instructions
    Par argon dans le forum C
    Réponses: 6
    Dernier message: 25/05/2006, 10h32
  4. Question sur instruction With imbriquée
    Par LadyWasky dans le forum Bases de données
    Réponses: 2
    Dernier message: 14/10/2005, 11h26
  5. Question sur l'instruction [b] system[/b]
    Par Sniper37 dans le forum MFC
    Réponses: 8
    Dernier message: 03/03/2004, 16h13

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