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

SDL Discussion :

Semaphore et Mutex et performance


Sujet :

SDL

  1. #21
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    68
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 68
    Points : 41
    Points
    41
    Par défaut
    euh ... quelqu'un peu m'aider la ?

    je passe ma gestion des threads de SDL vers Win32 (ce post va devenir un post WIN ...)
    j'ai donc mis un #include "Windows.h" dans mon header
    sauf qu'il semble pas reconnaitre par la suite tout ce qui concerne la gestion que ca soir les Condition et les SectionCritique ...
    la difference c'est que dans ce fichier j'ai inclue aussi SDL

    #include "Windows.h"

    #ifdef WIN32
    #pragma comment(lib, "../SDL-1.2.11/lib/SDL.lib")
    #pragma comment(lib, "../SDL-1.2.11/lib/SDLmain.lib")
    #endif

    #include "../SDL-1.2.11/include/SDL.h"
    #include "../SDL-1.2.11/include/SDL_endian.h" /* Used for the endian-dependent 24 bpp mode */
    //#include "../SDL-1.2.11/include/SDL_image.h"
    #include "../SDL-1.2.11/include/SDL_thread.h"
    j'ai fait une bourde classique ?

    Ls reparti dans la doc

  2. #22
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    68
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 68
    Points : 41
    Points
    41
    Par défaut
    bon ok les CONDITION VARIABLE c'est que sous vista ...
    bon je change de methode

  3. #23
    Membre Expert

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Points : 5 724
    Points
    5 724
    Par défaut
    Citation Envoyé par Lsong

    J'ai oté mes codes de debug qui n'apporte pas grand chose (en gros ca lit le temps avant et apres l'appel pour savoir combien de temps c'est ecouler).
    La variable index doit être protegé car les threads ont besoin d'avoir une valeur differente à chaque fois.
    Dans ce cas précis tu poses 1 mutex pour protéger l'incrémentation d'une variable alors que pour cela le plus approprié ce ne serait pas les mutex mais les interlocks. Par contre du coup avec SDL je ne connais pas d'équivalent donc voici un lien MSDN

    Peut être que c'était pour l'exemple mais je me base sur cela pour répondre.


    D'autant plus avec les mutex (idem sémaphore) il faut faire attention à ce que tu ne généres pas de dead lock. C'est à dire qu'a aucun moment tout tes threads ne se retrouvent bloqués et attendent que quelqu'un les débloque.

    Normalement un thread qui lock doit délocker lorsqu'il termine la tâche associée (si possible le plus rapidemment possible )
    " Dis ce que tu veux qui insulte mon honneur car mon silence sera la réponse au mesquin.
    Je ne manque pas de réponse mais : il ne convient pas aux lions de répondre aux chiens ! " [Ash-Shafi'i ]

  4. #24
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    68
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 68
    Points : 41
    Points
    41
    Par défaut
    je suis passer au "section critique" qui font bien leur job
    bon les threads se repartissent pas bien le job mais c'est dut au fait qu'il ne se lance pas tous en même temps je suis parti utiliser les Event pour ca, mais ca ne marche pas vraiment
    je bosse encore dessu

  5. #25
    Membre Expert

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Points : 5 724
    Points
    5 724
    Par défaut
    Citation Envoyé par Lsong
    je suis passer au "section critique" qui font bien leur job
    bon les threads se repartissent pas bien le job mais c'est dut au fait qu'il ne se lance pas tous en même temps je suis parti utiliser les Event pour ca, mais ca ne marche pas vraiment
    je bosse encore dessu
    Pour synchroniser une variable à l'incrémentation, le plus adapté, au risque de me répéter, ce sont les interlocks. Les Events ca fait un peu usine à gaz pour une variable
    " Dis ce que tu veux qui insulte mon honneur car mon silence sera la réponse au mesquin.
    Je ne manque pas de réponse mais : il ne convient pas aux lions de répondre aux chiens ! " [Ash-Shafi'i ]

  6. #26
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    68
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 68
    Points : 41
    Points
    41
    Par défaut
    ne t'en fait pas les Event ce n'est pas pour une variable
    ca fait un peu marteau pilon pour ecraser ... une bacterie
    ce sont les sections critiques qui gerent ca

    Les Event c'est pour lancer et arreter les threads (j'ai un system de producteur, consomateur)

    pour optimiser j'ai regroupé comme proposer mes zones de données en blocs plus gros pour limiter à 8 passage en zone critique quelque soit le nombre de zone , ca monte a 1500 zone tout de même...

    je passe actuellement d'un temps de traitement de
    - 19 ms pour 1 thread en moyenne à
    - 7 ms pour 4 thread en moyenne

    comme la repartition n'est pas homogene le max pour les thread est de 10ms et le min de 5 ms
    bref la repartition marche enfin, bon j'ai un peu triché sur les collisions

    Il y a quelque chose dans le calcul des collisions qui provoque des pertes de temps. Je vois ca demain, chez moi j'ai pas de multi-core.

    petite question :
    un new ca peu se paralleliser ? ou le system ca se synchroniser dessus pour ne pas que deux threads fassent un new sur la même zone memoire ??

  7. #27
    Membre émérite
    Avatar de Ti-R
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2003
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 683
    Points : 2 568
    Points
    2 568
    Par défaut
    Moi aussi je suis dans les threads et les locks en se moment

    J'ai trouvé cela A "synchronized" statement for C++ like in Java

    Cela utilise les sections critiques, et cela fonctionne bien, si cela peut aider !

    un new ca peu se paralleliser ? ou le system ca se synchroniser dessus pour ne pas que deux threads fassent un new sur la même zone memoire ??
    Ton new enverra toujours un espace mémoire non attribué, sinon cela serait vite problématique.

  8. #28
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    68
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 68
    Points : 41
    Points
    41
    Par défaut
    pour information le New a des performance catastrophique en multi-thread, il faut donc éviter d'en faire le plus possible (du moins sous windows)

    sinon voila je système est prêt, la parallélisation des calculs de physique fonctionne

    merci a tous pour vos idées

  9. #29
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    sinon voila je système est prêt, la parallélisation des calculs de physique fonctionne
    Ca donne des résultats intéressants ? Tu as fait des comparaisons ?

  10. #30
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    68
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 68
    Points : 41
    Points
    41
    Par défaut
    Oui les résultat

    en forçant l'affinité du programme sur un seul des 4 core,
    en configurant un thread,
    et en jouant sur la surface pour avoir la même densité de calcul

    Le programme arrive à gérer 3750 cercles en même temps avant d'avoir des retard, c'est à dire dépasse les 40 ms.

    avec 4 threads (sur un quad-core sinon ça ne sert à rien) le programme monte à 11000 cercles sur toute la surface, avec plus les thread prennent plus que les 40 ms de la frame

    ça nous fait du 293%

    j'ai fais des test en mettant 3 threads,
    j'obtiens 10500 cercles, la partie non parrallele : l'affichage et certain traitement de la physique finisse par prendre un core entier, c'est surtout l'affichage car 10000 drawCircle avec SDL ça fini par prendre du temps

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. Multi-thread, Mutex et performances
    Par buzzkaido dans le forum C++
    Réponses: 18
    Dernier message: 20/09/2010, 15h43
  2. semaphore et mutex
    Par kimcharlene dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 16/09/2009, 13h55
  3. semaphore ou mutex
    Par ikuzar dans le forum Débuter
    Réponses: 8
    Dernier message: 16/08/2009, 22h46
  4. [IPC & ITC] Semaphore Vs Mutex
    Par ZaaN dans le forum C++
    Réponses: 6
    Dernier message: 07/06/2007, 14h39
  5. kesako: hook, semaphore, mutex
    Par gronaze dans le forum Linux
    Réponses: 1
    Dernier message: 15/02/2007, 17h17

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