Documente Academic
Documente Profesional
Documente Cultură
Unit d'enseignement
Calcul Parallle
Anne Acadmique
2014/2015
Parcours
Informatique Master 1
Enseignant
Douw Hallam Vincent (douwevincent@yahoo.fr)
2014 - 2015 Vincent Douwe <douwevincent@yahoo.fr> 1/
Informations gnrales
Introduction
Les architectures et programmes
parallles
Mise en uvre avec les Pthreads
Un processus ?
Un thread ?
Multi tche ?
M MIMD
...
Interconnexion
Mmoire
Interconnexion
= =
#include <pthread.h>
int pthread_setcancelstate(int state, int *oldstate);
int pthread_setcanceltype(int type, int *oldtype);
Les diffrentes valeurs de state sont :
PTHREAD_CANCEL_ENABLE : l'arrt est actif
PTHREAD_CANCEL_DISABLE : l'arrt est inactif.
Les valeurs de type sont :
PTHREAD_CANCEL_DEFERRED : le type est deferred.
PTHREAD_CANCEL_ASYNCHRONOUS : le type est
asynchrone.
2014 - 2015 Vincent Douwe <douwevincent@yahoo.fr> 72/
Fin d'un thread
pthread_mutex_unlock(&barrier_m
utex);
while (counter < thread_count);
...
}
2014 - 2015 Vincent Douwe <douwevincent@yahoo.fr> 88/
Barrires avec les smaphores
Directives, Environment
OpenMP library
Compiler variable
Rgions parallles
}
Exclusion mutuelle
L'on peut galement raliser l'exclusion mutuelle
en utilisant la directive #pragma omp atomic.
Cette directive permet de raliser une opration
(binaire) de manire atomique.
#pragma omp parallel
{
double tmp, B ;
B = DOIT() ;
tmp = big_ugly(B) ;
#pragma omp atomic
X += tmp ;
2014 - 2015 Vincent Douwe <douwevincent@yahoo.fr> 116/
}
Le partage de tches
int i ; int i ;
for(i =0 ; i<N ; i++){ #pragma omp parallel
2014 - 2015
}
Vincent Douwe <douwevincent@yahoo.fr> 118/
Le partage des tches
Avec le code prsent dans le slide prcdent,
l'on se rend compte que l'on doit utiliser un code
similaire pour chaque rgion parallle
En utilisant la directive #pragma omp for, l'on a
bout de code suivant
#pragma omp parallel
{
#pragma omp for
for(i =0 ; i<N ; i++)
c[i] = a[i] + b[i] ;
} - 2015
2014 Vincent Douwe <douwevincent@yahoo.fr> 119/
Le partage des tches
OMP_PROC_BIND(TRUE|FALSE). Faut il
associer un thread un processeur particulier.
OMP_SCHEDULE : utile lorsque l'on dfinit le
mode de partage des tches runtime.
}
La gestion des donnes
#include <mpi.h>
int MPI_Get_count(MPI_Status *status, MPI_Datatype datatype, int
*count)
datatype indique le type de la donnes
status indique le statut du message de reception
Si tout se passe bien, la taille du message est
stocke dans count.
0 a b
1 +1
. = .
=0
= +
avec
Si est petit, alors
+1 1 +
.
2
Il arrive trs souvent que l'on veuilles partager une donnes tous
les processus d'un groupe. On utilise pour cela la fonction
MPI_Scatter.
#include <mpi.h>
int MPI_Scatter(void *sendbuf, int sendcount, MPI_Datatype
sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, int
root, MPI_Comm comm)
Le processus de rang root dans le communicateur comm partage
la donne pointe par sendbuf aux autres processus du groupe.
Chaque processus va recevoir les donnes dans la variable
pointe par recvbuf.
L'on envoie sendcount valeurs chaque processus.
2014 - 2015 Vincent Douwe <douwevincent@yahoo.fr> 213/
La fonction gather
Il arrive souvent que l'on ait envie d'avoir les lments d'un type
donne comme des lments contigus en mmoire. La fonction
MPI_Pack ralise cette opration.
#include <mpi.h>
int MPI_Pack(void *inbuf, int incount, MPI_Datatype datatype, void
*outbuf, int outsize, int *position, MPI_Comm comm)
inbuf dsigne o sont les donnes
incount dsigne le nombre d'lments
outbuf dsigne o seront les donnes
outsize dsigne la taille de outbuf
comm
2014 - 2015
est le communicateur utiliser.
Vincent Douwe <douwevincent@yahoo.fr> 225/
Les types drivs
int position, i, j, a[2];
char buff[1000];
....
MPI_Comm_rank(MPI_COMM_WORLD, &myrank);
if (myrank == 0){
position = 0;
MPI_Pack(&i, 1, MPI_INT, buff, 1000, &position,
MPI_COMM_WORLD);
MPI_Pack(&j, 1, MPI_INT, buff, 1000, &position,
MPI_COMM_WORLD);
MPI_Send( buff, position, MPI_PACKED, 1, 0,
MPI_COMM_WORLD);
} else /* RECEIVER CODE */
2014 - MPI_Recv(
2015 a, 2, MPI_INT, 0,<douwevincent@yahoo.fr>
Vincent Douwe 0, MPI_COMM_WORLD) 226/
Les types drivs