Pourquoi la consommation de mémoire se développe lors de l'utilisation de plusieurs threads sous Linux? (C++)
Programme:
J'ai créé un C++ programme de calcul pour le volume élevé de données, qui peut être exécuté sur 1 ou plusieurs threads. (via le fichier de config)
L'environnement du programme est le suivant: C++, OpenMp, Redhat-x64, malloc/free
Résultats sur Linux:
- Lorsque je l'exécute sur 1 fil, processus de taille 177 MO.
- Lorsque je l'exécute sur 2 threads, processus de taille est de 317 MO.
- Lorsque je l'exécute sur 4 threads, processus de taille est de 600 MO.
Résultats sur Windows:
- Processus de taille reste la même quel que soit le nombre de threads utilisés, 110MB.
Question:
Pourquoi la consommation de mémoire se développe lors de l'utilisation de plusieurs threads sous Linux?
La mémoire, le virtuel, le résident, partagé?
Il est procédé de la taille, désolé.
Chaque thread possède sa propre pile?
Je viens d'utiliser c++ standard malloc allocateur, je ne sais pas comment linux fonctionne après.
Est-ce réel, ou êtes-vous en quelque sorte de voir la même mémoire pour chaque thread, comme ils partagent tous un espace de mémoire, donc en multipliant le réel exigence de mémoire par le nombre de threads? Quels sont vous aide à déterminer la taille?
Il est procédé de la taille, désolé.
Chaque thread possède sa propre pile?
Je viens d'utiliser c++ standard malloc allocateur, je ne sais pas comment linux fonctionne après.
Est-ce réel, ou êtes-vous en quelque sorte de voir la même mémoire pour chaque thread, comme ils partagent tous un espace de mémoire, donc en multipliant le réel exigence de mémoire par le nombre de threads? Quels sont vous aide à déterminer la taille?
OriginalL'auteur Axel Borja | 2012-08-10
Vous devez vous connecter pour publier un commentaire.
Une juste estimation, c'est que
delete
dans Linux le cache mémoire libérée pour l'avenirnew
les demandes, comme il le fait sur Windows, mais Linux a un cache par thread alors que Windows dispose d'un cache par processus.(Plus précisément, il serait le C++ runtime library qui détermine comment un tel cache fonctionne).
Il est considéré comme un détail d'implémentation, sans un nom explicite. C'est aussi un peu d'une abstraction. Je crois que certaines implémentations de plusieurs piscines ou les caches, pour garder libéré des blocs de même taille, de les regrouper.
Ok, Merci beaucoup.
OriginalL'auteur MSalters
Utilisation
/proc/<PID>/maps
, ou mieuxpmap(1)
, pour comprendre les pages passer.OriginalL'auteur Nikolai Fetissov
Chaque thread de commencer a besoin d'une pile allouée pour l'exécuter, et de la mémoire pour toutes les variables. Je ne suis pas entièrement sûr que 150 mo par thread semble raisonnable, mais un thread local tableau pourrait provoquer quelque chose comme ça.
OriginalL'auteur Tom Tanner