Introduction ` a la Programmation Parall` ele: BSPlib
Fr´ ed´ eric Gava et Ga´ etan Hains
L.A.C.L
Laboratoire d’Algorithmique,Complexit´e etLogique
Cours du M2 SSI option PSSR
1
Introduction
2
Communications BSP
3
Exercices
Plan
1
Introduction
2
Communications BSP
3
Exercices
1
Introduction
2
Communications BSP
3
Exercices
Introduction Communications BSP Exercices
The Paderborn University BSP-Library Premi`ere approche
D´ eroulement du cours
1
Introduction
The Paderborn University BSP-Library Premi` ere approche
2
Communications BSP Introduction
Passage de messages M´ emoire partag´ ee
3
Exercices
Introduction `a BSPlib 3 / 27
Kasako ?
Une biblioth`eque C d´edi´ee au calcul BSP
Proche du standard BSPLIB (http://www.bsp-worldwide.org/, possible d’´ecrire en standard) et de nouvelles fonctionnalit´es
Un nombre tr`es limit´e de fonctions (une petite vingtaine) par rapport `a MPI (plus de 100) ; mais tr`es expressives et tr`es efficaces
librement t´el´echargeable `ahttp://www.uni-paderborn.de/∼bsp/
on trouve aussi 2 autres implantations (moins r´ecentes) de BSPLib :
1 http://www.bsp-worldwide.org/implmnts/oxtool/
2 http://bsponmpi.sourceforge.net/
Sur quels types d’architectures
En fait, presque tous : grappes de PC (mode TCP/IP ou MPI) avec r´eseaux sp´eciaux (SCI), machines parall`eles commerciales (Cray T3E, SUNetc.), m´emoire partag´ees (mode SHMEM) et implantation MPI... La liste est disponible dans l’aide.
Introduction Communications BSP Exercices
The Paderborn University BSP-Library Premi`ere approche
The PUB
Kasako ?
Une biblioth`eque C d´edi´ee au calcul BSP
Proche du standard BSPLIB (http://www.bsp-worldwide.org/, possible d’´ecrire en standard) et de nouvelles fonctionnalit´es
Un nombre tr`es limit´e de fonctions (une petite vingtaine) par rapport `a MPI (plus de 100) ; mais tr`es expressives et tr`es efficaces
librement t´el´echargeable `ahttp://www.uni-paderborn.de/∼bsp/
on trouve aussi 2 autres implantations (moins r´ecentes) de BSPLib :
1 http://www.bsp-worldwide.org/implmnts/oxtool/
2 http://bsponmpi.sourceforge.net/
Sur quels types d’architectures
En fait, presque tous : grappes de PC (mode TCP/IP ou MPI) avec r´eseaux sp´eciaux (SCI), machines parall`eles commerciales (Cray T3E, SUNetc.), m´emoire partag´ees (mode SHMEM) et implantation MPI... La liste est disponible dans l’aide.
Introduction `a BSPlib 4 / 27
Kasako ?
Une biblioth`eque C d´edi´ee au calcul BSP
Proche du standard BSPLIB (http://www.bsp-worldwide.org/, possible d’´ecrire en standard) et de nouvelles fonctionnalit´es
Un nombre tr`es limit´e de fonctions (une petite vingtaine) par rapport `a MPI (plus de 100) ; mais tr`es expressives et tr`es efficaces
librement t´el´echargeable `ahttp://www.uni-paderborn.de/∼bsp/
on trouve aussi 2 autres implantations (moins r´ecentes) de BSPLib :
1 http://www.bsp-worldwide.org/implmnts/oxtool/
2 http://bsponmpi.sourceforge.net/
Sur quels types d’architectures
En fait, presque tous : grappes de PC (mode TCP/IP ou MPI) avec r´eseaux sp´eciaux (SCI), machines parall`eles commerciales (Cray T3E, SUNetc.), m´emoire partag´ees (mode SHMEM) et implantation MPI... La liste est disponible dans l’aide.
Introduction Communications BSP Exercices
The Paderborn University BSP-Library Premi`ere approche
The PUB
Kasako ?
Une biblioth`eque C d´edi´ee au calcul BSP
Proche du standard BSPLIB (http://www.bsp-worldwide.org/, possible d’´ecrire en standard) et de nouvelles fonctionnalit´es
Un nombre tr`es limit´e de fonctions (une petite vingtaine) par rapport `a MPI (plus de 100) ; mais tr`es expressives et tr`es efficaces
librement t´el´echargeable `ahttp://www.uni-paderborn.de/∼bsp/
on trouve aussi 2 autres implantations (moins r´ecentes) de BSPLib :
1 http://www.bsp-worldwide.org/implmnts/oxtool/
2 http://bsponmpi.sourceforge.net/
Sur quels types d’architectures
En fait, presque tous : grappes de PC (mode TCP/IP ou MPI) avec r´eseaux sp´eciaux (SCI), machines parall`eles commerciales (Cray T3E, SUNetc.), m´emoire partag´ees (mode SHMEM) et implantation MPI... La liste est disponible dans l’aide.
Introduction `a BSPlib 4 / 27
Kasako ?
Une biblioth`eque C d´edi´ee au calcul BSP
Proche du standard BSPLIB (http://www.bsp-worldwide.org/, possible d’´ecrire en standard) et de nouvelles fonctionnalit´es
Un nombre tr`es limit´e de fonctions (une petite vingtaine) par rapport `a MPI (plus de 100) ; mais tr`es expressives et tr`es efficaces
librement t´el´echargeable `ahttp://www.uni-paderborn.de/∼bsp/
on trouve aussi 2 autres implantations (moins r´ecentes) de BSPLib :
1 http://www.bsp-worldwide.org/implmnts/oxtool/
2 http://bsponmpi.sourceforge.net/
Sur quels types d’architectures
En fait, presque tous : grappes de PC (mode TCP/IP ou MPI) avec r´eseaux sp´eciaux (SCI), machines parall`eles commerciales (Cray T3E, SUNetc.), m´emoire partag´ees (mode SHMEM) et implantation MPI... La liste est disponible dans l’aide.
Introduction Communications BSP Exercices
The Paderborn University BSP-Library Premi`ere approche
The PUB
Kasako ?
Une biblioth`eque C d´edi´ee au calcul BSP
Proche du standard BSPLIB (http://www.bsp-worldwide.org/, possible d’´ecrire en standard) et de nouvelles fonctionnalit´es
Un nombre tr`es limit´e de fonctions (une petite vingtaine) par rapport `a MPI (plus de 100) ; mais tr`es expressives et tr`es efficaces
librement t´el´echargeable `ahttp://www.uni-paderborn.de/∼bsp/
on trouve aussi 2 autres implantations (moins r´ecentes) de BSPLib :
1 http://www.bsp-worldwide.org/implmnts/oxtool/
2 http://bsponmpi.sourceforge.net/
Sur quels types d’architectures
En fait, presque tous : grappes de PC (mode TCP/IP ou MPI) avec r´eseaux sp´eciaux (SCI), machines parall`eles commerciales (Cray T3E, SUNetc.), m´emoire partag´ees (mode SHMEM) et implantation MPI... La liste est disponible dans l’aide.
Introduction `a BSPlib 4 / 27
Kasako ?
Une biblioth`eque C d´edi´ee au calcul BSP
Proche du standard BSPLIB (http://www.bsp-worldwide.org/, possible d’´ecrire en standard) et de nouvelles fonctionnalit´es
Un nombre tr`es limit´e de fonctions (une petite vingtaine) par rapport `a MPI (plus de 100) ; mais tr`es expressives et tr`es efficaces
librement t´el´echargeable `ahttp://www.uni-paderborn.de/∼bsp/
on trouve aussi 2 autres implantations (moins r´ecentes) de BSPLib :
1 http://www.bsp-worldwide.org/implmnts/oxtool/
2 http://bsponmpi.sourceforge.net/
Sur quels types d’architectures
En fait, presque tous : grappes de PC (mode TCP/IP ou MPI) avec r´eseaux sp´eciaux (SCI), machines parall`eles commerciales (Cray T3E, SUNetc.), m´emoire partag´ees (mode SHMEM) et implantation MPI... La liste est disponible dans l’aide.
Introduction Communications BSP Exercices
The Paderborn University BSP-Library Premi`ere approche
Comment ?
Installation
Actuellement probl´ematique. La derni`ere version stable ne compile plus sur les Linux r´ecents et la version en cours (beta-version) ne fonctionne pas bien...Solution : il faut prendre les .c et .h de la ”vieille” et les mettre dans la beta-version (me demander de l’aide en cas de pb chez vous).
Les nouvelles fonctionnalit´ es non-BSP pure ?
1 sous-synchronisation (barri`ere non globals mais par groupe de processus)
2 synchronisation l´eg`ere (n’attend pas tout les processeurs mais juste un certain nombre de messages)
3 processus virtuelles et migration de processus l´egers
On ne vera que la synchronisation l´eg`ere. Les autres sont trop pol´emiques.
Introduction `a BSPlib 5 / 27
Installation
Actuellement probl´ematique. La derni`ere version stable ne compile plus sur les Linux r´ecents et la version en cours (beta-version) ne fonctionne pas bien...Solution : il faut prendre les .c et .h de la ”vieille” et les mettre dans la beta-version (me demander de l’aide en cas de pb chez vous).
Les nouvelles fonctionnalit´ es non-BSP pure ?
1 sous-synchronisation (barri`ere non globals mais par groupe de processus)
2 synchronisation l´eg`ere (n’attend pas tout les processeurs mais juste un certain nombre de messages)
3 processus virtuelles et migration de processus l´egers
On ne vera que la synchronisation l´eg`ere. Les autres sont trop pol´emiques.
Introduction Communications BSP Exercices
The Paderborn University BSP-Library Premi`ere approche
Comment ?
Installation
Actuellement probl´ematique. La derni`ere version stable ne compile plus sur les Linux r´ecents et la version en cours (beta-version) ne fonctionne pas bien...Solution : il faut prendre les .c et .h de la ”vieille” et les mettre dans la beta-version (me demander de l’aide en cas de pb chez vous).
Les nouvelles fonctionnalit´ es non-BSP pure ?
1 sous-synchronisation (barri`ere non globals mais par groupe de processus)
2 synchronisation l´eg`ere (n’attend pas tout les processeurs mais juste un certain nombre de messages)
3 processus virtuelles et migration de processus l´egers
On ne vera que la synchronisation l´eg`ere. Les autres sont trop pol´emiques.
Introduction `a BSPlib 5 / 27
Installation
Actuellement probl´ematique. La derni`ere version stable ne compile plus sur les Linux r´ecents et la version en cours (beta-version) ne fonctionne pas bien...Solution : il faut prendre les .c et .h de la ”vieille” et les mettre dans la beta-version (me demander de l’aide en cas de pb chez vous).
Les nouvelles fonctionnalit´ es non-BSP pure ?
1 sous-synchronisation (barri`ere non globals mais par groupe de processus)
2 synchronisation l´eg`ere (n’attend pas tout les processeurs mais juste un certain nombre de messages)
3 processus virtuelles et migration de processus l´egers
On ne vera que la synchronisation l´eg`ere. Les autres sont trop pol´emiques.
Introduction Communications BSP Exercices
The Paderborn University BSP-Library Premi`ere approche
Comment ?
Installation
Actuellement probl´ematique. La derni`ere version stable ne compile plus sur les Linux r´ecents et la version en cours (beta-version) ne fonctionne pas bien...Solution : il faut prendre les .c et .h de la ”vieille” et les mettre dans la beta-version (me demander de l’aide en cas de pb chez vous).
Les nouvelles fonctionnalit´ es non-BSP pure ?
1 sous-synchronisation (barri`ere non globals mais par groupe de processus)
2 synchronisation l´eg`ere (n’attend pas tout les processeurs mais juste un certain nombre de messages)
3 processus virtuelles et migration de processus l´egers
On ne vera que la synchronisation l´eg`ere. Les autres sont trop pol´emiques.
Introduction `a BSPlib 5 / 27
Installation
Actuellement probl´ematique. La derni`ere version stable ne compile plus sur les Linux r´ecents et la version en cours (beta-version) ne fonctionne pas bien...Solution : il faut prendre les .c et .h de la ”vieille” et les mettre dans la beta-version (me demander de l’aide en cas de pb chez vous).
Les nouvelles fonctionnalit´ es non-BSP pure ?
1 sous-synchronisation (barri`ere non globals mais par groupe de processus)
2 synchronisation l´eg`ere (n’attend pas tout les processeurs mais juste un certain nombre de messages)
3 processus virtuelles et migration de processus l´egers
On ne vera que la synchronisation l´eg`ere. Les autres sont trop pol´emiques.
Introduction Communications BSP Exercices
The Paderborn University BSP-Library Premi`ere approche
Pour commencer
Premi` ere utilisation
On compile avecpubcccomme un programme C
on ex´ecute avec la commandepubrun options program arguments: --procs=npour avoirnprocessus
-n hostlistexemple-p 3 -n node1 node2 node3 -m hostfilecomme MPI
Premier programme
Comme en MPI, on programme en mode SPMD
On initialise les arguments du programme (si besoin) puis toujours la machine parall`ele
Comme en MPI, on peut obtenir ensuite le nombre de processus et le
”pid” du processus
Un programme BSPLib doit toujours de-initialiser la machine parall`ele
Introduction `a BSPlib 6 / 27
Premi` ere utilisation
On compile avecpubcccomme un programme C
on ex´ecute avec la commandepubrun options program arguments: --procs=npour avoirnprocessus
-n hostlistexemple-p 3 -n node1 node2 node3 -m hostfilecomme MPI
Premier programme
Comme en MPI, on programme en mode SPMD
On initialise les arguments du programme (si besoin) puis toujours la machine parall`ele
Comme en MPI, on peut obtenir ensuite le nombre de processus et le
”pid” du processus
Un programme BSPLib doit toujours de-initialiser la machine parall`ele
Introduction Communications BSP Exercices
The Paderborn University BSP-Library Premi`ere approche
Pour commencer
Premi` ere utilisation
On compile avecpubcccomme un programme C
on ex´ecute avec la commandepubrun options program arguments: --procs=npour avoirnprocessus
-n hostlistexemple-p 3 -n node1 node2 node3 -m hostfilecomme MPI
Premier programme
Comme en MPI, on programme en mode SPMD
On initialise les arguments du programme (si besoin) puis toujours la machine parall`ele
Comme en MPI, on peut obtenir ensuite le nombre de processus et le
”pid” du processus
Un programme BSPLib doit toujours de-initialiser la machine parall`ele
Introduction `a BSPlib 6 / 27
Premi` ere utilisation
On compile avecpubcccomme un programme C
on ex´ecute avec la commandepubrun options program arguments: --procs=npour avoirnprocessus
-n hostlistexemple-p 3 -n node1 node2 node3 -m hostfilecomme MPI
Premier programme
Comme en MPI, on programme en mode SPMD
On initialise les arguments du programme (si besoin) puis toujours la machine parall`ele
Comme en MPI, on peut obtenir ensuite le nombre de processus et le
”pid” du processus
Un programme BSPLib doit toujours de-initialiser la machine parall`ele
Introduction Communications BSP Exercices
The Paderborn University BSP-Library Premi`ere approche
Pour commencer
Premi` ere utilisation
On compile avecpubcccomme un programme C
on ex´ecute avec la commandepubrun options program arguments: --procs=npour avoirnprocessus
-n hostlistexemple-p 3 -n node1 node2 node3 -m hostfilecomme MPI
Premier programme
Comme en MPI, on programme en mode SPMD
On initialise les arguments du programme (si besoin) puis toujours la machine parall`ele
Comme en MPI, on peut obtenir ensuite le nombre de processus et le
”pid” du processus
Un programme BSPLib doit toujours de-initialiser la machine parall`ele
Introduction `a BSPlib 6 / 27
Exemple
#include <pub.h>
int main(int argc, char∗ argv[] ) { t bsp bsp;
int pid, nprocs;
bsplib saveargs(\&argc,\&argv);
bsplib init(BSPLIB STDPARAMS,\&bsp);
nprocs = bsp nprocs(\&bsp);
pid = bsp pid(\&bsp);
printf( ”Hello world from processor \%d of \%d!\n”,pid,nprocs);
bsplib done();
return 0 }
Introduction Communications BSP Exercices
Introduction Passage de messages M´emoire partag´ee
D´ eroulement du cours
1
Introduction
The Paderborn University BSP-Library Premi` ere approche
2
Communications BSP Introduction
Passage de messages M´ emoire partag´ ee
3
Exercices
Introduction `a BSPlib 8 / 27
Mode par passage de messages
C’est le mode le plus simple et qui ressemble le plus `a MPI : on ”send” des messages et on ”getmsg” apr`es la barri`ere de synchronisation.
Mode par partage de m´ emoire
Dans ce mode, chaque processus peut rendre accessible aux autres processus une partie de sa m´emoire : une lecture distante n’est coh´erente qu’apr`es une barri`ere de synchronisation.
Que choisir ?
En fait, les 2 modes sont utiles et cela d´epend de votre algorithme. Pour envoyer des donn´ees r´ecemment calcul´ees `a un autre processus, il est souvent plus simple d’utiliser le mode par passage de messages. A contraiori, pour lire des donn´ees calcul´ees par un autre processus, mieux vaut que celui-ci mettent ses donn´ees dans un zone partag´ee.
Introduction Communications BSP Exercices
Introduction Passage de messages M´emoire partag´ee
2 modes de communications
Mode par passage de messages
C’est le mode le plus simple et qui ressemble le plus `a MPI : on ”send” des messages et on ”getmsg” apr`es la barri`ere de synchronisation.
Mode par partage de m´ emoire
Dans ce mode, chaque processus peut rendre accessible aux autres processus une partie de sa m´emoire : une lecture distante n’est coh´erente qu’apr`es une barri`ere de synchronisation.
Que choisir ?
En fait, les 2 modes sont utiles et cela d´epend de votre algorithme. Pour envoyer des donn´ees r´ecemment calcul´ees `a un autre processus, il est souvent plus simple d’utiliser le mode par passage de messages. A contraiori, pour lire des donn´ees calcul´ees par un autre processus, mieux vaut que celui-ci mettent ses donn´ees dans un zone partag´ee.
Introduction `a BSPlib 9 / 27
Mode par passage de messages
C’est le mode le plus simple et qui ressemble le plus `a MPI : on ”send” des messages et on ”getmsg” apr`es la barri`ere de synchronisation.
Mode par partage de m´ emoire
Dans ce mode, chaque processus peut rendre accessible aux autres processus une partie de sa m´emoire : une lecture distante n’est coh´erente qu’apr`es une barri`ere de synchronisation.
Que choisir ?
En fait, les 2 modes sont utiles et cela d´epend de votre algorithme. Pour envoyer des donn´ees r´ecemment calcul´ees `a un autre processus, il est souvent plus simple d’utiliser le mode par passage de messages. A contraiori, pour lire des donn´ees calcul´ees par un autre processus, mieux vaut que celui-ci mettent ses donn´ees dans un zone partag´ee.
Introduction Communications BSP Exercices
Introduction Passage de messages M´emoire partag´ee
Programmation BSP
Param` etres BSP
intbsp nprocs (t bsp∗bsp) : nombre de processeurs intbsp pid (t bsp∗bsp) : pid du processeur doublebsp g (t bsp∗bsp) (idem pourLets)
t bsp est le groupe BSP=tout les processeurs car pas de sous-groupes.
Synchronisation
Synchronisation globalvoidbsp sync (t bsp∗bsp) : tout les processus sont synchronis´es et apr`es cet appel, tout les messages ont ´et´e envoy´es.
Synchronisation l´eg`erevoidbsp oblsync (t bsp∗bsp,intnmsgs) : idem mais on pr´ecise le nombre de message `a attendre (c’est donc plus efficace mais il faut connaˆıtre ce nombre). Chaque send, put, get et chaque op´eration collective ajoute un message `a attendre.
Il est interdit de mixer les 2 dans une mˆeme super-´etape
Introduction `a BSPlib 10 / 27
Param` etres BSP
intbsp nprocs (t bsp∗bsp) : nombre de processeurs intbsp pid (t bsp∗bsp) : pid du processeur doublebsp g (t bsp∗bsp) (idem pourLets)
t bsp est le groupe BSP=tout les processeurs car pas de sous-groupes.
Synchronisation
Synchronisation globalvoidbsp sync (t bsp∗bsp) : tout les processus sont synchronis´es et apr`es cet appel, tout les messages ont ´et´e envoy´es.
Synchronisation l´eg`erevoidbsp oblsync (t bsp∗bsp,intnmsgs) : idem mais on pr´ecise le nombre de message `a attendre (c’est donc plus efficace mais il faut connaˆıtre ce nombre). Chaque send, put, get et chaque op´eration collective ajoute un message `a attendre.
Il est interdit de mixer les 2 dans une mˆeme super-´etape
Introduction Communications BSP Exercices
Introduction Passage de messages M´emoire partag´ee
Programmation BSP
Param` etres BSP
intbsp nprocs (t bsp∗bsp) : nombre de processeurs intbsp pid (t bsp∗bsp) : pid du processeur doublebsp g (t bsp∗bsp) (idem pourLets)
t bsp est le groupe BSP=tout les processeurs car pas de sous-groupes.
Synchronisation
Synchronisation globalvoidbsp sync (t bsp∗bsp) : tout les processus sont synchronis´es et apr`es cet appel, tout les messages ont ´et´e envoy´es.
Synchronisation l´eg`erevoidbsp oblsync (t bsp∗bsp,intnmsgs) : idem mais on pr´ecise le nombre de message `a attendre (c’est donc plus efficace mais il faut connaˆıtre ce nombre). Chaque send, put, get et chaque op´eration collective ajoute un message `a attendre.
Il est interdit de mixer les 2 dans une mˆeme super-´etape
Introduction `a BSPlib 10 / 27
Param` etres BSP
intbsp nprocs (t bsp∗bsp) : nombre de processeurs intbsp pid (t bsp∗bsp) : pid du processeur doublebsp g (t bsp∗bsp) (idem pourLets)
t bsp est le groupe BSP=tout les processeurs car pas de sous-groupes.
Synchronisation
Synchronisation globalvoidbsp sync (t bsp∗bsp) : tout les processus sont synchronis´es et apr`es cet appel, tout les messages ont ´et´e envoy´es.
Synchronisation l´eg`erevoidbsp oblsync (t bsp∗bsp,intnmsgs) : idem mais on pr´ecise le nombre de message `a attendre (c’est donc plus efficace mais il faut connaˆıtre ce nombre). Chaque send, put, get et chaque op´eration collective ajoute un message `a attendre.
Il est interdit de mixer les 2 dans une mˆeme super-´etape
Introduction Communications BSP Exercices
Introduction Passage de messages M´emoire partag´ee
Programmation BSP
Param` etres BSP
intbsp nprocs (t bsp∗bsp) : nombre de processeurs intbsp pid (t bsp∗bsp) : pid du processeur doublebsp g (t bsp∗bsp) (idem pourLets)
t bsp est le groupe BSP=tout les processeurs car pas de sous-groupes.
Synchronisation
Synchronisation globalvoidbsp sync (t bsp∗bsp) : tout les processus sont synchronis´es et apr`es cet appel, tout les messages ont ´et´e envoy´es.
Synchronisation l´eg`erevoidbsp oblsync (t bsp∗bsp,intnmsgs) : idem mais on pr´ecise le nombre de message `a attendre (c’est donc plus efficace mais il faut connaˆıtre ce nombre). Chaque send, put, get et chaque op´eration collective ajoute un message `a attendre.
Il est interdit de mixer les 2 dans une mˆeme super-´etape
Introduction `a BSPlib 10 / 27
Envoie
Il y a 3 m´ethodes :
voidbsp send (t bsp∗ bsp,intdest,void∗buffer,intsize) envoi simple d’un buffer de taille size pour le processus dest ; le buffer peut ˆetre modifier apr`es l’appel de la fonction
voidbsp sendmsg (t bsp∗ bsp,intdest, t bspmsg∗msg, intsize) envoie un message msg. Un message est construit par la fonction t bspmsg∗ bsp createmsg (t bsp∗bsp,int size) et l’on obtient un pointeur sur la donn´ee avecvoid∗ bspmsg data (t bspmsg∗msg). Il ne faut plus toucher `a la zone point´e par le message.
voidbsp hpsend (t bsp∗bsp,int dest,void∗ buffer,intsize ) identique que bsp send mais l’envoie est ”unbuffered” c’est-`a-dire qu’il ne faut pas modifier le buffer car aucune copie n’est effectu´ee.
Introduction Communications BSP Exercices
Introduction Passage de messages M´emoire partag´ee
Comment envoyer
Envoie
Il y a 3 m´ethodes :
voidbsp send (t bsp∗ bsp,intdest,void∗buffer,intsize) envoi simple d’un buffer de taille size pour le processus dest ; le buffer peut ˆetre modifier apr`es l’appel de la fonction
voidbsp sendmsg (t bsp∗ bsp,intdest, t bspmsg∗msg, intsize) envoie un message msg. Un message est construit par la fonction t bspmsg∗ bsp createmsg (t bsp∗bsp,int size) et l’on obtient un pointeur sur la donn´ee avecvoid∗ bspmsg data (t bspmsg∗msg). Il ne faut plus toucher `a la zone point´e par le message.
voidbsp hpsend (t bsp∗bsp,int dest,void∗ buffer,intsize ) identique que bsp send mais l’envoie est ”unbuffered” c’est-`a-dire qu’il ne faut pas modifier le buffer car aucune copie n’est effectu´ee.
Introduction `a BSPlib 11 / 27
Envoie
Il y a 3 m´ethodes :
voidbsp send (t bsp∗ bsp,intdest,void∗buffer,intsize) envoi simple d’un buffer de taille size pour le processus dest ; le buffer peut ˆetre modifier apr`es l’appel de la fonction
voidbsp sendmsg (t bsp∗ bsp,intdest, t bspmsg∗msg, intsize) envoie un message msg. Un message est construit par la fonction t bspmsg∗ bsp createmsg (t bsp∗bsp,int size) et l’on obtient un pointeur sur la donn´ee avecvoid∗ bspmsg data (t bspmsg∗msg). Il ne faut plus toucher `a la zone point´e par le message.
voidbsp hpsend (t bsp∗bsp,int dest,void∗ buffer,intsize ) identique que bsp send mais l’envoie est ”unbuffered” c’est-`a-dire qu’il ne faut pas modifier le buffer car aucune copie n’est effectu´ee.
Introduction Communications BSP Exercices
Introduction Passage de messages M´emoire partag´ee
Comment envoyer
Envoie
Il y a 3 m´ethodes :
voidbsp send (t bsp∗ bsp,intdest,void∗buffer,intsize) envoi simple d’un buffer de taille size pour le processus dest ; le buffer peut ˆetre modifier apr`es l’appel de la fonction
voidbsp sendmsg (t bsp∗ bsp,intdest, t bspmsg∗msg, intsize) envoie un message msg. Un message est construit par la fonction t bspmsg∗ bsp createmsg (t bsp∗bsp,int size) et l’on obtient un pointeur sur la donn´ee avecvoid∗ bspmsg data (t bspmsg∗msg). Il ne faut plus toucher `a la zone point´e par le message.
voidbsp hpsend (t bsp∗bsp,int dest,void∗ buffer,intsize ) identique que bsp send mais l’envoie est ”unbuffered” c’est-`a-dire qu’il ne faut pas modifier le buffer car aucune copie n’est effectu´ee.
Introduction `a BSPlib 11 / 27
Que choisir ?
Encore une fois cela d´epend de votre algorithme : s’il y a tr`es peu de communications :bsp send
s’il y a beaucoup de donn´ees `a envoyer `a un processeur mais de mani`ere non-contigue en m´emoire :bsp sendmsg
si l’on n’a pas besoin de modifier le buffer avant la prochaine super-´etape :bsp hpsend(hight-performance)
Exemple
inti, destination, data=1;
destination = (pid+1) % nprocs;
bsp send(&bsp, destination, &data,sizeof(int));
data = 2;
destination = (pid−1) % nprocs;
bsp send(&bsp, destination, &data,sizeof(int));
bsp sync(&bsp);
Introduction Communications BSP Exercices
Introduction Passage de messages M´emoire partag´ee
Comment envoyer
Que choisir ?
Encore une fois cela d´epend de votre algorithme : s’il y a tr`es peu de communications :bsp send
s’il y a beaucoup de donn´ees `a envoyer `a un processeur mais de mani`ere non-contigue en m´emoire :bsp sendmsg
si l’on n’a pas besoin de modifier le buffer avant la prochaine super-´etape :bsp hpsend(hight-performance)
Exemple
inti, destination, data=1;
destination = (pid+1) % nprocs;
bsp send(&bsp, destination, &data,sizeof(int));
data = 2;
destination = (pid−1) % nprocs;
bsp send(&bsp, destination, &data,sizeof(int));
bsp sync(&bsp);
Introduction `a BSPlib 12 / 27
Que choisir ?
Encore une fois cela d´epend de votre algorithme : s’il y a tr`es peu de communications :bsp send
s’il y a beaucoup de donn´ees `a envoyer `a un processeur mais de mani`ere non-contigue en m´emoire :bsp sendmsg
si l’on n’a pas besoin de modifier le buffer avant la prochaine super-´etape :bsp hpsend(hight-performance)
Exemple
inti, destination, data=1;
destination = (pid+1) % nprocs;
bsp send(&bsp, destination, &data,sizeof(int));
data = 2;
destination = (pid−1) % nprocs;
bsp send(&bsp, destination, &data,sizeof(int));
bsp sync(&bsp);
Introduction Communications BSP Exercices
Introduction Passage de messages M´emoire partag´ee
Comment envoyer
Que choisir ?
Encore une fois cela d´epend de votre algorithme : s’il y a tr`es peu de communications :bsp send
s’il y a beaucoup de donn´ees `a envoyer `a un processeur mais de mani`ere non-contigue en m´emoire :bsp sendmsg
si l’on n’a pas besoin de modifier le buffer avant la prochaine super-´etape :bsp hpsend(hight-performance)
Exemple
inti, destination, data=1;
destination = (pid+1) % nprocs;
bsp send(&bsp, destination, &data,sizeof(int));
data = 2;
destination = (pid−1) % nprocs;
bsp send(&bsp, destination, &data,sizeof(int));
bsp sync(&bsp);
Introduction `a BSPlib 12 / 27
Que choisir ?
Encore une fois cela d´epend de votre algorithme : s’il y a tr`es peu de communications :bsp send
s’il y a beaucoup de donn´ees `a envoyer `a un processeur mais de mani`ere non-contigue en m´emoire :bsp sendmsg
si l’on n’a pas besoin de modifier le buffer avant la prochaine super-´etape :bsp hpsend(hight-performance)
Exemple
inti, destination, data=1;
destination = (pid+1) % nprocs;
bsp send(&bsp, destination, &data,sizeof(int));
data = 2;
destination = (pid−1) % nprocs;
bsp send(&bsp, destination, &data,sizeof(int));
bsp sync(&bsp);
Introduction Communications BSP Exercices
Introduction Passage de messages M´emoire partag´ee
Recevoir des donn´ ees
Reception des donn´ ees
Apr` es la synchronisation, les donn´ ees de la pr´ ec` edente super-´ etape sont physiquement accessibles. Pour cela, on utilise :
intbsp nmsgs (t bsp∗ bsp)
retourne le nombre de message re¸cus
t bspmsg∗ bsp getmsg (t bsp∗bsp,int index)retourne le
indexi` eme message re¸ cu (pas d’ordre sp´ ecifi´ e)
t bspmsg∗ bsp findmsg (t bsp∗bsp,int id,intindex)
retourne le indexi` eme message provenant du processus
id. Comme pour
bsp getmsgsi
indexn’est pas un index valide, un pointeur
NULLest retourn´ e.
intbspmsg size (t bspmsg∗ msg)
retourne la taille du message
intbspmsg src (t bspmsg∗msg)retourne la provenance du message (pid du processus source)
Introduction `a BSPlib 13 / 27
Reception des donn´ ees
Apr` es la synchronisation, les donn´ ees de la pr´ ec` edente super-´ etape sont physiquement accessibles. Pour cela, on utilise :
intbsp nmsgs (t bsp∗ bsp)
retourne le nombre de message re¸cus
t bspmsg∗ bsp getmsg (t bsp∗bsp,int index)retourne le
indexi` eme message re¸ cu (pas d’ordre sp´ ecifi´ e)
t bspmsg∗ bsp findmsg (t bsp∗bsp,int id,intindex)
retourne le indexi` eme message provenant du processus
id. Comme pour
bsp getmsgsi
indexn’est pas un index valide, un pointeur
NULLest retourn´ e.
intbspmsg size (t bspmsg∗ msg)
retourne la taille du message
intbspmsg src (t bspmsg∗msg)retourne la provenance du
message (pid du processus source)
Introduction Communications BSP Exercices
Introduction Passage de messages M´emoire partag´ee
Recevoir des donn´ ees
Reception des donn´ ees
Apr` es la synchronisation, les donn´ ees de la pr´ ec` edente super-´ etape sont physiquement accessibles. Pour cela, on utilise :
intbsp nmsgs (t bsp∗ bsp)
retourne le nombre de message re¸cus
t bspmsg∗ bsp getmsg (t bsp∗bsp,int index)retourne le
indexi` eme message re¸ cu (pas d’ordre sp´ ecifi´ e)
t bspmsg∗ bsp findmsg (t bsp∗bsp,int id,intindex)
retourne le indexi` eme message provenant du processus
id. Comme pour
bsp getmsgsi
indexn’est pas un index valide, un pointeur
NULLest retourn´ e.
intbspmsg size (t bspmsg∗ msg)
retourne la taille du message
intbspmsg src (t bspmsg∗msg)retourne la provenance du message (pid du processus source)
Introduction `a BSPlib 13 / 27
Reception des donn´ ees
Apr` es la synchronisation, les donn´ ees de la pr´ ec` edente super-´ etape sont physiquement accessibles. Pour cela, on utilise :
intbsp nmsgs (t bsp∗ bsp)
retourne le nombre de message re¸cus
t bspmsg∗ bsp getmsg (t bsp∗bsp,int index)retourne le
indexi` eme message re¸ cu (pas d’ordre sp´ ecifi´ e)
t bspmsg∗ bsp findmsg (t bsp∗bsp,int id,intindex)
retourne le indexi` eme message provenant du processus
id. Comme pour
bsp getmsgsi
indexn’est pas un index valide, un pointeur
NULLest retourn´ e.
intbspmsg size (t bspmsg∗ msg)
retourne la taille du message
intbspmsg src (t bspmsg∗msg)retourne la provenance du
message (pid du processus source)
Introduction Communications BSP Exercices
Introduction Passage de messages M´emoire partag´ee
Recevoir des donn´ ees
Reception des donn´ ees
Apr` es la synchronisation, les donn´ ees de la pr´ ec` edente super-´ etape sont physiquement accessibles. Pour cela, on utilise :
intbsp nmsgs (t bsp∗ bsp)
retourne le nombre de message re¸cus
t bspmsg∗ bsp getmsg (t bsp∗bsp,int index)retourne le
indexi` eme message re¸ cu (pas d’ordre sp´ ecifi´ e)
t bspmsg∗ bsp findmsg (t bsp∗bsp,int id,intindex)
retourne le indexi` eme message provenant du processus
id. Comme pour
bsp getmsgsi
indexn’est pas un index valide, un pointeur
NULLest retourn´ e.
intbspmsg size (t bspmsg∗ msg)
retourne la taille du message
intbspmsg src (t bspmsg∗msg)retourne la provenance du message (pid du processus source)
Introduction `a BSPlib 13 / 27
Reception des donn´ ees
Apr` es la synchronisation, les donn´ ees de la pr´ ec` edente super-´ etape sont physiquement accessibles. Pour cela, on utilise :
intbsp nmsgs (t bsp∗ bsp)
retourne le nombre de message re¸cus
t bspmsg∗ bsp getmsg (t bsp∗bsp,int index)retourne le
indexi` eme message re¸ cu (pas d’ordre sp´ ecifi´ e)
t bspmsg∗ bsp findmsg (t bsp∗bsp,int id,intindex)
retourne le indexi` eme message provenant du processus
id. Comme pour
bsp getmsgsi
indexn’est pas un index valide, un pointeur
NULLest retourn´ e.
intbspmsg size (t bspmsg∗ msg)
retourne la taille du message
intbspmsg src (t bspmsg∗msg)retourne la provenance du
message (pid du processus source)
Introduction Communications BSP Exercices
Introduction Passage de messages M´emoire partag´ee
Recevoir des donn´ ees
Exemple 1
Lire tout les messages recus : t bspmsg∗msg;
inti,∗data;
for(i=0; i<bsp nmsgs(&bsp); i++){ msg = bsp getmsg(&bsp, i);
data = (int∗) bspmsg data(msg);
/∗utiliser data∗/}
Exemple 2
Lire tout les messages recus d’un processeur : t bspmsg∗msg;
inti=0;/∗it´erer tant que NULL n’est pas retourn´e∗/
while(msg=bsp findmsg(&bsp, sender, i)){ /∗utiliser msg∗/
i++;}
Introduction `a BSPlib 14 / 27
Exemple 1
Lire tout les messages recus : t bspmsg∗msg;
inti,∗data;
for(i=0; i<bsp nmsgs(&bsp); i++){ msg = bsp getmsg(&bsp, i);
data = (int∗) bspmsg data(msg);
/∗utiliser data∗/}
Exemple 2
Lire tout les messages recus d’un processeur : t bspmsg∗msg;
inti=0;/∗it´erer tant que NULL n’est pas retourn´e∗/
while(msg=bsp findmsg(&bsp, sender, i)){ /∗utiliser msg∗/
i++;}
Introduction Communications BSP Exercices
Introduction Passage de messages M´emoire partag´ee
Enregistrer une zone partag´ ee
D´ eclaration
voidbsp push reg (t bsp∗bsp, void∗ident,intsize)permet de rendre partag´e (on parle d’enregistrer pour un acc`es global) la zone m´emoire point´e paridentet de taillesize. Cette taille peut ˆetre diff´erente en chaque processus. Par contre, il faut que l’ordre d’appel des
enregistrement soit identique en chaque processus.
voidbsp pop reg (t bsp∗ bsp,void∗ident)permet de supprimer comme ”partag´ee” la zone m´emoire point´e parident
Conseil
1 Faite attention `a ce que les zones de m´emoire partag´ees ne se chevauchent pas. Cela rend les programmes rapidement incoh´erents.
2 On ne peut pas dynamiquement modifier la taille d’une zone partag´ee donc bien pr´evoir la taille
3 Dans la PUB, on n’est pas oblig´e de faire une sycnhronisation apr`es les d´eclarations. En BSPlib standard oui. Faˆıtes alors attention.
Introduction `a BSPlib 15 / 27
D´ eclaration
voidbsp push reg (t bsp∗bsp, void∗ident,intsize)permet de rendre partag´e (on parle d’enregistrer pour un acc`es global) la zone m´emoire point´e paridentet de taillesize. Cette taille peut ˆetre diff´erente en chaque processus. Par contre, il faut que l’ordre d’appel des
enregistrement soit identique en chaque processus.
voidbsp pop reg (t bsp∗ bsp,void∗ident)permet de supprimer comme ”partag´ee” la zone m´emoire point´e parident
Conseil
1 Faite attention `a ce que les zones de m´emoire partag´ees ne se chevauchent pas. Cela rend les programmes rapidement incoh´erents.
2 On ne peut pas dynamiquement modifier la taille d’une zone partag´ee donc bien pr´evoir la taille
3 Dans la PUB, on n’est pas oblig´e de faire une sycnhronisation apr`es les d´eclarations. En BSPlib standard oui. Faˆıtes alors attention.
Introduction Communications BSP Exercices
Introduction Passage de messages M´emoire partag´ee
Enregistrer une zone partag´ ee
D´ eclaration
voidbsp push reg (t bsp∗bsp, void∗ident,intsize)permet de rendre partag´e (on parle d’enregistrer pour un acc`es global) la zone m´emoire point´e paridentet de taillesize. Cette taille peut ˆetre diff´erente en chaque processus. Par contre, il faut que l’ordre d’appel des
enregistrement soit identique en chaque processus.
voidbsp pop reg (t bsp∗ bsp,void∗ident)permet de supprimer comme ”partag´ee” la zone m´emoire point´e parident
Conseil
1 Faite attention `a ce que les zones de m´emoire partag´ees ne se chevauchent pas. Cela rend les programmes rapidement incoh´erents.
2 On ne peut pas dynamiquement modifier la taille d’une zone partag´ee donc bien pr´evoir la taille
3 Dans la PUB, on n’est pas oblig´e de faire une sycnhronisation apr`es les d´eclarations. En BSPlib standard oui. Faˆıtes alors attention.
Introduction `a BSPlib 15 / 27
D´ eclaration
voidbsp push reg (t bsp∗bsp, void∗ident,intsize)permet de rendre partag´e (on parle d’enregistrer pour un acc`es global) la zone m´emoire point´e paridentet de taillesize. Cette taille peut ˆetre diff´erente en chaque processus. Par contre, il faut que l’ordre d’appel des
enregistrement soit identique en chaque processus.
voidbsp pop reg (t bsp∗ bsp,void∗ident)permet de supprimer comme ”partag´ee” la zone m´emoire point´e parident
Conseil
1 Faite attention `a ce que les zones de m´emoire partag´ees ne se chevauchent pas. Cela rend les programmes rapidement incoh´erents.
2 On ne peut pas dynamiquement modifier la taille d’une zone partag´ee donc bien pr´evoir la taille
3 Dans la PUB, on n’est pas oblig´e de faire une sycnhronisation apr`es les d´eclarations. En BSPlib standard oui. Faˆıtes alors attention.
Introduction Communications BSP Exercices
Introduction Passage de messages M´emoire partag´ee
Enregistrer une zone partag´ ee
D´ eclaration
voidbsp push reg (t bsp∗bsp, void∗ident,intsize)permet de rendre partag´e (on parle d’enregistrer pour un acc`es global) la zone m´emoire point´e paridentet de taillesize. Cette taille peut ˆetre diff´erente en chaque processus. Par contre, il faut que l’ordre d’appel des
enregistrement soit identique en chaque processus.
voidbsp pop reg (t bsp∗ bsp,void∗ident)permet de supprimer comme ”partag´ee” la zone m´emoire point´e parident
Conseil
1 Faite attention `a ce que les zones de m´emoire partag´ees ne se chevauchent pas. Cela rend les programmes rapidement incoh´erents.
2 On ne peut pas dynamiquement modifier la taille d’une zone partag´ee donc bien pr´evoir la taille
3 Dans la PUB, on n’est pas oblig´e de faire une sycnhronisation apr`es les d´eclarations. En BSPlib standard oui. Faˆıtes alors attention.
Introduction `a BSPlib 15 / 27
D´ eclaration
voidbsp push reg (t bsp∗bsp, void∗ident,intsize)permet de rendre partag´e (on parle d’enregistrer pour un acc`es global) la zone m´emoire point´e paridentet de taillesize. Cette taille peut ˆetre diff´erente en chaque processus. Par contre, il faut que l’ordre d’appel des
enregistrement soit identique en chaque processus.
voidbsp pop reg (t bsp∗ bsp,void∗ident)permet de supprimer comme ”partag´ee” la zone m´emoire point´e parident
Conseil
1 Faite attention `a ce que les zones de m´emoire partag´ees ne se chevauchent pas. Cela rend les programmes rapidement incoh´erents.
2 On ne peut pas dynamiquement modifier la taille d’une zone partag´ee donc bien pr´evoir la taille
3 Dans la PUB, on n’est pas oblig´e de faire une sycnhronisation apr`es les d´eclarations. En BSPlib standard oui. Faˆıtes alors attention.
Introduction Communications BSP Exercices
Introduction Passage de messages M´emoire partag´ee
Enregistrer une zone partag´ ee
D´ eclaration
voidbsp push reg (t bsp∗bsp, void∗ident,intsize)permet de rendre partag´e (on parle d’enregistrer pour un acc`es global) la zone m´emoire point´e paridentet de taillesize. Cette taille peut ˆetre diff´erente en chaque processus. Par contre, il faut que l’ordre d’appel des
enregistrement soit identique en chaque processus.
voidbsp pop reg (t bsp∗ bsp,void∗ident)permet de supprimer comme ”partag´ee” la zone m´emoire point´e parident
Conseil
1 Faite attention `a ce que les zones de m´emoire partag´ees ne se chevauchent pas. Cela rend les programmes rapidement incoh´erents.
2 On ne peut pas dynamiquement modifier la taille d’une zone partag´ee donc bien pr´evoir la taille
3 Dans la PUB, on n’est pas oblig´e de faire une sycnhronisation apr`es les d´eclarations. En BSPlib standard oui. Faˆıtes alors attention.
Introduction `a BSPlib 15 / 27
Ecrire
Cela se fait par l’interm´ ediaire d’une des fonction suivante :
voidbsp put(t bsp∗bsp,intdestPID,void∗src,void∗dest,intoffset,intnbytes) voidbsp hpput(t bsp∗bsp,intdestPID,void∗src,void∗dest,intoffset,intnbytes)
Ces fonctions permettent de copier
nbytesdepuis la m´ emoire locale
srcsur la m´ emoire globale (partag´ ee)
dest` a l’adresse
offsetdu
processeur
destPID. La copie est sˆ ure d’ˆ etre compl` etement effectu´ e
qu’apr` es un appel ` a
bsp syncou
bsp oblsyncet que tout les
bsp getaient ´ et´ e effectu´ es.
bsp hpputest ”unbuffered” : il ne faut donc pas
modifier le buffer tant que la synchronisation n’a pas ´ et´ e effectu´ ee.
Introduction Communications BSP Exercices
Introduction Passage de messages M´emoire partag´ee
Lire et ´ ecrire dans une zone partag´ ee
Lire
Cela se fait par l’interm´ ediaire d’une des fonction suivante :
voidbsp get(t bsp∗bsp,intsrcPID,void∗src,intoffset,void∗dest,intnbytes) voidbsp hpget(t bsp∗bsp,intsrcPID,void∗src,intoffset,void∗dest,intnbytes)
Ces fonctions permettent de copier
nbytesdepuis la m´ emoire globale
src` a l’adresse
offsetdu processeur
srcPIDsur la m´ emoire locale
dest. Comme pr´ ec` edement, la copie n’est valide qu’apr` es la synchronisation et
bsp hpgetest ”unbuffered”.
Introduction `a BSPlib 17 / 27
Exemple
intarray[100], privateArray[100];
src=0;
dest=0;
offset=0;
/∗Enregistrer la zone ”array”∗/
bsp push reg(&bsp, array,sizeof(array));
/∗Calcul sur les tableaux∗/
...
/∗chaque processeur lit le tableau ”array” du processeur 0∗/
bsp get(&bsp, src, array, offset, privateArray,sizeof(array));
/∗chaque processeur ´ecrit depuis le tableau privateArray
sur le tableau ”array” du processeur 0∗/
bsp put(&bsp, dest, &privateArray[1], array, bsp pid(bsp)∗sizeof(int),sizeof(int));
/∗Synchroniser∗/
bsp sync(&bsp);
/∗De−enregistrer la zone ”array”∗/
bsp pop reg(&bsp, array);
Introduction Communications BSP Exercices
Introduction Passage de messages M´emoire partag´ee
Op´ erations collective
Op´ erations
La PUB contient 2 types d’op´erations collectives :
1 Celle pour la diffusion d’une valeur d’un processeur `a un intervalle ou une liste de processeur
2 calcul des pr´efixes (scan et reduce)
Pour le calcul des pr´efixes, on peut d´efinir une fonction comme op´erateur pour la r´eduction parall`ele. Comme pr´ec`edement, on ne peut ˆetre sˆur que tout les calculs (et communications) ont bien ´et´e effectu´es qu’apr`es une barri`ere de synchronisation. Nous nous r´ef´erons aux manuels pour plus de d´etails.
Migration de processus virtuelles et sous-groupes
Ces deux fonctionnalit´es non BSP ne sont pas portables (limitations dans le manuel). En plus, elle ne sont pas des plus efficace, rendent le code source des programmes plus compliqu´es et font perdre la pr´evision des performances...
Introduction `a BSPlib 19 / 27
Op´ erations
La PUB contient 2 types d’op´erations collectives :
1 Celle pour la diffusion d’une valeur d’un processeur `a un intervalle ou une liste de processeur
2 calcul des pr´efixes (scan et reduce)
Pour le calcul des pr´efixes, on peut d´efinir une fonction comme op´erateur pour la r´eduction parall`ele. Comme pr´ec`edement, on ne peut ˆetre sˆur que tout les calculs (et communications) ont bien ´et´e effectu´es qu’apr`es une barri`ere de synchronisation. Nous nous r´ef´erons aux manuels pour plus de d´etails.
Migration de processus virtuelles et sous-groupes
Ces deux fonctionnalit´es non BSP ne sont pas portables (limitations dans le manuel). En plus, elle ne sont pas des plus efficace, rendent le code source des programmes plus compliqu´es et font perdre la pr´evision des performances...
Introduction Communications BSP Exercices
D´ eroulement du cours
1
Introduction
The Paderborn University BSP-Library Premi` ere approche
2
Communications BSP Introduction
Passage de messages M´ emoire partag´ ee
3
Exercices
Introduction `a BSPlib 20 / 27
Sch´ emas de communications
Programmer (et d´efinir les types) en C+PUB les fonctions suivantes :
1 diffusion simple d’un buffer
2 diffusion en 2 super-´etapes d’un buffer
3 ´echange total de buffers
Donnez une version par passage de message et une autre par m´emoire partag´ee. Quelle sont les versions les plus simples et les plus efficaces ?
Calcul scientifique
Programmer (avec les 2 m´ethodes) le calcul de pi (avec desdouble).
Introduction Communications BSP Exercices
Programmes simples
Sch´ emas de communications
Programmer (et d´efinir les types) en C+PUB les fonctions suivantes :
1 diffusion simple d’un buffer
2 diffusion en 2 super-´etapes d’un buffer
3 ´echange total de buffers
Donnez une version par passage de message et une autre par m´emoire partag´ee. Quelle sont les versions les plus simples et les plus efficaces ?
Calcul scientifique
Programmer (avec les 2 m´ethodes) le calcul de pi (avec desdouble).
Introduction `a BSPlib 21 / 27
Le tri par ´ echantillonage
Trier des donn´ees est un probl`eme classique en algorithmes parall`eles.
Beaucoup de tris parall`eles ont ´et´e propos´e avec diff´erentes complexit´es. Dans cet exercice, nous nous int´eressons `a un tri par ”´echantillonage” dans sa version BSP (due a Alexandre Tiskin en 1998).
Initialisation
Prenons un ensemble d’´el´ementsX (par exemple les entiers ou les chaines de caract`eres). Nous assumons que tous les ´el´ements deX sont diff´erents. Nous notonsha,biun interval ouvert, c’est `a dire l’ensemble de tous les ´el´ements c∈ X tels quea<c<b. Nous supposons que le tableau initialx a ´et´e partition´e enpsous-tableauxx1, . . . ,xp de taillen/p, un sous-tableau par processeur. L’algorithme par ´echantillonage proc`ede comme suit.
Introduction Communications BSP Exercices
Tri parall` ele
Le tri par ´ echantillonage
Trier des donn´ees est un probl`eme classique en algorithmes parall`eles.
Beaucoup de tris parall`eles ont ´et´e propos´e avec diff´erentes complexit´es. Dans cet exercice, nous nous int´eressons `a un tri par ”´echantillonage” dans sa version BSP (due a Alexandre Tiskin en 1998).
Initialisation
Prenons un ensemble d’´el´ementsX (par exemple les entiers ou les chaines de caract`eres). Nous assumons que tous les ´el´ements deX sont diff´erents. Nous notonsha,biun interval ouvert, c’est `a dire l’ensemble de tous les ´el´ements c∈ X tels quea<c<b. Nous supposons que le tableau initialx a ´et´e partition´e enpsous-tableauxx1, . . . ,xp de taillen/p, un sous-tableau par processeur. L’algorithme par ´echantillonage proc`ede comme suit.
Introduction `a BSPlib 22 / 27
Premi` ere super-´ etape
Tous les sous-tableauxxq sont tri´es ind´ependament en chaque processeurq. Le probl`eme consiste maintenant `a r´eunir ces sous-tableaux pour avoir un tableau tri´e. En chaque processeur,p+ 1 ´el´ements r´eguli`erement espac´es du
sous-tableau sont s´electionn´es et constituent l’´echantillon primaire (le premier et le dernier ´el´ements du sous-tableau sont inclus dans cet ´echantillon). Nous notons cet ´echantillon primaire du sous-tableauxxq (au processeurq) par
¯
x0q, . . . ,¯xpq. Cet ´echantillon primaire d´ecoupe le sous-tableauxqenp bloques primaires (de taillesn/p2) que nous noterons [¯x0q,¯x1q], . . . ,[¯xp−1q ,x¯pq].
Premi` ere communication
Un ´echange total desp´echantillons primaires est effectu´e (doncp×(p+ 1)
´el´ements ´echang´es).
Introduction Communications BSP Exercices
Tri parall` ele
Premi` ere super-´ etape
Tous les sous-tableauxxq sont tri´es ind´ependament en chaque processeurq. Le probl`eme consiste maintenant `a r´eunir ces sous-tableaux pour avoir un tableau tri´e. En chaque processeur,p+ 1 ´el´ements r´eguli`erement espac´es du
sous-tableau sont s´electionn´es et constituent l’´echantillon primaire (le premier et le dernier ´el´ements du sous-tableau sont inclus dans cet ´echantillon). Nous notons cet ´echantillon primaire du sous-tableauxxq (au processeurq) par
¯
x0q, . . . ,¯xpq. Cet ´echantillon primaire d´ecoupe le sous-tableauxqenp bloques primaires (de taillesn/p2) que nous noterons [¯x0q,¯x1q], . . . ,[¯xp−1q ,x¯pq].
Premi` ere communication
Un ´echange total desp´echantillons primaires est effectu´e (doncp×(p+ 1)
´el´ements ´echang´es).
Introduction `a BSPlib 23 / 27
Seconde super-´ etape
Chaque processeur trie l’ensemble des ´el´ements des ´echantillons primaires.
Nous noterons ses sous-tableaux tri´es (de l’ensemble des ´echantillons primaires) yq. De nouveau en chaque processeur,p+ 1 ´el´ements deyqsont selection´es de la mˆeme mani`ere (le premier et le dernier ´elements sont de nouveaux inclus) et constituent l’´echantillon secondaire. Nous notons cet ´echantillons secondaire
¯¯
x0, . . . ,¯¯xp (remarquez que cet ´echantillon est le mˆeme sur tous les processeurs).
L’´echantillon secondaire partitione les ´el´ements dex (et pas dexq) enpbloques secondaires qui correspondent aux intervals ouvertshx¯¯0,x¯¯1i, . . . ,h¯¯xp−1,¯¯xpi. Les bloques secondaires sont distribu´es sur les processeurs.
Troisi` eme super-´ etape
La troisi`eme et derni`ere super-´etape consiste `a ce que chaque processeurq r´ecup`ere les ´el´ements (des autres processeurs) de l’interval ouverth¯¯xq,¯¯xq+1i (avec 0≤q<p).
Introduction Communications BSP Exercices
Tri parall` ele
Seconde super-´ etape
Chaque processeur trie l’ensemble des ´el´ements des ´echantillons primaires.
Nous noterons ses sous-tableaux tri´es (de l’ensemble des ´echantillons primaires) yq. De nouveau en chaque processeur,p+ 1 ´el´ements deyqsont selection´es de la mˆeme mani`ere (le premier et le dernier ´elements sont de nouveaux inclus) et constituent l’´echantillon secondaire. Nous notons cet ´echantillons secondaire
¯¯
x0, . . . ,¯¯xp (remarquez que cet ´echantillon est le mˆeme sur tous les processeurs).
L’´echantillon secondaire partitione les ´el´ements dex (et pas dexq) enpbloques secondaires qui correspondent aux intervals ouvertshx¯¯0,x¯¯1i, . . . ,h¯¯xp−1,¯¯xpi. Les bloques secondaires sont distribu´es sur les processeurs.
Troisi` eme super-´ etape
La troisi`eme et derni`ere super-´etape consiste `a ce que chaque processeurq r´ecup`ere les ´el´ements (des autres processeurs) de l’interval ouverth¯¯xq,¯¯xq+1i (avec 0≤q<p).
Introduction `a BSPlib 24 / 27
Fonctionnement
Expliquer comment proc`ede la derni`ere super-´etape (o`u et comment r´ecup´erer les bons ´el´ements). Justifier alors le bon fonctionement de l’algorithme (une preuve formelle n’est pas demand´ee). Essayer sur un exemple pour bien comprendre le fonctionnement de l’algorithme.
Implantation
Donnez une implantation C+PUB du tri d’un tableau defloat.
Formule de coˆ ut
Vous supposerez que la complexit´e d’un tri d’un tableau den´elements est de O(nlog(n)) et celle de la s´el´ection den´el´ements estO(n). Vous supposerez aussi que le tableau initial (`a trier) comporten≥p3´el´ements.
Combien d’´el´ements (au plus) comporte un bloque secondaire. Justifier votre r´eponse. En d´eduire la formule de coˆut associ´e `a l’algorithme.
Introduction Communications BSP Exercices
Tri parall` ele
Fonctionnement
Expliquer comment proc`ede la derni`ere super-´etape (o`u et comment r´ecup´erer les bons ´el´ements). Justifier alors le bon fonctionement de l’algorithme (une preuve formelle n’est pas demand´ee). Essayer sur un exemple pour bien comprendre le fonctionnement de l’algorithme.
Implantation
Donnez une implantation C+PUB du tri d’un tableau defloat.
Formule de coˆ ut
Vous supposerez que la complexit´e d’un tri d’un tableau den´elements est de O(nlog(n)) et celle de la s´el´ection den´el´ements estO(n). Vous supposerez aussi que le tableau initial (`a trier) comporten≥p3´el´ements.
Combien d’´el´ements (au plus) comporte un bloque secondaire. Justifier votre r´eponse. En d´eduire la formule de coˆut associ´e `a l’algorithme.
Introduction `a BSPlib 25 / 27