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 :

Multithreading sur biprocesseur


Sujet :

Threads & Processus C++

  1. #1
    Membre éprouvé
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    mai 2016
    Messages
    313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

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

    Informations forums :
    Inscription : mai 2016
    Messages : 313
    Points : 1 238
    Points
    1 238
    Par défaut Multithreading sur biprocesseur
    Bonjour

    Sur un système biprocesseur, je me rend compte que tous les threads de mon application sont créés sur un seul des deux processeurs, même lorsque le nombre de threads dépassent le nombre de coeurs logiques du processeur : les threads supplémentaires ne sont pas créés sur le second processeur.
    Je sais qu'on peut en principe contrôler ce comportement avec l'API Windows, suggérer au système de créer les threads sur un processeur donné, mais ça m'ennuie de réintroduire de l'API Windows dans un noyau de calcul intensif que j'aimerais autant que possible garder portable.
    Il n'y a vraiment rien de plus haut niveau, dans le C++ 11/14 pour contrôler cela ?
    Pour l'instant, j'utilise std::thread de la STL.

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    février 2005
    Messages
    4 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : février 2005
    Messages : 4 756
    Points : 11 343
    Points
    11 343
    Par défaut
    tous les threads de mon application sont créés sur un seul des deux processeurs
    Heu, la création, on s'en cogne un peu non ?
    C'est plus l'exécution du thread non ?
    Un thread peu facilement passé d'un cœur à un autre, et un peu moins facilement d'un processeur à un autre.
    Oui, il est possible de réduire les possibilités de migration d'un thread, mais le réglage par défaut est qu'un processus dispose d'un masque des CPU possibles ouverts à tous les CPU (un peu de problème avec plus de 64 CPU virtuel), et idem pour les thread du processus qui hérite du masque du processus.
    Vérifiez les "masques d'affinité" du processus et des threads avec un outil comme ProcessExplorer.

  3. #3
    Membre éprouvé
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    mai 2016
    Messages
    313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

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

    Informations forums :
    Inscription : mai 2016
    Messages : 313
    Points : 1 238
    Points
    1 238
    Par défaut
    Pour l'instant, tous les threads s'exécutent sur un seul processeur, même lorsque le nombre de threads dépasse le nombre de coeurs logiques du processeur.
    Je vais voir à quel niveau se fait ce réglage de masque d'affinité.

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    juin 2010
    Messages
    6 672
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : juin 2010
    Messages : 6 672
    Points : 30 451
    Points
    30 451
    Billets dans le blog
    4
    Par défaut
    La std::thread est assez pauvre. C'est pourquoi on favorise encore et toujours les threads spécifique à chaque plateforme dès qu'on a besoin d'en faire plus, et de choisir le cpu sur lequel l'exécuter, ou sa priorité etc.
    Si tu utilises les std::thread tu peux récupérer le handle natif et utiliser les fonctionnalités spécifiques à ta plateforme pour compenser, ça reste le meilleur compromis imo.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

Discussions similaires

  1. Accès multithread sur SQL Server CE
    Par Marco44 dans le forum C#
    Réponses: 1
    Dernier message: 31/08/2010, 11h34
  2. Réponses: 17
    Dernier message: 01/06/2009, 03h32
  3. Multithread sur une Base Access via ODBC
    Par jagboys dans le forum MFC
    Réponses: 6
    Dernier message: 12/03/2009, 11h19
  4. Connexion à firebird en multithread sur serveur multiprocesseur
    Par olivier_nicollet dans le forum Connexion aux bases de données
    Réponses: 9
    Dernier message: 17/12/2007, 16h24
  5. Réponses: 2
    Dernier message: 24/03/2006, 10h18

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