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

Threads & Processus C++ Discussion :

Problème de lenteur du multi-threading


Sujet :

Threads & Processus C++

  1. #21
    Membre éprouvé
    Femme Profil pro
    ..
    Inscrit en
    Décembre 2019
    Messages
    562
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 94
    Localisation : Autre

    Informations professionnelles :
    Activité : ..

    Informations forums :
    Inscription : Décembre 2019
    Messages : 562
    Points : 1 253
    Points
    1 253
    Par défaut
    Dans le code que tu montres à aucun moment tu ne simules une addition d'échantillons. Il y a juste une boucle qui ne fait rien et pour rappel le compilateur ne prendra pas la peine de la traduire. Essaye de fournir un code simple qui soit plus représentatif des opérations à accomplir et sans les threads pour justement voir ce qu'on peut en faire.

  2. #22
    Membre éclairé
    Avatar de ABD-Z
    Homme Profil pro
    Ingé. webapps embarquées – Admin/mainteneur serveur/BDD – Formateur WordPress – Desiger : logo/site
    Inscrit en
    Septembre 2016
    Messages
    262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingé. webapps embarquées – Admin/mainteneur serveur/BDD – Formateur WordPress – Desiger : logo/site

    Informations forums :
    Inscription : Septembre 2016
    Messages : 262
    Points : 788
    Points
    788
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par kaitlyn Voir le message
    Il y a juste une boucle qui ne fait rien .
    Si, j'avais dé-commenté les affichages (bien plus coûteux qu'une addition).
    Résultat : toujours plus lent en multi-threading que ce soit avec OpenMP ou les thread de la stl.

    Une des solutions à tester est de choisir une structure de données de la STL, autre que les tableaux C, supportant for_each et changer la politique d'exécution en std:ecution::par_unseq.

    J'ai pris cet exemple de Microsoft :
    https://devblogs.microsoft.com/cppbl...r-performance/

    Je l'avais testé avec g++ , les résultats de l'exemple sont décevant.
    C'est bien dit dans le blog, faut utiliser cl, le compilateur d'optimisations de Microsoft : les performances sont réelles!

    J'ai testé pour mon exemple et le séquentiel est bien meilleur... Même avec les std::cout qui sont assez lents pourtant..

    Voici le code parallélisable avec for_each :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    std::array<Seq_Chan, CHANS> seq_chan_std_array;
     
     
        std::chrono::steady_clock::time_point begin2 = std::chrono::steady_clock::now();
    	for(unsigned int j = 0; j < COUNT; ++j){
    		std::cout << "*******************************"<<j<<"*******************************"<<std::endl;
    		std::for_each(std::execution::par_unseq, seq_chan_std_array.begin(), seq_chan_std_array.end(), [](Seq_Chan &sc){ sc.play(); });
    	}
     
     
    	std::chrono::steady_clock::time_point end2 = std::chrono::steady_clock::now();
    Je crois qu'une approche multi-threadé pour des tâches qui durent environ 200µs ou moins et qui doivent être synchronisées n'est pas optimale...
    À vérifier.

  3. #23
    Membre éprouvé
    Femme Profil pro
    ..
    Inscrit en
    Décembre 2019
    Messages
    562
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 94
    Localisation : Autre

    Informations professionnelles :
    Activité : ..

    Informations forums :
    Inscription : Décembre 2019
    Messages : 562
    Points : 1 253
    Points
    1 253
    Par défaut
    L’idéal est quand même d'avoir un modèle concret, complet et de faire le test.
    En plus il faut un bon chronographe car suivant les implémentations et les sources de temps la résolution de std::chrono laisse parfois à désirer. Elle peut être de 5 ou 10 millisecondes, donc ça aussi il faut le mesurer et comparer avec, ou privilégier, ce qui se fait de mieux sur la plateforme: QueryPerformanceCounter(), clock_gettime(), mach_absolute_time(), etc(). Voir aussi du coté de boost s'il apporte une solution à ce problème.
    Donc voilà, sans une bonne préparation du terrain tout n'est que spéculation.

  4. #24
    Membre chevronné Avatar de Astraya
    Homme Profil pro
    Consommateur de café
    Inscrit en
    Mai 2007
    Messages
    1 043
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Consommateur de café
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2007
    Messages : 1 043
    Points : 2 234
    Points
    2 234
    Par défaut
    Et j'ajouterais que si tu veux simple, garde les boucles, si tu veux du multithread performant sur ton cas spécifique, oublies la STL.
    Homer J. Simpson


  5. #25
    Membre chevronné Avatar de Astraya
    Homme Profil pro
    Consommateur de café
    Inscrit en
    Mai 2007
    Messages
    1 043
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Consommateur de café
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2007
    Messages : 1 043
    Points : 2 234
    Points
    2 234
    Par défaut
    Citation Envoyé par ABD-Z Voir le message
    Je crois qu'une approche multi-threadé pour des tâches qui durent environ 200µs ou moins et qui doivent être synchronisées n'est pas optimale...
    À vérifier.
    Peut-être que la solution est de redéfinir tes tâches, une tâche peut-etre le temps T, une autre le temps T+1.. Mais c'est sur que faire juste 3-4 additions multiplication c'est pas plus rapide en thread de par la nature même des processeurs et de leur cycle d'instruction
    Homer J. Simpson


  6. #26
    Expert éminent sénior
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 360
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 360
    Points : 20 377
    Points
    20 377
    Par défaut
    @ABD-Z comme il a été très bien expliqué rien ne prouve que faire du multithreading améliore les performances d'un programme.

  7. #27
    Membre éclairé
    Avatar de ABD-Z
    Homme Profil pro
    Ingé. webapps embarquées – Admin/mainteneur serveur/BDD – Formateur WordPress – Desiger : logo/site
    Inscrit en
    Septembre 2016
    Messages
    262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingé. webapps embarquées – Admin/mainteneur serveur/BDD – Formateur WordPress – Desiger : logo/site

    Informations forums :
    Inscription : Septembre 2016
    Messages : 262
    Points : 788
    Points
    788
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Astraya Voir le message
    Et j'ajouterais que si tu veux simple, garde les boucles, si tu veux du multithread performant sur ton cas spécifique, oublies la STL.
    donc tout ce qui est std::thread et std::execution::par_unseq/for_each je laisse tomber c'est pas le plus top? OpenMP est-ce meilleur?
    Sinon, quelle librairie de thread vraiment chouette conseillerez-vous? Celle de Windows? Posix?

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

Discussions similaires

  1. Problème de lenteur d'un thread
    Par augur67700 dans le forum Threads & Processus
    Réponses: 10
    Dernier message: 31/05/2013, 23h52
  2. Probléme serveur multi-thread
    Par hebus44 dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 14/11/2007, 22h32
  3. Problème Seveur multi-thread
    Par Doom2Darkness dans le forum C++
    Réponses: 14
    Dernier message: 05/06/2007, 19h32
  4. problme de multi thread
    Par L4BiN dans le forum Concurrence et multi-thread
    Réponses: 22
    Dernier message: 25/04/2007, 16h47
  5. Réponses: 11
    Dernier message: 14/02/2006, 00h26

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