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 :

plus de threads que de core ?


Sujet :

Threads & Processus C++

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 106
    Par défaut plus de threads que de core ?
    Bonjour,

    J'ai une tonne de petits calculs qui peuvent s'effectuer en parallèle, et pour simplifier je me demandais si l'OS/Proc était assez intelligent pour répartir au mieux la charge de travail tout seul (si je lance 100 threads d'un coup), ou si c'était contre-productif et que le gain était beaucoup plus important en gérant manuellement la répartition des taches par rapport au nombre de coeurs.
    Ce qui m'importe est le temps de calcul global de toutes ces taches, il n'y a pas de streaming de résultat en cours de parcours et chaque calcul est indépendant.

  2. #2
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Par défaut
    Généralement, l'abstraction à utiliser pour ce genre de chose est la notion de task, c'est ensuite la bibliothèque de tasking (tbb, ppl...) qui va se charger de répartir les milliers de tasks sur les quelques threads qui seront crées. Parce que cette répartition n'est pas évidente, et si tu la fais toi même, il y a des chances que tu le fasse de manière sous optimale (typiquement, soit trop de locks, soit pas assez de flexibilité par rapport aux variations de temps d'exécution d'une task à l'autre, avec du false sharing en plus) (recherche par exemple task stealing pour voir le genre d'optimisations mises en place).
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 106
    Par défaut
    Merci, je viens de tomber sur une classe Qt qui se charge de ça de facon optimale, QThreadPool

  4. #4
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Par défaut
    Que QThreadPool gère un nombre variable de threads, soit. Qu'elle le gère de manière optimale pour faire du parallélisme, non. Si chacune de tes tâches est grosse, le surcoût ne sera pas forcément visible. Si tu as des petites tâches, ce sera autre-chose.

    Pourquoi n'as-tu pas regardé tbb ou ppl comme je l'avais suggéré ?
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 106
    Par défaut
    Parce que tout mon projet est architecturé autour de Qt, c'était donc logique de regarder si il y avait ça parmi les classes proposé; et comme ce ne sont que des micro calcul dans chaque thread, l'équilibrage se fera de lui même.

  6. #6
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Par défaut
    Si ce sont des micro calculs, un threadpool ne sera justement pas efficace, car son coût d'infrastructure sera plus important que les calculs eux mêmes.
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 106
    Par défaut
    Hm.. pour être plus précis ce que j'appelle "micro calcul" dans mon contexte c'est l'équivalent de 2000 à 8000 opérations float, et j'ai entre 100 et 1000 paquets de ce genre à calculer. J'espère que QThreadPool bouffe moins que ça pour s'organiser...

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

Discussions similaires

  1. \parpic crée plus de boîtes que je ne lui demande
    Par Symonski dans le forum Programmation (La)TeX avancée
    Réponses: 0
    Dernier message: 16/08/2007, 10h28
  2. pourquoi mes champs INPUT prennent plus de place que la normal ?
    Par Ekimasu dans le forum Balisage (X)HTML et validation W3C
    Réponses: 12
    Dernier message: 21/05/2007, 11h50
  3. Réponses: 3
    Dernier message: 15/02/2006, 12h27
  4. [ORACLE 8.1.7.3] Plus de parse que d'execute ?
    Par had69 dans le forum Oracle
    Réponses: 8
    Dernier message: 24/10/2005, 13h54

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