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

x86 32-bits / 64-bits Assembleur Discussion :

asm & OpenMP


Sujet :

x86 32-bits / 64-bits Assembleur

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 11
    Par défaut asm & OpenMP
    Bonjour,

    Je veux écrire un code assembleur (utilisant le inlining) dans une boucle for parallèle.

    Est ce qu'il y a un moyen de le faire et ne pas avoir de segmentation fault

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    #pragma omp parallel for
    for (i = 0; i < 10; i++)
    {
    	asm volatile("movss 0(%rsi), %xmm0");
    }
    J'ai pensé à faire quelque chose du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    register double int x asm("%xmm0");
    int r asm("0(%rsi)");
    asm volatile("movss %0, %1" : "=r"(x) : "m"(r));
    et déclarer les variables utilisées comme des variable private mais cette syntaxe n'est pas acceptée.

  2. #2
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 502
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 502
    Par défaut
    Hmm. Je n'ai jamais eu affaire à OpenMP, donc je ne suis probablement pas en mesure de t'aider. Mais cela dit, comment est initialisé RSI ? Es-tu sûr que l'adresse qu'il contient est accessible par tout les threads, dans un premier temps ?

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 11
    Par défaut
    Je pense que ce n'est pas ça qui pose problème sinon ça n'aurait pas marché pour un seul thread (sans #pragma...).
    Je veux juste savoir est ce que cette ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    register int x asm("%xmm0");
    associe le registre xmm0 à la variable x, parce que le code assembleur généré n'est pas celui que je veux.

  4. #4
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 502
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 502
    Par défaut
    Citation Envoyé par InticIntic Voir le message
    Je pense que ce n'est pas ça qui pose problème sinon ça n'aurait pas marché pour un seul thread (sans #pragma...).
    Ça dépend comment sont lancés les threads, justement. S'ils ne partagent pas leur plan mémoire comme on pourrait s'y attendre et que ce sont en fait des processus distincts, le comportement serait cohérent.

    Je veux juste savoir est ce que cette ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    register double int x asm("%xmm0");
    associe le registre xmm0 à la variable x, parce que le code assembleur généré n'est pas celui que je veux.
    À part « double int » qui ne compilera pas en l'état, ça fonctionne bien chez moi.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 11
    Par défaut
    oui le double int est une erreur de frappe sinon

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    register double x asm("%xmm0");
    int r asm("0(%rsi)");
    asm volatile("movss %0, %1" : "=r"(x) : "m"(r));
    à la compilation voila l'erreur que j'ai
    Error: operand type mismatch for `movss'
    ça ne marche pas aussi pour le movsd, movaps, ...

Discussions similaires

  1. Coloration syntaxique ASM dans un RichEdit
    Par Crick dans le forum Composants VCL
    Réponses: 5
    Dernier message: 20/12/2002, 01h53
  2. Allocation dynamique de mémoire en asm
    Par narmataru dans le forum Assembleur
    Réponses: 7
    Dernier message: 17/12/2002, 22h31
  3. Reboot en asm ou C++
    Par Juke dans le forum x86 16-bits
    Réponses: 6
    Dernier message: 17/10/2002, 09h11
  4. [TP]code asm dans une procedure
    Par M.Dlb dans le forum Turbo Pascal
    Réponses: 3
    Dernier message: 17/08/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