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

Programmation parallèle, calcul scientifique et de haute performance (HPC) Discussion :

single vs atomic [OpenMP]


Sujet :

Programmation parallèle, calcul scientifique et de haute performance (HPC)

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    110
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2004
    Messages : 110
    Points : 130
    Points
    130
    Par défaut single vs atomic
    Bonjour,

    je suis en train de paralléliser un code en OpenMP et j'utilise beaucoup de directives single pour modifier une variable partagée. Mais je me posais une question un peu existentielle: ne vaudrait-il pas mieux utiliser plutôt une directive atomic?

    J'ai déjà de bonnes perf sur mon code mais je me posais juste la question dans un cadre plus général.

    Merci pour vos avis!

  2. #2
    Inactif  


    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    5 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5 288
    Points : 15 620
    Points
    15 620
    Par défaut
    Avec une directive single, le code n'est plus parallélisé, il est préférable d'utiliser atomic
    Tu as testé ou non pour les perfs ?

    atomic : défini une zone de code qui doit être atomique. Sérialisation
    critical : défini une zone de code qui doit être exécuté sur 1 seul thread
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    #pragma omp critical        // sur n'importe quel thread
    #pragma omp single          // sur thread maître

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    110
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2004
    Messages : 110
    Points : 130
    Points
    130
    Par défaut
    Euh, tu confonds critical, single et master ?

    Pour moi, une zone master est exécuté sur le thread maitre alors que single c'est le premier thread qui y arrive qui exécute la zone (il me semble mais je peux me tromper).

    critical a une notion mémoire comme atomic mais c'est ces notions que je ne saisis pas forcément surtout l'avantage sur les performances.

  4. #4
    Inactif  


    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    5 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5 288
    Points : 15 620
    Points
    15 620
    Par défaut
    En effet, mes notes sont un peu...

    De wiki :
    single: specifying a code block that is executed by only one thread, a barrier is implied in the end.

    master: similar to single, but the code block will be executed by the master thread only and no barrier implied in the end.

    critical: the enclosed code block will be executed by only one thread at a time, and not simultaneously executed by multiple threads. It is often used to protect shared data from race conditions.

    atomic: the memory update (write, or read-modify-write) in the next instruction will be performed atomically. It does not make the entire statement atomic; only the memory update is atomic. A compiler might use special hardware instructions for better performance than when using critical.
    atomic utilisera des opérations atomic du processeur si possible, sinon sera émulé logiciel. Les perfs sont meilleur dans le premier cas

    Bref, dans tous les cas, atomic est mieux (si le contexte convient)

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    110
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2004
    Messages : 110
    Points : 130
    Points
    130
    Par défaut
    Ok merci pour cette explication.

    J'ai essayé à certains endroits mais pas de gain de perf visible....

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 29/08/2005, 14h51
  2. [SQL 2K] Supprimer les single user ?
    Par webtheque dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 01/08/2005, 11h46
  3. Réponses: 2
    Dernier message: 02/07/2005, 19h14
  4. [Single Table Inheritance] Documentation
    Par seb_asm dans le forum Design Patterns
    Réponses: 2
    Dernier message: 10/03/2005, 13h18
  5. Pb Linker (Single-threaded / Multithreaded)
    Par olive_le_malin dans le forum MFC
    Réponses: 4
    Dernier message: 26/08/2004, 17h30

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