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#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  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
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    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.

  6. #6
    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 .

  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
    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...

  8. #8
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 197
    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 197
    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

  9. #9
    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.

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