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

C# Discussion :

Processus et Affinités


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    310
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 310
    Par défaut Processus et Affinités
    Bonjour,

    Je développe un programme très gourmand en ressource CPU, non multi-threadé (un seul thread principal pour l'instant).

    Quand je lance mon exe, est-ce que :
    - Windows va-t-il naturellement utiliser tous la totalité des coeurs de mon processeur (8 cores chez moi) ?
    - Pour être sûr qu'il le fasse, j'utiliserais :
    Process.GetCurrentProcess().ProcessorAffinity = (System.IntPtr) ?;
    Ainsi mon problème est de remplacer le "?" par le bon mask, je ne comprends pas comment cela fonctionne, j'aimerai lui spécifier "les 8 coeurs"

    Merci pour votre aide.

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par jeremm Voir le message
    - Windows va-t-il naturellement utiliser tous la totalité des coeurs de mon processeur (8 cores chez moi) ?
    Pour un seul thread, il ne peut utiliser qu'un seul coeur...

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    310
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 310
    Par défaut
    Pardon j'ai écris une boulette j'ai un thread main et un tread de calcul. Donc 2.
    Actuellement par exemple il consomme les 8 coeurs pour les calculs. Hier il ne prenait que 2 coeurs.
    Comme gère-t-il cela ? C'est assez flou.
    C'est pourquoi j'aimerai le forcer à travers le ProcessorAffinity à 8 coeurs. Comme remplir le mask ?

    Merci

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par jeremm Voir le message
    Actuellement par exemple il consomme les 8 coeurs pour les calculs. Hier il ne prenait que 2 coeurs.
    Euh, ça me parait très surprenant... un thread ne peut utiliser qu'un coeur, donc 2 threads ne peuvent utiliser que 2 coeurs à la fois au maximum. Par contre l'OS peut toujours décider de passer un thread d'un coeur à un autre...

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    310
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 310
    Par défaut
    Ce n'est justement pas le travail du Scheduler de répartir les calculs lourds sur plusieurs coeurs ? En tout cas quand je lance mon exe je vois bien les 8 coeurs s'emballer à envrion 80% d'utilisation chacun et constant.
    Et si on peut assigner une valeur à ProcessorAffinity (que ce soit en C# ou a travers le gestionnaire de processus) c'est qu'il est bien possible d'utiliser un ou plusieurs coeurs selon notre envie non ?

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par jeremm Voir le message
    Ce n'est justement pas le travail du Scheduler de répartir les calculs lourds sur plusieurs coeurs ?
    Le scheduler répartit les tâches (= threads) sur les coeurs et donne la main successivement à tel ou tel thread, mais il ne peut pas "subdiviser" les tâches. Tous les calculs ne sont pas parallélisables automatiquement, c'est quelque chose qu'il faut gérer soi-même (soit manuellement en créant plusieurs threads, soit avec des librairies spécialisées comme la Task Pallel Library)

    Citation Envoyé par jeremm Voir le message
    En tout cas quand je lance mon exe je vois bien les 8 coeurs s'emballer à envrion 80% d'utilisation chacun et constant.
    En quoi consiste ton traitement ? Peut-être que tu utilises des composants qui sont implicitement multithread...

    Citation Envoyé par jeremm Voir le message
    Et si on peut assigner une valeur à ProcessorAffinity (que ce soit en C# ou a travers le gestionnaire de processus) c'est qu'il est bien possible d'utiliser un ou plusieurs coeurs selon notre envie non ?
    Non, c'est pour indiquer sur quel(s) processeur(s) le process peut s'exécuter

    Citation Envoyé par MSDN
    Gets or sets the processors on which the threads in this process can be scheduled to run.

Discussions similaires

  1. Processus paralleles
    Par Lyes dans le forum Threads & Processus
    Réponses: 4
    Dernier message: 11/02/2003, 13h04
  2. 1 variable pour 2 processus
    Par kacedda dans le forum POSIX
    Réponses: 2
    Dernier message: 11/02/2003, 06h32
  3. probleme avec les processus
    Par saidi dans le forum Autres éditeurs
    Réponses: 1
    Dernier message: 05/02/2003, 00h18
  4. [VB6] [Système] Tuer un processus courant
    Par mdoyer dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 22/10/2002, 14h47
  5. Réponses: 2
    Dernier message: 04/10/2002, 09h13

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