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 :

Utilisation de TOUS les processeurs


Sujet :

C#

  1. #1
    Membre confirmé
    Profil pro
    Ingénieur de développement
    Inscrit en
    Avril 2005
    Messages
    169
    Détails du profil
    Informations personnelles :
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur de développement

    Informations forums :
    Inscription : Avril 2005
    Messages : 169
    Par défaut Utilisation de TOUS les processeurs
    Bonjour à tous.

    A l'heure où les machines disposent de plusieurs coeurs, comment faire pour les utiliser ?


    Le programme ci-dessous utilisent une fonction qui manipule un tableau de 1000 flottants.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    using System;
     
    namespace Test
    {
        class Program
        {
     
            /// <summary> Tableau de travail</summary>
            static float[] m_Tab = new float[1000];
     
     
            /// <summary>
            /// Entrée du programme
            /// </summary>
            /// <param name="args"></param>
            static void Main(string[] args)        
            {
     
                // Fonction de Traitement
                Traitement();
     
                // Affichage
                Affichage();
            }
     
     
            /// <summary>
            /// Fonction de Traitement
            /// </summary>
            /// <returns>Toujours TRUE !!</returns>
            static bool Traitement()
            {
                for (Int32 Index = 0; Index < 1000; Index++)
                {
                    m_Tab[Index] = Index + (0.001f * Index) ;
                }
     
                return true;
            }
     
     
            /// <summary>
            /// Fonction d'Affichage
            /// </summary>
            static void Affichage()
            {
                for (Int32 Index = 0; Index < 1000; Index++)
                {
                    Console.WriteLine("Index: {0} = {1:0.000}", Index, m_Tab[Index]);
                }
     
     
                Console.WriteLine("\nPressez une touche pour finir !!");
                Console.ReadKey();
            }
        }
    }

    Je voudrais en final, répartir la charge sur plusieurs CPU. Donc simplement, dans la fonction "Traitement", faire exécuter simultanément une partie de la boucle (de 0 à 499) sur le processeur 1 et l'autre partie (de 500 à 999) sur le processeur 2.
    Sachant qu'il n'y a pour le moment aucun problème de synchronistation, comment aborderiez-vous le problème ?

    Le but recherché est l'optimisation du temps de traitement.

  2. #2
    Membre chevronné
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2008
    Messages
    381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2008
    Messages : 381
    Par défaut
    Utilisation des threads.

  3. #3
    Membre confirmé
    Profil pro
    Ingénieur de développement
    Inscrit en
    Avril 2005
    Messages
    169
    Détails du profil
    Informations personnelles :
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur de développement

    Informations forums :
    Inscription : Avril 2005
    Messages : 169
    Par défaut
    Le simple fait d'utiliser plusieurs Thread résoud le problème ?

    Windows va automatiquement dispatcher l'exécution des Threads sur les processeurs disponibles ?

  4. #4
    Membre Expert Avatar de meziantou
    Homme Profil pro
    autre
    Inscrit en
    Avril 2010
    Messages
    1 223
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : autre
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2010
    Messages : 1 223
    Par défaut
    Comme l'a dit PatteDePoule, les threads permettent de répartir les tâches.

    Si tu utilises dotnet 4 il y a des nouvelles choses sur le traitement parallèle comme les Tasks ou PLinq.

  5. #5
    Membre Expert
    Avatar de azstar
    Homme Profil pro
    Architecte Technique BizTalk/.NET
    Inscrit en
    Juillet 2008
    Messages
    1 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Technique BizTalk/.NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 198
    Par défaut
    même le c++ au on est sensé faire la manipulation des mémoires on a pas la possibilité d' utiliser les cpu directement car chaque Os utilise des politique de la gestion des cpu que soit le droit de priorité d'utilisation de CPU (FIFO ,........).

    alors ne rêve pas , en plus si vous avez ce chance alors la il faut maitrise les politique de gestion des ressources et résoudre les problème classique ......qui windows et linux et solaris(unix ) on résolue lors de leurs conception...

  6. #6
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 193
    Par défaut
    c'est windows qui au final choisit ou non d'utiliser plusieurs core ou non
    mais si tu n'as qu'un thread il n'en utilisera qu'un ^^

    mais avec les thread, ou le threadpool qui peut s'adapter au nombre de cores en général windows se met à utiliser tous les cores
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  7. #7
    Membre Expert
    Avatar de azstar
    Homme Profil pro
    Architecte Technique BizTalk/.NET
    Inscrit en
    Juillet 2008
    Messages
    1 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Technique BizTalk/.NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 198
    Par défaut
    j'ai entendu qu'un composant appel repartisseur c'est lui qui jeu le rôle de distribue les taches sur les CPUs (dans les dual core ) mais pour les core 2 duo je pense que les deux pross ont chaque un un repartisseur.

    et pour la dernière génération de intel (i3 et i5 et i7) il sont un possibilité de désactive(ne pas desactive mais il voix un seul core ) les autres core pour travaille avec un seul pour les anciennes applications (sqlserver express edition ) qui travaillant avec un core c'est Intel® Turbo Boost Technology.

  8. #8
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 193
    Par défaut
    j'ai du mal à comprendre ce que tu racontes ...

    j'ajouterais que les cores vu par .net (dans system.diagnostics il me semble) doivent etre des cores logiques et non physiques

    et la gestion des cores est différente d'os à un autre, windows 7 gère d'ailleurs ca beaucoup mieux que ces prédécesseurs, sur vista par exemple un meme thread pouvant être balancé d'un core à un autre, nécessitant un vidage de cache assez souvent, alors que windows 7 essaye de laisser un thread sur le meme core
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  9. #9
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Par défaut
    Citation Envoyé par meziantou Voir le message
    Comme l'a dit PatteDePoule, les threads permettent de répartir les tâches.

    Si tu utilises dotnet 4 il y a des nouvelles choses sur le traitement parallèle comme les Tasks ou PLinq.

    Même en 3.5, il y a le Parallel framework CTP, qui fonctionne très bien.

  10. #10
    Membre Expert
    Avatar de azstar
    Homme Profil pro
    Architecte Technique BizTalk/.NET
    Inscrit en
    Juillet 2008
    Messages
    1 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Technique BizTalk/.NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 198
    Par défaut
    j'ai du mal à comprendre ce que tu racontes ...
    moi je parle d'un niveau bas le niveau entre le OS et les matériels
    pas le niveau entre Framework et OS .

  11. #11
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Par défaut
    Citation Envoyé par Pol63 Voir le message
    j'ai du mal à comprendre ce que tu racontes ...
    Toi aussi ?

  12. #12
    Membre Expert Avatar de Marc3001
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2008
    Messages
    829
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Février 2008
    Messages : 829
    Par défaut
    Attention, multi-threaded n'est pas équivalent à multi-core.

    A ma connaissance, l'utilisation des threads et pools de thread seuls ne permet pas d'utiliser plusieurs cores d'une machine, tous les threads étant lancés sur le même process et sur le même core.

    Il faut utiliser des extensions spécifiques Parallel Programming for C# pour utiliser ces fonctionnalités.

    Tu trouveras des infos dans les liens ci-dessous :

    http://blogs.msdn.com/b/pfxteam/
    http://www.codeproject.com/KB/cs/aforge_parallel.aspx

  13. #13
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Par défaut
    Citation Envoyé par Marc3001 Voir le message
    Il faut utiliser des extensions spécifiques Parallel Programming for C# pour utiliser ces fonctionnalités.
    Non, non : en utilisant l'api native (NtQueryInformationProcess , NtSetInformationThread , NtSetInformationProcess, etc ...) on peut positionner des affinités de threads/core et/ou process/core.

    Attention à ne pas faire cela sur une application serveur, à moins que le serveur soit dédié à votre propre application (rare !)

  14. #14
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 193
    Par défaut
    Citation Envoyé par Marc3001 Voir le message
    Attention, multi-threaded n'est pas équivalent à multi-core.

    A ma connaissance, l'utilisation des threads et pools de thread seuls ne permet pas d'utiliser plusieurs cores d'une machine, tous les threads étant lancés sur le même process et sur le même core.

    ah non je suis pas d'accord, du moins on ne peut pas forcer windows, mais si on démarre 4 threads en .net sur un pc avec 4 cores et que windows n'a rien à faire on voit les 4 cores monter en utilisation ...

    et là pas besoin de théorie le test empirique que je viens de faire suffit, j'ai démarré 3 threads qui boucle (calculs) et j'ai 3 cores qui montent à 100% sur les 4 que j'ai
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  15. #15
    Membre Expert Avatar de Marc3001
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2008
    Messages
    829
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Février 2008
    Messages : 829
    Par défaut
    J'ai encore appris quelque chose....

  16. #16
    Membre Expert
    Avatar de azstar
    Homme Profil pro
    Architecte Technique BizTalk/.NET
    Inscrit en
    Juillet 2008
    Messages
    1 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Technique BizTalk/.NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 198
    Par défaut
    on sait bien que malgré des différents architectures des processeurs on a le même politique de gestion des fils d'attente des processeurs (il y 'a différentes politique de gestion des pross ) .

    bah si on laisse la gestion des processeurs au utilisateur (programme d'utilisateur ) on a fort chance de tomber dans le fameux problème classique

    2 processus P1 et P2 qui nécessitant deux ressources R1 et R2 pour s'exécuter.

    P1 détient R1.
    P2 détient R2.
    comme les deux processus n'ont pas encore les ressources nécessaires ils se mettant en attente.
    P1 qui a R1 et attend la libération de R2.
    et P2 qui a R2 et attend la libération de R1.
    alors les deux processus attendent a l'infini.

    et il y 'a encore des problèmes similaires. c'est pourquoi parfois on voix notre os se plante. par chance on peut résoudre ce problème par le fameux gestionnaire des taches et par pur des cas le reset.

  17. #17
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 193
    Par défaut
    sérieux azstar relis toi, tous tes posts sont bourrés de fautes d'orthographe et de grammaire (une vingtaine sur 5 lignes !)
    et en plus certaines de tes phrases (toutes ?) n'ont pas de sens !
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  18. #18
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Par défaut
    De plus, je ne vois pas bien le rapport entre un problème de synchro de process pour l'accès à une resource définie (qui par définition ne peut relever que de la conception de l'application) et cette histoire de file d'attente (qui relève du système).

  19. #19
    Membre Expert
    Avatar de azstar
    Homme Profil pro
    Architecte Technique BizTalk/.NET
    Inscrit en
    Juillet 2008
    Messages
    1 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Technique BizTalk/.NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 198
    Par défaut
    Désolé Pol63 français c'est ma deuxième longue.

  20. #20
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 193
    Par défaut
    c'est bien ce que j'espèrais pour toi (et puis la longueur c'est pas ce qui compte ^^)
    m'enfin de là à poster des phrases illisibles pour aider les gens, je ne suis pas sûr que ca aide beaucoup ...
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

Discussions similaires

  1. Réponses: 7
    Dernier message: 29/05/2013, 17h23
  2. Utilisation de tous les coeurs de mon proc
    Par coincoin73 dans le forum MFC
    Réponses: 7
    Dernier message: 22/11/2010, 20h53
  3. Réponses: 17
    Dernier message: 18/11/2010, 15h50
  4. VMWare 2.0.2 n'utilise pas tous les CPU physiques !?
    Par guslinux dans le forum VMware
    Réponses: 2
    Dernier message: 02/04/2010, 15h33
  5. Pour qu'un logiciel ne soit utiliser dans tous les sessions
    Par mouloudéen dans le forum Autres Logiciels
    Réponses: 10
    Dernier message: 14/12/2005, 19h10

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