Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 06/07/2007, à 16:52

DrDam

parallelisation ???

Bonjour à tous, j'aimerai me renseigné sur la programmation parallele (pour le moment en restant très basique sur les bases ...) j'ai pas trouvé d'explication de base sur le net à part des cours où dès la troisiemme ligne, on part sur de la programmation....

DOnc si quelqu'un pouvais me renseigné ...

Merci


Tout ce qui a été crée par l'Homme devrait être patrimoine de l'humanité
Vous etes perdu ?, là ce sera trop loin

Hors ligne

#2 Le 06/07/2007, à 17:10

Watchwolf

Re : parallelisation ???

Pour la mise en palce de plusieurs processus, regarde du coté des fork() et des threads.
Pour la gestion des processus il faut regarder du coté des sémaphores et des moniteur.

Apres ca depend de ton langage. En C ce sont les sémaphores qui sont implémentés alors qu'en Java ce sont les moniteurs (à vérifier qd meme)

Hors ligne

#3 Le 06/07/2007, à 17:14

DrDam

Re : parallelisation ???

Pour la mise en palce de plusieurs processus, regarde du coté des fork() et des threads.
Pour la gestion des processus il faut regarder du coté des sémaphores et des moniteur.

Désolé mais je ne suis pas en étude d'info et je programme (en C) pour mon plaisir .. alors en français, ça veux dire quoi ??


Tout ce qui a été crée par l'Homme devrait être patrimoine de l'humanité
Vous etes perdu ?, là ce sera trop loin

Hors ligne

#4 Le 06/07/2007, à 17:24

Watchwolf

Re : parallelisation ???

Ben c'est simple, prenons le cas de base du langage C.

Tu veut que ton programme effectue plusieurs taches en même temps (en parallele) si je comprend bien.

Pour cela tu va dans ton processus principal (celui que tu a de base quoi) executer un fork ce qui va avoir pour effet de créer un processus fils (fils du pere, le pere etant le processus principal ...). Tu aura alors 2 processus.
Une autre méthode est d'utiliser les threads, c'est un peu differents mais bien plus pratique que les forks.

Une fois que tes 2 processus s'execute en parallele tu va avoir des problemes d'acces aux données.
- les 2 veulents écrire en même temps au même endroit ?
- une ecrit, l'autre lit ...
Les parties du code entrainant ce type de problemes sont appellés "zones critiques".

Dans le cas du fork()
Pour les forks tu peut regarder ici, c'est pas trop mal expliqué.
http://www.yolinux.com/TUTORIALS/ForkExecProcesses.html
Ce qu'il faut bien savoir c'est qu'un fork copie l'espace mémoire et le code du processus parent dans le processus fils. Si le fils modifie la valeur d'une variable, le pere ne le voi pas car sa donnée est dans un autre espace mémoire. Il n'y a pas de partage de l'espace mémoire. (le thread partage cette zone). (le lin que je t'ai donnée parle de vfork() qui partage la mémoire, mais je ne connaissait pas.)
Pour partager des zones mémoire il existe les "segments", d'autre méthodes de communication existe comme les "pipe"" ou les "messages".

Entraine toi deja avec fork sans t'occuper de partager de l'espace mémoire. Comprend bien ce que fait le "if" apres le "fork()"

Comme tu es débutant je rajoute:
Un programme est constitué de plusieurs, celle ci (ptre j'en oublie, mais l'idée est la):
- le code
- le contenu des variables
- la pile d'execution des fonctions (permet de revenir la ou on etait avant d'appeler un fonction lorque cette derniere est fini.

Dans le cas du fork tous ces espaces memoires (les 3) sont doublés, ainsi chaque processus a ces contenu de variables (ce n'est pas partagé).

Dernière modification par Watchwolf (Le 06/07/2007, à 17:28)

Hors ligne

#5 Le 07/07/2007, à 13:31

Link31

Re : parallelisation ???

Ou alors tu utilises OpenMP (intégré dans GCC 4.2) et tu peux paralléliser ton code en deux lignes, sans toutes les em*** qu'apporte l'utilisation de pthreads, fork et compagnie.

#include <omp.h>
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
	int nthreads, tid;

#pragma omp parallel private(nthreads, tid)
	{
		tid = omp_get_thread_num();
		printf("Je suis le thread numéro %d\n", tid);

		// code

		if (tid == 0)
		{
			nthreads = omp_get_num_threads();
			printf("Je suis le thread principal. Il y a %d threads au total.\n", nthreads);
		}
	}
}

Plus d'exemples ici : http://www.llnl.gov/computing/tutorials/openMP/exercise.html

Dernière modification par Link31 (Le 07/07/2007, à 13:37)

Hors ligne

#6 Le 07/07/2007, à 13:46

Watchwolf

Re : parallelisation ???

Link31

Qu'elles emmerdent il y a avec les thread classique qu'il n'y a pas avec openMP ?

Dernière modification par Watchwolf (Le 07/07/2007, à 13:46)

Hors ligne

#7 Le 07/07/2007, à 14:22

marc31

Re : parallelisation ???

Watchwolf a écrit :

Link31

Qu'elles emmerdent il y a avec les thread classique qu'il n'y a pas avec openMP ?

c'est surtout que cette bibliotheque a l'air de se programmer comme des threads, mais qu'elle supporte des taches sur plusieurs ordinateurs ou micro-pro. C'est donc une porte ouverte vers le clustering. (SMP)


ubuntu-gutsy / ATI RC410 [Radeon Xpress 200] + Nvidia GeForce 7300 SE / wireless RaLink RT2500 / toulouse-ouest / xmpp://marc.quinton@jabber.org

Hors ligne

#8 Le 07/07/2007, à 17:00

Link31

Re : parallelisation ???

Watchwolf a écrit :

Qu'elles emmerdent il y a avec les thread classique qu'il n'y a pas avec openMP ?

Les ressources partagées. OpenMP distribue automatiquement les variables à partager et les variables locales à chaque thread selon ce qui est indiqué dans la directive d'initialisation. La syntaxe est aussi beaucoup plus simple, vu qu'un programme parallélisé avec OpenMP et un programme séquentiel ont le même code.
C'est quand même beaucoup plus simple pour débuter.

Hors ligne

#9 Le 07/07/2007, à 17:23

Watchwolf

Re : parallelisation ???

Link31 a écrit :
Watchwolf a écrit :

Qu'elles emmerdent il y a avec les thread classique qu'il n'y a pas avec openMP ?

Les ressources partagées. OpenMP distribue automatiquement les variables à partager et les variables locales à chaque thread selon ce qui est indiqué dans la directive d'initialisation. La syntaxe est aussi beaucoup plus simple, vu qu'un programme parallélisé avec OpenMP et un programme séquentiel ont le même code.
C'est quand même beaucoup plus simple pour débuter.

Je ne connait pas openMP en faite.

Si j'ai 3 variables x,y et z.
Je peut dire que x est partagé, y est juste pour le pere et z que pour le fils ?
Si c'est oui alors ca a vraiment l'air ben lol

Hors ligne

#10 Le 07/07/2007, à 21:41

Link31

Re : parallelisation ???

Tu peux avoir des variables partagées (leur modification affecte tous les threads) et des variables privées, ou locales (leur modification n'affecte que le thread dans lequel elles ont été modifiées).

Hors ligne

#11 Le 21/03/2008, à 15:18

LostIGL

Re : parallelisation ???

Bonjour, j'arrive par hasard sur ce post car je cherche des infos sur la parallelisation.
Même si ce post date un peu j'ai l'espoir que certains puissent me répondre ...

Quels outils autre que OpenMP sont utilisés ?

Avez vous entendu parler de TBB ?

Si oui qu'en pensez vous ?
Et si qqun connait, j'aurai eventuellement qques questions supplementaires! tongue

Merci