Comunicadores Colectivos - PowerPoint PPT Presentation

1 / 24
About This Presentation
Title:

Comunicadores Colectivos

Description:

para esta corrida dependiendo de la definicion anterior '-l nodes ... fueron utilizados en la corrida. echo 'nodes ($NP cpu total):' sort $PBS_NODEFILE | uniq ... – PowerPoint PPT presentation

Number of Views:158
Avg rating:3.0/5.0
Slides: 25
Provided by: lscD
Category:

less

Transcript and Presenter's Notes

Title: Comunicadores Colectivos


1
Comunicadores Colectivos
BARRIER Esta es una de las primeras que ya vimos.
Bloquea todos los procesos hasta que todos los
procesos del Comm la llaman. MPI_BARRIER(
MPI_COMM_WORLD)
BROADCAST un mensaje para todos los procesos
(incluido el mismo) del COMM definido MPI_BCAST(
a/buffer, count, MPI_FLOAT/datatype, root,
comm) a/buffer en donde se almacena lo
enviado count numeros de envios (INT)
MPI_FLOAT/datatype tipo de dato enviado (handle)
root rango del que envia (INT) comm
communicador (handle)
2
Comunicadores Colectivos
REDUCE al buffer datos de todos los procesos al
root utilizando un tipo definido de
operación MPI_REDUCE(integral/sendbuffer,
total/recvbuffer, count, datatype, op, root,
comm) sendbuffer dirección de inicio recvbuffer
dirección de recepción count número de datos
enviados datatype tipo de datos enviados op
tipo de operación (handle) MPI_MAX MPI_MIN
MPI_SUM MPI_ PROD MPI_LAND MPI_LOR
etc.
3
(I/O en MPI)
if(my_rank0) a0 b1
n1000
void GeneraVectores(
if (my_rank 0) in
fopen("datos.txt","r")
Truco Generador de vectores/matrices/datos
interno
4
Trapecio con Send-Recive
  • if (my_rank ! 0)
  • source 0
  • MPI_Recv(a, 1, MPI_FLOAT, source,
    tag, MPI_COMM_WORLD,status)
  • MPI_Recv(b, 1, MPI_FLOAT, source,
    tag, MPI_COMM_WORLD,status)
  • MPI_Recv(n, 1, MPI_INT, source, tag,
    MPI_COMM_WORLD,status)
  • else
  • for (dest 1 dest lt p dest)
  • MPI_Send(a, 1, MPI_FLOAT, dest,
    tag,MPI_COMM_WORLD)
  • MPI_Send(b, 1, MPI_FLOAT, dest,
    tag,MPI_COMM_WORLD)
  • MPI_Send(n, 1, MPI_INT, dest,
    tag,MPI_COMM_WORLD)
  • h (b-a)/(np)
  • local_n n
  • local_a a my_rank (local_nh)
  • local_b local_a (local_nh)
  • integral_local Trap(local_a, local_b, local_n,
    h)
  • error_local Error_Trap(local_a, local_b,
    local_n, h)
  • if (my_rank ! 0)
  • dest 0
  • MPI_Send(integral_local, 1, MPI_FLOAT,
    dest, tag,MPI_COMM_WORLD)

5
Trapecio con Broadcast-Reduce
MPI_Bcast(a,1,MPI_FLOAT, 0,MPI_COMM_WORLD)
MPI_Bcast(b,1,MPI_FLOAT, 0,MPI_COMM_WORLD)
MPI_Bcast(n,1,MPI_LONG, 0,MPI_COMM_WORLD)
h (b-a)/(np) local_n n local_a a
my_rank (local_nh) local_b
local_a (local_nh) integral
Trap(local_a, local_b, local_n, h) error
Error_Trap(local_a, local_b, local_n, h)
MPI_Reduce(integral, total, 1, MPI_FLOAT,
MPI_SUM, 0, MPI_COMM_WORLD)
MPI_Reduce(error, totalError, 1, MPI_FLOAT,
MPI_SUM, 0, MPI_COMM_WORLD)
6
Comunicadores Colectivos
MPI_GATHER(sendbuffer, sendcount, sendtype,
recvbuffer, recvcount, recvtype, root,
comm) sendbuffer Dirección inicial de los datos
de envio. sendcount Numero de datos
enviados sendtype Tipo de datos enviado
recvbuffer Dirección inicial de los datos
recibidos recvcount Número de datos
recibidos recvtype Tipo de datos recibidos root
rango del proceso que recibe comm
Comunicador Cada proceso envía el contenido
almacenado en sendbuffer al root Quien lo guarda
en el orden del rango
7
Comunicadores Colectivos
  • MPI_SCATTER( sendbuffer, sendcount, sendtype,
    recvbuffer, recvcount, recvtype, root, comm)
  • sendbuffer Dirección inicial de los datos de
    envio.
  • sendcount Numero de datos enviados
  • sendtype Tipo de datos enviado
  • recvbuffer Dirección inicial de los
    datos recibidos
  • recvcount Número de datos recibidos
  • recvtype Tipo de datos recibidos
  • root rango del proceso que recibe
  • comm Comunicador
  • Es la operación inversa del
  • MPI GATHER.
  • Una operación en la que cada
  • proceso se queda con un grupo
  • diferente de datos

8
Ejemplo
  • MPI_Comm comm
  • int myrank,nprocs,root,iarray100
  • int rbuff
  • MPI_Comm_rank(comm, myrank) // define el rango
  • MPI_Comm_size(comm, nprocs) // define numero
    de procesos
  • if (myrank root) // crea un buffer receptor
    del tamaño adecuado
  • rbuff (int )malloc(nprocs100sizeof(int))
  • MPI_Gather(iarray,100,MPI_INT,rbuff,100,MPI_INT,ro
    ot,comm)

9
Comunicadores Colectivos
  • MPI_ALLGATHER( sendbuffer, sendcount, sendtype,
    recvbuffer, recvcount, recvtype, root, comm)
  • sendbuffer Dirección inicial de los datos de
    envio.
  • sendcount Numero de datos enviados
  • sendtype Tipo de datos enviado
  • recvbuffer Dirección inicial de los datos
    recibidos
  • recvcount Número de datos recibidos
  • recvtype Tipo de datos recibidos
  • root rango del proceso que recibe
  • comm Comunicador
  • Con esta función, una variante de
  • MPI GATHER, todos los procesos
  • en el comm obtienen los mismos
  • Resultados (GATHER BCAST).

10
Comunicadores Colectivos
  • MPI_ALLTOALL( sendbuffer, sendcount, sendtype,
    recvbuffer, recvcount,recvtype, root, comm)
  • sendbuffer Dirección inicial de los datos de
    envio.
  • sendcount Numero de datos enviados
  • sendtype Tipo de datos enviado
  • recvbuffer Dirección inicial de los datos
    recibidos
  • recvcount Número de datos recibidos
  • recvtype Tipo de datos recibidos
  • root rango del proceso que recibe
  • comm Comunicador
  • Es una extensión de MPI ALLGATHER
  • para el caso en que cada proceso
  • envié diferentes datos a cada receptor
  • El bloque j que viene del proceso i es
  • recibido por el proceso j y ubicado
  • en la posición i

11
Comunicadores Colectivos
int MPI_Gatherv ( void sendbuf, int sendcnt,
MPI_Datatype sendtype, void recvbuf, int
recvcnts, int displs,
MPI_Datatype recvtype, int root, MPI_Comm comm
) A diferencia de MPI_Gather, esta función
permite que el tamaño de los subarreglos sea
diferente en cada nodo. Tiene dos parámetros
diferentes recvcnts y displs recvcntsi es
un arreglo de enteros de tamaño size que posee en
cada celda el tamaño del subarreglo respectivo
al nodo i. displsi es un arreglo de enteros
de tamaño size que posee en cada celda el offset
del subarreglo i en el arreglo global.
En forma similar se define MPI_Scatherv
12
Comunicadores Colectivos
  • MPI ALLREDUCE Esta función reduce en el buffer de
    recepción elementos de todos los procesos con la
    operación marcada y lo almacena en todos los
    procesos del comm
  • El usuario puede imaginar sus propias operaciones
    de reducción y programarlas.
  • Un ejemplo MPI_REDUCE_SCATTER una combinación de
    MPI_REDUCE y MPI_SCATTERV. Que reduce un conjunto
    de datos y luego lo posiciona en partes en todos
    los procesos
  • OJO como se almacenan los datos en C y FORTRAN!

13
Comunicadores Colectivos ejemplos
  • Producto Interno PI A100 B100
  • p procesos. Es 100 divisible por p.
  • Posibilidades Truco np (vale en trapecios)
  • Completar con ceros
  • 2) Leo en p0 y distribuyo

PI_Local Local_A25 LocalB25
SCATTER
14
Comunicadores Colectivos ejemplos
4) PI_Local Local_A25 LocalB25 5) Reducir
al master, imprimir, etc
REDUCE
15
Comunicadores Colectivos ejemplos
Multiplicar Matrices (cuadradas)
A100100B100100C100100 Hay diversas
soluciones. Un algoritmo interesante FOX. Está
en el capitulo 7 del Pacheco.

C1 A1B1 A2B5 A3B9 A4B13
16
Comunicadores Colectivos ejemplos
SCATTER
A
B
0 1 2 3
0 1 2 3
17
Comunicadores Colectivos ejemplos
Send-Recv
A
B
0 1 2 3
0 1 2 3
18
Comunicadores Colectivos ejemplos
0 1 2 3

Gather al master
19
MPI_Barrier MPI_Broadcast MPI_Reduce MPI_ALLReduce
MPI_Scatter MPI_Gather MPI_AllGather MPI_AlltoALL
MPI_Gatherv MPI_Scatterv
MPI INIT MPI COMM SIZE MPI COMM RANK MPI SEND MPI
RECEIVE MPI FINALIZE
MPI_Wtime
17

20
Varios
Todo el material esta en el sitio
web www.lsc.dc.uba.ar\courses\...
Acceso a Clusters Herramienta BCCD http//bccd.c
s.uni.edu
lorito.exp.dc.uba.ar hpci i1,10 password
mpi2007 Windows hpci i1,16 password
a123456Z
21
SPEEDY SCRIPT.SH http//lsc.dc.uba.ar/hp
c-grid/cluster-speedy 1) cuenta hpci i1,12
pass mpi2007 2) Acceso ssh
hpc1_at_master.fiscmp.lab.dc.uba.ar 3)
transferencia de información al cluster sftp
4) COMPILACION Transferir el programa fuente al
cluster Conectarse al cluster con ssh Compilar
el fuente con el comando correspondiente según
las bibliotecas utilizadas. Por ejemplo,
utilizando MPI mpicc -o
prog_fuente_linux prog_fuente_linux.c
22
5) EJECUCION qsub encolador de procesos. El
comando qsub necesita como parámetro un script.
Típicamente este script contiene los parámetros
propios del qsub (entre ellos la selección de
nodos a utilizar) la invocación al programa que
se quiere ejecutar en batch Ejemplos de scripts
según las bibliotecas utilizadas MPI mpich.sh
PVM pvm.sh LAM MPI lam.sh 6) cola de procesos
qstat Uno de los campos de la tabla
de salida de este comando es el estado del
proceso, el mismo puede ser E - Exiting H -
Held Q - Queued R - Running T - el job se esta
cambiando de nodo W - Waiting S - Suspend
7) eliminar un proceso de la cola qstat Tomar
el ID del proceso a eliminar y ejecutar qdel
Job_id
23
-------------------------------------------------
-----------------------
Speedy UBA Host
master.speedy.dc.uba.ar Archivo
/usr/local/speedy/mpich.sh Creacion
20030520 - Carolina Leon Carri -
mcarri_at_dc.uba.ar Revision Titulo
Ejemplo de script PBS para MPICH Descripcion
Este script se utiliza para enviar a ejecutar
programas en batch que utilizan
las bibliotecas MPICH el comando
'qsub' El comando 'qsub' acepta
parametros por linea de comando o
bien pueden definirse dentro de este script. Las
lineas que comienzan con 'PBS'
son los parametros que tomara el
comando 'qsub', NO son comentarios.
Para mas informacion puede ver los manuales
man qsub Lea
atentamente los comentarios del script y
modifique con lo que corresponda
donde encuentre la palabra COMPLETAR
Ejecucion qsub mpich.sh
------------------------------------------------
------------------------ La opcion -l permite
definir los recursos del sistema que se quieren
utilizar. Para ver todos los tipos de recursos
que se pueden definir ver 'man pbs_resources'
El recurso mas utilizado es la especificacion de
los nodos que se quieren utilizar. Ejemplo
por cantidad de nodos -l nodesltcant_nodosgt
Ejemplo por nombre de maquina -l
nodesltnombre1gtltnombre2gt...
24
PBS -l nodesCOMPLETAR ------------------------
------------------------------------------------
El comando 'qsub' deja la salida de 'standard
output' y 'standard error' en diferentes
archivos. Para que guarde todo en un unico
archivo se define la opcion -j donde oe
'std output' y 'std error' como output (.o)
eo 'std output' y 'std error' como error
(.e) PBS -j oe -----------------------------
------------------------------------------- El
'qsub' envia un mail segun el/los evento/s
definido/s a abort b begin e
end n never PBS -m ba ------------------
--------------------------------------------------
---- Especificar direccion de e-mail donde se
enviara el mail PBS -M COMPLETAR --------------
--------------------------------------------------
-------- La variable PBS_NODEFILE es una
variable de entorno del PBS, hace referencia
al archivo que contiene la lista de nodos que se
utilizara para esta corrida dependiendo de la
definicion anterior '-l nodes...' La variable
NP guardara la cantidad de nodos
elegidos NP(wc -l PBS_NODEFILE awk 'print
1') ------------------------------------------
------------------------------ Las siguientes
lineas imprimiran en el archivo de output los
nodos que fueron utilizados en la corrida. echo
"nodes (NP cpu total)" sort PBS_NODEFILE
uniq echo ---------------------------------------
--------------------------------- La variable
PBS_O_WORKDIR es una variable de entorno del PBS,
indica el PATH absoluto del directorio de
trabajo corriente y es en este directorio donde
quedaran los archivos de salida. cd
PBS_O_WORKDIR ----------------------------------
-------------------------------------- Linea
de ejecucion del mpirun mpirun -machinefile
PBS_NODEFILE -np NP COMPLETAR exit
0 -----------------------------------------------
-------------------------
Write a Comment
User Comments (0)
About PowerShow.com