Programaciєn cientэfica en clusters con Octave / MPITB

Anuncio
Programación científica en clusters
con Octave / MPITB
II Jornadas de Software Libre de la Universidad de Cádiz
Cádiz, 6-8 Abril 2005
Javier Fernández Baldomero
Universidad de Granada
1
Esquema de la presentación
LAM: sistema de paso de mensajes
Octave: entorno de cálculo científico
Interfaz de programación (API)
MPITB (MPI Toolbox)
Diseño
Utilidades
Ejemplo
Aplicaciones
!"#
Conclusiones
2
LAM
Sistema de paso de mensajes
5
biblioteca MPI + utilidades
lamboot, mpirun...
basado en daemon
fuente autoconf, paquetes rpm
Implementación MPI “gratis”
licencia propia, no GNU/GPL
Ohio, Notre-dame, Indiana
234
/
,
.
'
1 '
+
- ,
( )*
'&
%$
0 )/
Colaboran en Open-MPI
3
MPI
Estándar para paso mensajes
G
desarrollado por MPI Forum
universidades, fabricantes, etc...
G
G
G
desarrollo continuo
MPI-1.0
Mayo'94
MPI-1.1
Junio'95
MPI-1.2 / 2.0 Julio'97
gratuitas: LAM, MPICH...
DEF
A
>
@
9
C 9
=
? >
: ;<
98
B ;A
comerciales: ScaMPI, MPI/Pro...
76
G
G
diversidad implementaciones
4
Paso de mensajes
Multiprocesadores (SMP)
CPU
Y
varias CPUs (cache)
memoria compartida
CPU
CPU
CPU
Memoria
(acceso frecuente, rápido)
hebras (threads) / OpenMP
Multicomputadores (clusters)
VWX
S
P
R
K
U K
O
Q P
L MN
KJ
T MS
(acceso infrecuente, lento)
IH
Y
varios computadores (CPU/M)
memoria distribuida
paso de mensajes
CPU
CPU
CPU
CPU
Mem
Mem
Mem
Mem
5
Uso de LAM
l
rsh: ~/.rhosts
ssh: ~/.ssh/authorized_keys
fichero $LAMBHOST
l
k
formato: <host> [<user>]
lamd
round-robin por defecto
lamd
CPU1
CPU2
CPU3
Mem
Mem
Mem
$LAMBHOST
~/.rhosts
~/.rhosts
CPU1
CPU1
CPU2
CPU3
CPU1
asignación procesos
l
k
lamd
acceso sin passwd
l
k
lamboot
hij
e
b
d
]
g ]
a
c b
^ _`
]\
f _e
soporte mpirun / mpitask / mpimsg / lamclean / lamhalt / lamtrace...
comunicación (según RPI = lamd / tcp / sysv / usysv / gm)
[Z
l
l
daemon lamd
6
Uso de LAM
mpirun
wrapper gcc

~
mpicc
gcc -I<...> -L<...> -lmpi -llam ...
-c/-np #procesos
-ssi <servicio> <variante>
-ssi rpi tcp
nomenclaturas N y C
N n0-3
c4,6-8
CPU1
CPU2
CPU3
Mem
Mem
Mem
ppong
ppong
CPU2
CPU3
CPU1
mpirun -c 2 ppong
{|}
x
u
w
p
z p
t
v u
q rs
po
y rx
comunicador: grupo procesos arrancados juntos (MPI_COMM_WORLD)
nm
ƒ
‚
€

ppong
$LAMBHOST
€


mpirun
ppong
7
Uso de LAM
limpia cola mensajes/procesos
–
•
lamclean
como si lamboot reciente
elimina daemons lamd
˜
—
lamhalt
lamclean
CPU1
CPU2
CPU3
Mem
Mem
Mem
como antes de lamboot
otras utilidades
mpitask, mpimsg
’“”

Œ
Ž
‡
‘ ‡
‹
 Œ
ˆ ‰Š
‡†
…„
 ‰
lamexec, lamgrow, lamshrink, lamtrace
8
¡
§¨©
¦ œ
¤
¥ ž¤
£
œ
¢ ¡
 žŸ
œ›
š™
Programación MPI
9
Las 6 llamadas MPI básicas
MPI_Init
int MPI_Init(int *pargc, char ***pargv)
MPI_Comm_rank
int MPI_Comm_rank(MPI_Comm comm, int *rank)
MPI_Comm_size
int MPI_Comm_size(MPI_Comm comm, int *psize)
MPI_Send
int MPI_Send(void *buf, int count, MPI_Datatype dtype, int dest, int tag, MPI_Comm comm)
MPI_Recv
int MPI_Recv(void *buf, int count, MPI_Datatype dtype, int src, int tag, MPI_Comm comm,
MPI_Status *stat)
MPI_Finalize
¸¹º
µ
²
´
­
· ­
±
³ ²
® ¯°
­¬
ǻ
¶ ¯µ
int MPI_Finalize(void)
10
Programación MPI (cont.)
mpirun
rank 0 a CPU2, rank 1 a CPU3
trivial
trivial
CPU1
CPU2
CPU3
Mem
Mem
Mem
$LAMBHOST
ÉÊË
Æ
Ã
Å
¾
È ¾
Â
Ä Ã
¿ ÀÁ
¾½
Ç ÀÆ
CPU2
CPU3
CPU1
¼»
Ì
mpicc -o trivial trivial.c
mpirun -c 2 trivial
11
Interés de MPI
libera al programador C de aprender sockets TCP/UDP, shm, etc
aplicación MPI
rpi_tcp_low.c: r = write(sock, buff, nbytes)
outw(StartDMADown, ioaddr + EL3_CMD)
Ð
ÛÜÝ
Ô
Ö Õ
Ñ ÒÓ
ÐÏ
ÎÍ
Ø
driver tarjeta red
Õ
Sistema Operativo
Ù ÒØ
MPI / daemon LAM
send.c:
lam_send(buf,cnt,typ,dst,tag,comm,LAM_RQISEND)
lamsend.c:
err = _mpi_req_advance()
lamreqs.c:
RPI_ADVANCE(lam_rq_top, TRUE)
lam-ssi-rpi.h: lam_ssi_rpi.lsra_advance(rq_top, fl_block)
...ssi-rpi-tcp.h: int lam_ssi_rpi_tcp_advance(MPI_Request, int)
ssi_rpi_tcp.c: add_write(req->rq_proc->p_rpi, req)
Ú Ð
biblioteca MPI
MPI_Send(buf, cnt, typ, dst, tag, comm)
×
Þ
Biblioteca de alto nivel para paso de mensajes
12
Esquema de la presentación
LAM: sistema de paso de mensajes
Octave: entorno de cálculo científico
Interfaz de programación (API)
MPITB (MPI Toolbox)
Diseño
Utilidades
Ejemplo
Aplicaciones
íîï
ê
ç
é
â
ì â
æ
è ç
ã äå
âá
àß
ë äê
Conclusiones
13
Octave
Entorno de cálculo científico
diferencias en “accesorios”
cada vez más ~ MATLAB
GUI, gráficos, toolboxes...
Simulink, Compiler, RTW...
soporte SourceForge
ritmo versionado abrumador
fuente autoconf, paquetes...
MATLAB “libre”
þÿ
û
ø
ú
ó
ý ó
÷
ù ø
ô õö
óò
ñð
ü õû
en el sentido GNU GPL
14
Octave: entorno interpretado
M-files
interpretados
prototipado rápido
salvar y ejecutar
M-file
try-and-error interactivo
debugger integrado (dbstop)
.oct-files
fuente C++
paso intermedio compilar/linkar
ejecutar entonces desde Octave
computación intensiva
acceso a bibliotecas
depuración más complicada
requiere más habilidades
.oct
compilados (C++, -ldl)
más bajo nivel (API)
g++
control hardware
import/exportación datos
15
%
$
+,-
*
(
) "(
'
& %
! "#
Programación Octave
16
API Octave
fuente C++
llamadas API Octave
wrapper g++: mkoctfile
C
B
A
@
?
Biblioteca para crear .oct
-I<...> -L<...> -loctave -lblas ...
fichero .oct invocable Octave
software apoyo doxygen
tutoriales Wiki / OctaveForge
<=>
9
6
8
1
; 1
5
7 6
2 34
10
: 39
DaCoda, OF Developer Guide
/.
F
E
D
no documentada, muy volátil
17
O
N
UVW
T J
R
S LR
Q
J
P O
K LM
JI
HG
Programación API Octave
18
Esquema de la presentación
LAM: sistema de paso de mensajes
Octave: entorno de cálculo científico
Interfaz de programación (API)
MPITB (MPI Toolbox)
Diseño
Utilidades
Ejemplo
Aplicaciones
fgh
c
`
b
[
e [
_
a `
\ ]^
[Z
YX
d ]c
Conclusiones
19
MPITB
1 fichero .oct por cada llamada MPI
>> info = MPI_Barrier(MPI_COMM_WORLD)
intérprete Octave
DEFUN_DLD(MPI_Barrier, args, nargout,“texto ayuda”)
{
MPI_Comm comm = (MPI_Comm) args(0).int_value();
int info = MPI_Barrier(comm);
return octave_value(info);
}
.oct-file
MPI lib
Sistema Operativo
wxy
t
q
s
l
v l
p
lk
ji
u nt
write(sock, buff, nbytes)
m no
API Octave
r q
z
Interfaz DLD (.oct-files) a LAM/MPI
20
MPITB
y ficheros .M (85), utilidades .M (12), startups (6)
y 4 directorios de ejemplos, y ficheros README / TUTORIAL
aplicación Octave
aplicación MPI
MPITB
Octave
MPI
Sistema Operativo
‰Š‹
†
ƒ
…
~
ˆ ~
‚
„ ƒ
 €
~}
‡ €†
Red
|{

Œ
Toolbox: colección de ficheros .oct (157 )
21
œž
™
–
˜
‘
› ‘
•
— –
’ “”
‘
Ž
š “™
Historia: PVMTB, MPITB/MATLAB...
22
§
¦
­®¯
¬ ¢
ª
« ¤ª
©
¢
¨ §
£ ¤¥
¢¡
Ÿ
Historia: MPITB/Octave
23
Historia: accesos
MPITB / MATLAB:
16680
Febrero
2000
PVMTB / MATLAB:
13398
Febrero
2000
MPITB / Octave:
2858
Abril
2004
¾¿À
»
¸
º
³
½ ³
·
¹ ¸
´ µ¶
³²
±°
¼ µ»
2 artículos
24
Esquema de la presentación
LAM: sistema de paso de mensajes
Octave: entorno de cálculo científico
Interfaz de programación (API)
MPITB (MPI Toolbox)
Diseño
Utilidades
Ejemplos
Aplicaciones
ÏÐÑ
Ì
É
Ë
Ä
Î Ä
È
Ê É
Å ÆÇ
ÄÃ
ÂÁ
Í ÆÌ
Conclusiones
25
Diseño
ã
No tan sencillo como se ha dado a entender
157 llamadas => reutilizar código
1 .oct-file por llamada MPI
excepciones: 2 grupos comparten implementación .cc
MPI_Keyval_create / _free / MPI_Attr_put
MPI_Errhandler_free / _create
1 macro patrón de llamada por cada comb. nº/tipo args
1 bloque constructivo para cada sección código repetida
àáâ
Ý
Ú
Ü
Õ
ß Õ
Ù
Û Ú
Ö ×Ø
ÕÔ
Þ ×Ý
ficheros #include segregando macros/bloques por función
ÓÒ
ê
é
è
ç
æ
å
ä
Criterios
26
ùúû
ö
ó
õ
î
ø î
ò
ô ó
ï ðñ
îí
ìë
÷ ðö
1 oct-file por función / patrón llamada
27
ÿ
ÿ
ÿþ
ýü
patrones / #include
28
bloques segregados por uso
29
./0
(
, % ++
-#
#
*
'
)(
$ %&
#"
!
bloques muy frecuentes: mpitb.h
30
referencias cruzadas
C
B
Facilitan mantenimiento
Octave cambia de versión muy rápidamente
cambios importantes API
PATN_F_B2IC
cambió representación interna structs
requirió cambios en 6 líneas MPITB
afectando 3 fich.cc y 1 fich.h
BLCK_ONESYM
RET_1_ARG
get_MPI_Buff
9
= 6 <<
DECL_BUF_VARS
BLCK_ONEINT
BLCK_ONECOM
>4
4
;
8
:9
5 67
BLCK_B2IC
NARGCHK
no mantener 157 ficheros .cc
no código duplicado -> bloque
editar bloque afecta a todos .cc
21
43
I
H
G
criterios: no duplicar trabajo
?@A
F
E
D
Ej: oct-2.1.50 -> 2.1.57
MPI_Send
31
Esquema de la presentación
LAM: sistema de paso de mensajes
Octave: entorno de cálculo científico
Interfaz de programación (API)
MPITB (MPI Toolbox)
Diseño
Utilidades
Ejemplo
Aplicaciones
XYZ
R
V O UU
WM
M
T
Q
SR
N OP
KJ
ML
Conclusiones
32
Utilidades MPITB
l
12 M-files para las tareas más comunes
“sugerencias de diseño” para aplicaciones paralelas Octave
p
o
n
m
de “protocolo”
LAM_Init (nslaves, rpi, hosts)
[children] = Octave_Spawn (nOctaves, infokey)
NumCmds_Init (ncmd, qflg, tag, dbug)
NumCmds_Send(nams, vals)
ijk
c
g ` ff
h^
e
^
dc
b
save_instr
load_instr
_ `a
init_stamp(n)
time_stamp('name')
\[
^]
r
q
de “instrumentación”
print_stamp classstamp
last_stamp discripar
33
LAM_Init (nSlv, rpi, hosts)
„
Usualmente siempre se usa el mismo cluster
facilitar al máximo tareas externas a Octave: lamboot/lamhalt
ˆ
‡
†
…
fijar los nombres de los ordenadores a utilizar (hosts)
como argumento a LAM_Init
editando lista incorporada en LAM_Init
obteniéndola del ámbito global
tras LAM_Init, exportar a global hosts y nSlv (=length(hosts)-1 ?)
‹
Š
‰
si no coincide (nslv, rpi) con el lamboot en curso
parar lam (lamhalt)
limpiar .oct-files LAM de memoria (permite MPI_Init de nuevo)
iniciar lam (lamboot)
‚ƒ
{
 x ~~
€v
v
}
z
|{
w xy
ts
vu
M-file: 236 líneas , usando system('lamboot'/'lamhalt')
34
[chld]=Octave_Spawn (nOct, infokey)

Usualmente se usan todos los hosts
o la serie [1..nSlv] cuando se hace un estudio de escalabilidad
¢
¡
Ÿ
ž
arrancar Octaves esclavos con MPI_Comm_Spawn
por defecto nOct=nSlv=length(hosts)-1, último host maestro
_Comm_spawn utiliza hosts round-robin (por eso maestro último)
infokey permite iniciar spawn desde nodo/cpu concreta
tras Octave_Spawn, exportar a global nOct
MPI_Comm_spawn es colectiva, requiere control startup MPI_Init
š›œ
”
˜ ‘ ——
™
–

•”
 ‘’
“
MPI_COMM_WORLD de maestro ≠ hijos (chld)
unir ambos (tamaño nOct+1) (maestro rank 0) para comunicarse
MPI_Intercomm_merge es colectiva, requiere control startup
Œ
Ž
¥
¤
£
protocolo para unir intercomunicadores
35
Arrancando Octaves esclavos
¸
·
Control startup:
octave ejecuta .octaverc -> linkar a octaverc_MPITB.m
discriminar esclavos por variable entorno LAMPARENT
<añadir path a MPITB> )
if ~isempty(getenv(‘LAMPARENT’))
startup_mergeParent
end
.octaverc
octaverc_MPITB.m
MPITB
info=MPI_Init;
[info parent]=MPI_Comm_get_parent;
[info NWORLD]=MPI_Intercomm_merge
(parent,1);
MPI_Errandler_set(NWORLD,RETURN);
octave
OS
NET
´µ¶
®
² « ±±
³©
©
°
­
¯®
ª «¬
§¦
©¨
startup_mergeParent.m
36
Arrancando Octaves esclavos
Ê
lamboot/MPI_Init:
facilitado por la utilidad LAM_Init (236 líneas M)
host A
host B
LAM_Init(1,'tcp',
{'B','A'})
MPITB
octave
lamd
NET
Ƽ
Ã
¼
ÂÁ
½ ¾¿
ÇÈÉ
NET
Á
Å ¾ ÄÄ
OS
À
OS
º¹
¼»
lamd
37
Arrancando Octaves esclavos
Ý
Ü
arrancar procesos Octave esclavos:
facilitado por la utilidad Octave_Spawn (68 líneas M)
startup esclavos discriminado por LAMPARENT
startup_merge.m
Octave_spawn(1)
MPITB
octave
octave
NET
ØÎ
Õ
Î
ÔÓ
Ï ÐÑ
ÙÚÛ
NET
Ó
× Ð ÖÖ
OS
Ò
OS
ÌË
ÎÍ
lamd
MPITB
lamd
LAMPARENT
38
Arrancando Octaves esclavos
ð
ï
intracomunicador
queda definido NEWORLD con ámbito global
en maestro por Octave_Spawn (en esclavos por startup_merge.m)
MPI_Init;
_Comm_get_parent;
_Icomm_merge(par)
_Errhandler_set
Octave_spawn(1)
MPITB
octave
octave
NET
ëá
è
á
çæ
â ãä
ìíî
NET
æ
ê ã éé
OS
å
OS
ßÞ
áà
lamd
lamd
39
Arrancando Octaves esclavos
necesidad protocolo
usualmente, esclavo no va a ser utilizado interactivamente
protocolos sugeridos: Bcast (1 comando), NumCmds (N cmds)
NumCmds_Init(...)
_Send(N,V)
MPITB
octave
OS
NUMCMDS
QUIT
TAG
DEBUG
vars/cmd
...
vars/cmd
MPITB
octave
lamd
OS
ÿ
þô
û
ô
úù
õ ö÷
ù
ý ö üü
NET
ø
NET
òñ
ôó
lamd
MPI_Recv/_Unpack/
eval(cmd)
40
Esquema de la presentación
LAM: sistema de paso de mensajes
Octave: entorno de cálculo científico
Interfaz de programación (API)
MPITB (MPI Toolbox)
Diseño
Utilidades
Ejemplo
Aplicaciones
Conclusiones
41
%&'
"
!
$ # "
test ping-pong, protocolo Bcast
42
0
/
678
5 +
3
4 -3
2
+
1 0
, -.
+*
)(
test ping-pong (cont)
43
A
@
GHI
F <
D
E >D
C
<
B A
= >?
<;
:9
test ping-pong (cont)
44
R
Q
XYZ
W M
U
V OU
T
M
S R
N OP
ML
KJ
45
c
b
ijk
h ^
f
g `f
e
^
d c
_ `a
^]
\[
p
y
w t
x
p
t
u t
v
qp
m l
n
o
rs
×
 ¼
½
¹
¶É
È
´
´
¸
¹
Ü
ÚÛ
º
º
Ç
Æ
¸
Þ Ý
v
Ù Ø
Ÿ
Ó
ÒÖ
Ô Ó
Õ
µ
Å
ÄÃ
¸
¼
¶·
 Á
v
À¿
¾ ·
½
»
º
š
¹
µ
´
ª
ª
©
¨©
°
­®
¯
±
²³
©
©
¬­ «
v
§
¦ ¥

£
ž
¢
¡ ¤
•
ž œ
Ÿ
›
™
š
˜
—
’
–
“”
Š
‘
Œ ‹
Ž
Š

Œ ‹


ˆ‰
€‡
…„
ƒ‚
€
~ }

{ z
|
†
⌠1 1
⌡ 0 1+x2
ÒÑ
ÐÏ
Í Ì
Î
Ë
Ê
Ž
Ž
Š
Œ ‹

Cálculo de п
Integrando arctan'(x)
dx = arctan(x)  =
0
1
π
4
código paralelo
46
Cálculo de п
enviar N (i=MPI_Comm_rank, C=_size), recibir suma parcial
tiempo medido desde datos enviados hasta π calculado
protocolo Bcast
íîï
ì â
ç
èâé
ã äå
çæ
ê
recv suma / acumular
ë äê
cálculo remoto
âá
enviar i/C/N
àß
ò
ñ
ð
Embarazosamente paralelo
47
Cálculo de п
código MPITB (partes de Mast.m / Work.m)
MPI_Barrier(NEWORLD);
tic
MPI_Barrier(NEWORLD);
Psum=0; Sum=0;
[info rank]=MPI_Comm_rank(NEWORLD);
width=1/N; lsum=0;
i=rank-1:C:N-1;
x=(i+0.5)*width;
lsum=sum(4./(1+x.^2));
for numt=1:C
MPI_Recv(Sum,MPI_ANY_SOURCE,...
TAG,NEWORLD);
Psum=Psum+Sum;
end
Psum=Psum/N;
MPI_Send(lsum,0,TAG,NEWORLD);
þ
ö
üöý
û
ûú
÷ øù
öõ
ôó
ÿ øþ
T=toc;
48
49
Esquema de la presentación
LAM: sistema de paso de mensajes
Octave: entorno de cálculo científico
Interfaz de programación (API)
MPITB (MPI Toolbox)
Diseño
Utilidades
Ejemplo
Aplicaciones
%&'
# ""
$
!
Conclusiones
50
Test de prestaciones
<=
;
9:
>
ping-pong: send-recv repetidamente, variando tamaño
for SZ=0:ND-1
array=zeros(SZ,1);
MPI_Barrier(WORLD);
for i=1:NTIMES
MPI_Recv(array,0,TAG,WORLD);
MPI_Send(array,0,TAG,WORLD);
end
678
4 -3
5+
03
2
+
10
/
clear array
end
, -.
)(
+*
for SZ=0:ND-1
array=zeros(SZ,1);
MPI_Barrier(WORLD);
T=clock;
for i=1:NTIMES
MPI_Send(array,1,TAG,WORLD);
MPI_Recv(array,1,TAG,WORLD);
end
T=etime(clock,T);
Data(SZ+1).time=T/2/NTIMES;
clear array
end
51
Prestaciones
“Performance of parallel toolboxes”, VecPar'02, Porto
Overhead 20%
@ 1500B
MNO
K D JJ
LB
G
HBI
GF
C DE
@?
BA
Latencia 1.8x
52
X
XW
^_`
]S
\ U [[
YSZ
T UV
QP
SR
s
q t
q r
}
l r
u
z
€
z
€
{

|
~
}
‚
~
{
{


k
l
m
n
l
o
m p
q r
w
x
h c
h y
b
h c
e
b
d v
i
h c
e
ig
ji
d
b
h c
e
fg
d c
e
b a
Análisis Wavelet
Versiones color(3x)/grises(4x), con/sin servidor
B/W
RGB
B/W
RGB
53
‹
‘’“
†
 ˆ ŽŽ
†
ˆ‰
Œ ‹Š
„ƒ
‡†…
”
switch BayStack 100Mbps
8 Pentium II + servidor
333MHz, 128MB, no HD
400MHz, 128MB, 14GB
•
´
«
®¯° ­
¬«
¬«
¬«
¬«
¬«
¬«
¹
³
²
±
½¼
ȼ
¬«
¬«
¬«
¬«
·
µ
¸
¶
cluster oxigeno
54
—–ª¦¢›§£ž ¨© ¥™¡¤¡–—˜šœŸ
—–ª¦¢›§£ž ¨© ¥™¤–—˜šœŸ
Æ
ÌÍÎ
ËÁ
Ê Ã ÉÉ
ÁÈ
ÃÄ
Ç ÆÅ
¿¾
ÂÁÀ
Algoritmo paralelo no trivial (4x)
2↓1
1↓2
1↓2
2↓1
2↓1
1↓2
1↓2
2↓1
55
åÏÐÑÒÓÔÕßÐÏÖ×ØÙÚÛÜÝÞÔà×ØáÙæãâ
åÏÐÑÒÓÔÕßÐÏÖ×ØÙÚÛÜÝÞÔà×ØáÙâãä
åÏÐÑÒÓÔÕßÐÏÖ×ØÙÚÛÜÝÞÔà×ØáÙæãâ
åÏÐÑÒÓÔÕßÐÏÖ×ØÙÚÛÜÝÞÔà×ØáÙâãä
ï
nl
ßÝ
ÛÜ
ÞÝÜ
ÉÈ Ã(Â
Ê Ë Ä ÇÅ
Ë
à
]\2_^
b4] ` a
c`
"gd fe
hi
ÎÍ2ÐÏ
Ó4Î Ñ Ò
ÔÑ
"ØÕ ×Ö
ÙÚ
¿"º ¾
º
Á%¿ À
(14.6s)
ÉÈ Ã(Â
ÊËÌ ÄÆÅ
èæ ç
åäáâ ã
U T N M
ZY QR
[ S
o
I"H
J
L%JI K
:;
><
=<;
?
´²
°±
³²±
¢(¡ ¢(¡
£¦ £¤
¦ ¦
¢(¡ ¢(¡
£¡ £¤
§ ¥
½» ¼
º¹¶· ¸
'(& '(&
). ,,
- &
'(& '(&
. - ) +*
/
EG F
D@A C B
µ
0
21
34 5
67
987
8
!"
$%! #
™¨
2©—
ª4™ › ˜
«›
¬­
¯®­
®
ž"™ 
™
%ž Ÿ
(9.16s)
õö÷
ôê
ó ì òò
êñ
ìí
ð ïî
èç
ëêé
jk
mlk
UT N(M
VW OOP
X
uw v
tpq s r
“‘

’‘
”
‡†…„ †‡…„
Œ ˆ‹
ˆŽ ‰‰
‡†…„ †‡…„
Œ‰ ˆ‰Š
„ …
œš ›
™˜•– —
~
x‚
ƒ
x‚
€
yx
}2|
z{
ø
ø
ÿþý
ûúüøù
Prestaciones (ASTC-HPC'01, Seattle-WA, USA)
(27.43s)
(44.06s)
56
éê
ìíë
îðï
ñ
òóì
ôò
÷øöì ï õ
ùúû
œ
œ
¦
§
£
˜
”¬
©ª
™¢
«
ž
¡
—
ž
¥ ¨
’
£¤¥
œ
—
™¢
•
¡
˜Ÿ
Œž
˜—
–
”•
œ ›š™

“
’ ‘
Ž
Œ
†
‰
‹Š
€ˆ
‚‡
…
„ƒ
‚
~
€
z xy |}
st
vwy u
{
mn
o
vw u
st
r pq
m kl
`
> <=
SOT LMK
U R OL N
VK N U PQ
L RL
O
H
IJ
FG
A? @
BDE C
[
YZ WX
_^
\]
cb
a
ihg
j
9 :;
9 78
f de
$
3
$
5
.
#
6
0 +
')
4 +
') /
!
)
*
!
2 +
-
.
)
'
)
.
'
0/
.
, +
-
%
!
*)
!
#
#
"
*'
(')&
% $
#
!"
1
ü
ü
ü
ü
ÿ
ýþü
ÿ
Control del pH
57
®­
µ
¼½¾
º °
»
¸
¹ ²¸
°·
²³
¶ µ´
±i°¯
ÂÄ
ÂÅ
È
ÆÈÉ Ç
È
ÆÈÉ Ç
ÂÃ
Ë
Ê
À ¿
Á
)
69 78
1
&
# %$
ð
ì
ä
ïî
ê
âã
!
" 1
69 78
åê
éåê
ç
åêëè
æçèé äå
íèë
'( ) ('
,-.+ -.,+
. .
/ /
0/1 ; 0/:
23 3
56 2 4 56 2 4
1
69 78
23
þ üý
ÿ
56 2 4
0/1
/
.
,-.+
*)'(
ÎÏ
ÎÐ
ÎÑ
Ô
ÔÕÒ Ó
Ô
ÒÔÕ Ó
×
Ö
ÜØ
Ø
ÛØÚ
Ø
ØÙØ
Øá
ßà
ÞÝ
Ü
ÛÚ
ØÙ
ÜØ
Ø
Ø
ÛØÚ
ÙØØ
Øá
àß
ÞÝ
Ü
ÛÚ
ØÙ
á
á
á
Ø
Üá
Ù
Øáá
Ú
ÜØá
Û
áá
Ù
Ü
Ý
Þ ú ß
ù õà
Ù ñ ô õ ÷ øÛ ù ú ôÛ
û
ò ó ö
Üá Úáá ÜÚá áá Üá
Øá
ØØ
ÜÜá
õ õ Üáá
Í Ì
Á
Ø
Ùø
Ýáá
ØÚ
ÜÝá
Û
Þ
Ø
áá
ÜØ
Üá
Þ
Prestaciones
58
D
EH
I BH
LMN
J ?
K
G
?
FE
A BC
=<
@?>

‚ƒ
‡
Œ

u
w|
Š
ˆ’
‘
ˆ
Š
y
“
v
xw
Ž‡
}

t
‹
Šy
‰ˆ‡
… „
†

}
t

}
t
}~| y
{zy v
t v
xwv
tu
sr
€
de
f
f
g
Z
Sp
W
Z
]
m
on
lk
cO
b
qc
c
i
ic
j
cO
b
g f
h
` Y
a
`
[\
]
X_^
X
YZ
XW
UV
TSR
P O
Q
NanoElectrónica
59
œ
œ›
¢£¤
¡ —
K
Ÿ
™Ÿ
—ž
˜ ™š
•”
@—–
cluster superman
60
³´µ
°
² ¨
K
­
®¨¯
­¬
© ª«
¦¥
@¨§
± ª°
simulador nanoMOS: task-bag alg.
61
¾
¾½
ÄÅÆ
à ¹
K
Á
 »Á
¿¹À
º »¼
·¶
@¹¸
modelo nanoelectrónico
62
Ï
ÏÎ
ÕÖ×
Ô Ê
K
Ò
Ó ÌÒ
ÐÊÑ
Ë ÌÍ
ÈÇ
@ÊÉ
ßà
Ý ÜÛ
Þ
ÚÙØ
Ý
ÚÙØ
àÛ
Û
Û
Ý
ÚÙØ
ãà
âá
Ý
ê
å
çéå
æ
Øè
çæ äå
Ø
ëà
Û
á
Prestaciones
63
úûü
ù ï
K
øñ
õïö
ð ñò
ô
ôó
íì
@ïî
÷÷
@G
@K
N
4
/6
/
/
)
(
'(
&
%&
*
?
G M
K M
(*
&*
+%
)
,
"
"
"
$#!"
'(
9
;$:
9
78
2
-
-5
32
/
=
D
-0
1
/
'
C
AB
-0
=L
?
=@
?
.-
R
F
>=<
TSI
I
Q
IP
N G M
O
=L D
J
GI
?
G H
E
ÿ
ý
ÿxþ
Econometría
64
^
^]
efg
c X
d
a
b [a
_X`
Z [\
VU
YXW
Prestaciones
65
Esquema de la presentación
LAM: sistema de paso de mensajes
Octave: entorno de cálculo científico
Interfaz de programación (API)
MPITB (MPI Toolbox)
Diseño
Utilidades
Ejemplo
Aplicaciones
vwx
s
u k
d
p
qkr
po
l mn
ih
Ykj
t ms
Conclusiones
66
Conclusiones
Š
clusters cada vez más comunes
‹
Octave / LAM / MPITB son libres
HPC abierta a mayor audiencia
rápido aprendizaje MPITB / utilidades (incluso docencia)
utilidades son M-files, se puede contribuir / modificar / reutilizar
rápido prototipado aplicaciones (incluso investigación)
overhead mínimo, no hay otra Toolbox Octave comparable
MPITB ya era la mejor para MATLAB, comparando con otras
eficiencia según granularidad aplicación, hasta 101x con 120 nodos
‘


Ž

Œ
Octave/MPITB, entorno científico HPC
‡ˆ‰
„
† |
d

‚|ƒ
€
} ~
zy
Y|{
… ~„
http://atc.ugr.es/javier-bin/mpitb
67
Descargar