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

Programmation parallèle, calcul scientifique et de haute performance (HPC) Discussion :

Parallélisation et mémoires


Sujet :

Programmation parallèle, calcul scientifique et de haute performance (HPC)

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2011
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2
    Points : 4
    Points
    4
    Par défaut Parallélisation et mémoires
    Bonjour tout le monde est ce que qqn pourrait me dire exactement ce qu'est la mémoire non partagée ? Est ce que c'est la mémoire répartie ou pas ? Car j'ai vu que la mémoire répartie pouvait être partagée et n'étant pas très fort dans ce domaine-là j'aurais voulu avoir quelques précisions. Merci d'avance à tous

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    309
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 309
    Points : 928
    Points
    928
    Par défaut
    On parle de parallélisme à mémoire partagée quand les différents processus (que ce soit vraiment des processus, ou des threads, ou whatever) partagent (justement...) leur espace mémoire. C'est à dire qu'il existe un certain nombre d'emplacements mémoire (pas nécessairement tous, mais ça peut) que les deux (ou plus) processus peuvent lire et écrire. Dans ce cas, l'échange d'informations entre processus se fait préférentiellement par ce biais: si un processus A veut envoyer une information à B, A écrit l'information à un emplacement mémoire, que B vient ensuite lire.

    A contrario, on parle de parallélisme à mémoire non partagé quand chaque processus a son propre espace mémoire, totalement séparé de celui des autres processus. Ainsi, il est le seul a pouvoir lire et écrire ses variables. Dans ce cas, l'échange d'informations entre processus se fait généralement par passage de message. Quand un processus A veut envoyer une information à B, il met cette information dans un "message" (qui peut prendre différentes formes, mais ça peut par exemple être un paquet TCP/IP), et l'envoie à B, qui le reçoit ensuite. Après, les communications peuvent être synchrone ou asynchrone, mais l'idée reste la même.

    La mémoire partagée est une notion "logique": y a-t-il des emplacement mémoires que plusieurs processus peuvent voir?
    En revanche, la mémoire répartie est une notion "physique": une mémoire est dite répartie si elle n'est pas sur une seule machine.

    Rien n'empêche d'avoir de la mémoire répartie et partager: il "suffit" d'avoir soit un moyen de synchroniser la mémoire entre les différentes machines, soit que les accès à la mémoire se fasse en fait par passage de message. Ainsi deux processus sur deux machines différentes peuvent avoir l'impression de partager la même mémoire (l'un peu y écrire et l'autre y lire par exemple), alors qu'elles sont en fait sur des machines différentes.

    La limite entre toutes les notions présentées ici est évidement floues. Rien n'empèche d'avoir du passage de message au sein d'un même processus (entre deux threads) et d'implémenter en bas niveau ces messages par des écritures sur de la mémoire partagée. Et comme dit plus haut, de la mémoire partagée peut être simulée par échange de messages. Mais l'idée est là

    j'espère que ça t'éclaire un peu.

  3. #3
    Expert éminent sénior
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 352
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 352
    Points : 20 359
    Points
    20 359
    Par défaut
    Citation Envoyé par TropMDR Voir le message
    La limite entre toutes les notions présentées ici est évidement floues.
    en informatique il n'y a pas de notions floues c'est soit 1 soit 0

    Ceci dit quelques précisions supplémentaires : si un processus A possède un espace mémoire qui lui est particulier et alloué de manière exclusif il existe des méchanisme de partage de mémoire comme les Pipes, Inter Process Communication qui permettent de partager la mémoire entre A et B.


    pour ce qui est du partage de la mémoire au sein d'un même programme, si on crée des threads, on peut-être amené à verrouiller la mémoire pour éviter qu'un adresse mémoire soit lue ou écrite par 2 threads différents.
    Sous Windows c'est les Sections Critiques sous Linux il doit y avoir un équivalent

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    309
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 309
    Points : 928
    Points
    928
    Par défaut
    Citation Envoyé par Mat.M Voir le message
    en informatique il n'y a pas de notions floues c'est soit 1 soit 0
    J'aurais bien aimé un smiley pour être sur là...

    Citation Envoyé par Mat.M Voir le message
    Ceci dit quelques précisions supplémentaires : si un processus A possède un espace mémoire qui lui est particulier et alloué de manière exclusif il existe des méchanisme de partage de mémoire comme les Pipes, Inter Process Communication qui permettent de partager la mémoire entre A et B.
    Euh, non... Les Pipes sont des canaux de communications (d'ailleurs unidirectionnels), absolument pas de la mémoire partagé. C'est juste très proche de l'envoie de message. Et ensuite, "Inter Process Communication", c'est tout ce qui permet de faire communiquer des processus, et justement ça va du passage de message à la mémoire partagé. Après sous les OS POSIX, il est effectivement possible d'allouer des segments de mémoires partagés entre plusieurs processus (voir http://linux.die.net/man/2/shmget), mais rien à voir avec un pipe.

    Citation Envoyé par Mat.M Voir le message
    pour ce qui est du partage de la mémoire au sein d'un même programme, si on crée des threads, on peut-être amené à verrouiller la mémoire pour éviter qu'un adresse mémoire soit lue ou écrite par 2 threads différents.
    On peut effectivement, mais ce n'est pas toujours obligatoire: il existe plein d'algorithme dit "lock free".

    Citation Envoyé par Mat.M Voir le message
    Sous Windows c'est les Sections Critiques sous Linux il doit y avoir un équivalent
    Les sections critiques sont une spécificité du langage, pas du système d'exploitation. Java offre cette option par exemple. En C, on n'a pas ça (même sous windows), et il faut passer par des locks plus "bas niveau"

  5. #5
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2011
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2
    Points : 4
    Points
    4
    Par défaut
    Je vous remercie beaucoup quant à ces précisions. En effet, de par vos explications ainsi que mes recherches, je comprend bien les nuances entre les différents types de mémoires ainsi que ce qu'apporte chaque système. Toutefois, comme vous dites si bien, les limites entre chaque mémoire restent floues.

  6. #6
    Expert éminent sénior
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 352
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 352
    Points : 20 359
    Points
    20 359
    Par défaut
    Citation Envoyé par TropMDR Voir le message
    Les sections critiques sont une spécificité du langage, pas du système d'exploitation. Java offre cette option par exemple. En C, on n'a pas ça (même sous windows), et il faut passer par des locks plus "bas niveau"

    ah bon...?
    Est-ce qu'on parle bien de la même chose ?

    http://msdn.microsoft.com/en-us/libr...(v=vs.85).aspx

    http://msdn.microsoft.com/en-us/libr...(v=vs.85).aspx

  7. #7
    Modérateur
    Avatar de gangsoleil
    Homme Profil pro
    Manager / Cyber Sécurité
    Inscrit en
    Mai 2004
    Messages
    10 148
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Manager / Cyber Sécurité

    Informations forums :
    Inscription : Mai 2004
    Messages : 10 148
    Points : 28 113
    Points
    28 113
    Par défaut
    Citation Envoyé par TropMDR Voir le message
    Les sections critiques sont une spécificité du langage, pas du système d'exploitation. Java offre cette option par exemple. En C, on n'a pas ça (même sous windows), et il faut passer par des locks plus "bas niveau"
    La gestion des sections critiques est une specificite bas niveau, offerte soit par les API de l'OS, soit par sa conformite a une norme comme POSIX (qui offre des semaphores).
    "La route est longue, mais le chemin est libre" -- https://framasoft.org/
    Les règles du forum

  8. #8
    Membre éprouvé
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    309
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 309
    Points : 928
    Points
    928
    Par défaut
    Citation Envoyé par Mat.M Voir le message
    Ok au temps pour moi, je ne connaissais que les locks, sémaphore, etc, pas les sections critiques (qui semblent être un autre nom pour un lock de ce que j'en comprends).

    Merci !

Discussions similaires

  1. fichier mappé en mémoire
    Par WinBernardo dans le forum Delphi
    Réponses: 7
    Dernier message: 01/12/2006, 10h38
  2. Déterminer l'adresse d'une application en mémoire
    Par Gib dans le forum x86 32-bits / 64-bits
    Réponses: 9
    Dernier message: 11/06/2002, 15h27
  3. Vitesse de la mémoire vidéo
    Par Anonymous dans le forum x86 16-bits
    Réponses: 3
    Dernier message: 06/06/2002, 21h20
  4. Problème avec la mémoire virtuelle
    Par Anonymous dans le forum CORBA
    Réponses: 13
    Dernier message: 16/04/2002, 17h10

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