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

Framework .NET Discussion :

Multi-thread n'utilise que partiellement les ressources CPU MultiCore


Sujet :

Framework .NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 37
    Par défaut Multi-thread n'utilise que partiellement les ressources CPU MultiCore
    Bonjour,

    Après des tas d'essais, il semblerait que la gestion de tableaux ou de listes de grandes tailles ne permet pas d'utiliser la totalité des ressources CPU du PC.
    Pas de problème pour d'autres opérations de calcul.

    On arrive à contourner ce problème en gérant des Tableaux de Tableaux ou des listes de listes (par exemple au lieu de gérer une liste de 1 million d'éléments, on traite 1000 listes de 1000 éléments).

    Auriez-vous une idée de la raison pour laquelle il y aurait un effet de "lock" inter-process lorsqu'on gère des grandes listes ?

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 37
    Par défaut
    Finalement, la gestion des listes ou des tableaux n'est pas en cause. La division en tableaux de tableaux ne résoud rien.

    Le problème vient de l'allocation mémoire, dès lors qu'on conserve des quantité importantes d'objets, queque soit la façon dont on les organise.

    Donc, pas de solution, sinon à faire en sorte de limiter la quantité d'objets simultanément alloués dans les threads (dans chaque thread ou dans l'ensemble des threads ?).

    Dans les tests, j'alloue en parrallèle quelques centaines de milliers d'objets par thread, chaque objet comportant une trentaine de variables (string, int ou char). Je précise que je ne sature pas la mémoire.

  3. #3
    Membre extrêmement actif

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Par défaut
    Quelle version du framework ?

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 37
    Par défaut
    Quelle version du framework ?
    Framework 3.5 !

  5. #5
    Membre extrêmement actif

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Par défaut
    Qu'est-ce que tu entends par "ne permet d'utiliser la totalité des ressources" ? Et comment tu t'en aperçois en regardant dans le gestionnaire des tâches ? Et pourquoi cela devrait utiliser 100% de CPU ? Puisque tu parles de quantité d'objet alloué c'est plus la ressource mémoire que CPU qui doit être évalué non ?

    Puis c'est un multicore pas un multiprocesseur si je comprends bien donc...

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 37
    Par défaut
    Citation Envoyé par hegros Voir le message
    Qu'est-ce que tu entends par "ne permet d'utiliser la totalité des ressources" ? ?...
    Je le constate effectiverment en regardant dans le gestionnaire des tâches.
    Et pourquoi cela devrait utiliser 100% de CPU ?
    Si je rajoute une boucle pour traiter n fois chaque objet (au lieu de le traiter une fois) l'utilisation des ressources CPU tend vers 100%.
    Puisque tu parles de quantité d'objet alloué c'est plus la ressource mémoire que CPU qui doit être évalué non ?
    Je n'ai aucun problème de saturation des ressources mémoires (toujours -de 50% de mémoire utilisée). C'est "seulement" le taux d'utilisation du CPU qui ne tend pas vers 100% en raison apparament du nombre d'objets alloués et non libérés durant le traitement opéré par chaque thread.
    Puis c'est un multicore pas un multiprocesseur si je comprends bien donc
    Oui, je fais les tests de performance sur un MultiCore.

  7. #7
    Membre extrêmement actif

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Par défaut
    Un process ce n'est rien d'autre qu'un espace d'adressage mémoire pour y mettre l'exécutable, charger des bibliothèques etc... C'est une entité statique.

    Un thread c'est une entité dynamique c'est elle qui prends et consomme la ressource CPU.

    Bref, tout cela pour dire que c'est les threads qui sont dans les starting block et c'est eux qui sont parallélisables et non pas les processus.

  8. #8
    Inactif  

    Homme Profil pro
    Ingénieur test de performance
    Inscrit en
    Décembre 2003
    Messages
    1 986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur test de performance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 986
    Par défaut
    Citation Envoyé par boulo Voir le message
    Bonjour,

    Après des tas d'essais, il semblerait que la gestion de tableaux ou de listes de grandes tailles ne permet pas d'utiliser la totalité des ressources CPU du PC.
    Pas de problème pour d'autres opérations de calcul.

    On arrive à contourner ce problème en gérant des Tableaux de Tableaux ou des listes de listes (par exemple au lieu de gérer une liste de 1 million d'éléments, on traite 1000 listes de 1000 éléments).

    Auriez-vous une idée de la raison pour laquelle il y aurait un effet de "lock" inter-process lorsqu'on gère des grandes listes ?

    ...

    Finalement, la gestion des listes ou des tableaux n'est pas en cause. La division en tableaux de tableaux ne résoud rien.
    Juste une idée comme cela. Gérer des grandes tailles de données peut vouloir dire que la plupart des données sont en mémoire vive (voir sur le disque dur...). Il n'y a pas assez de place en mémoire processeur pour les contenir toutes. Pour effectuer les traitements, le processeur doit swapper les données entre la mémoire vive et la mémoire proc. D'où interruption (si données sur disque dur -> interruption disque + interruption mémoire) et donc délai d'attente. Comme le processeur attends, il en fait moins, d'où impossibilité de monter en charge (100%).

    Une idée à débattre, je ne suis pas spécialiste des processeurs , de la mémoire vive et du fonctionnement des OS.

    PS : Connaître la taille de vos données. Connaître la taille des caches processeurs, mémoire vives, gestion mémoire framework .net, gestion mémoire de l'OS. Bref beaucoup de variables, si le problème vient de la taille des données.

    PS2 : ma réponse part du principe que vous gérez de grande quantité de données et qui prennent beaucoup d'espace mémoire.

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 37
    Par défaut
    Pour effectuer les traitements, le processeur doit swapper les données entre la mémoire vive et la mémoire proc.
    Bien vu moldavi
    Il est bien possible que les swaps entre cache processeur et RAM, qui utiliseraient du DMA (donc en parallèle avec les core), soient la raison d'une utilisation des cores inférieure à 100%.
    A confirmer ...

  10. #10
    Membre extrêmement actif

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Par défaut
    Tu vas avoir du mal à confirmer cette théorie en pratique...

  11. #11
    Inactif  

    Homme Profil pro
    Ingénieur test de performance
    Inscrit en
    Décembre 2003
    Messages
    1 986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur test de performance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 986
    Par défaut
    Bonjour.

    En partant de ce postulat et pour confirmer ceci, voici ce que je ferais (en gros avec les moyens du bord, sans spécialiste à portée de main...) :

    J'essaierai de prendre deux processeurs complètement identiques, sauf une différence. L'un a plus de mémoire cache que l'autre. et hop, test.

    Ceci dit, je pense que le problème est certainement plus complexe (beaucoup de variables interviennent = proc/mémoire/framework/OS).

Discussions similaires

  1. Utilisation du multi-threading dans les jeux vidéos
    Par Dalini71 dans le forum Développement 2D, 3D et Jeux
    Réponses: 11
    Dernier message: 10/10/2011, 12h45
  2. Mysql utilise que 25% des ressources
    Par myz-rix dans le forum Administration
    Réponses: 2
    Dernier message: 28/08/2009, 17h18
  3. [TOMCAT][MEMOIRE] utilisation de toutes les ressources
    Par fabszn dans le forum Tomcat et TomEE
    Réponses: 7
    Dernier message: 19/12/2005, 14h04

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