programación científica en clustersjfernand/investigacion/papers/osluca_05.sxi.pdf ·...
TRANSCRIPT
�� ��� � �� � � � � � � ��� ��� 1
Programación científica en clusters con Octave / MPITB
II Jornadas de Software Libre de la Universidad de CádizCádiz, 6-8 Abril 2005
Javier Fernández BaldomeroUniversidad de Granada
�� ��� � �� � �� � � � � � �� �� !"# 2
Esquema de la presentaciónLAM: 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
$% &�' ( )* + ,- ' . , / / )0 '�1 234 3
LAM
Sistema de paso de mensajes
biblioteca MPI + utilidades
5 lamboot, mpirun...
basado en daemon
fuente autoconf, paquetes rpm
Implementación MPI “gratis”
licencia propia, no GNU/GPL
Ohio, Notre-dame, Indiana
Colaboran en Open-MPI
67 8�9 : ;< = >? 9 @ > A A ;B 9�C DEF 4
MPI
Estándar para paso mensajes
desarrollado por MPI Forum
G universidades, fabricantes, etc...
desarrollo continuo
G MPI-1.0 Mayo'94
G MPI-1.1 Junio'95
G MPI-1.2 / 2.0 Julio'97
diversidad implementaciones
G gratuitas: LAM, MPICH...
G comerciales: ScaMPI, MPI/Pro...
HI J�K L MN O PQ K R P S S MT K�U VWX 5
Paso de mensajes
Multiprocesadores (SMP)
varias CPUs (cache)memoria compartida
Y (acceso frecuente, rápido)
hebras (threads) / OpenMP
Multicomputadores (clusters)
varios computadores (CPU/M)memoria distribuidapaso de mensajes
Y (acceso infrecuente, lento)
CPU
Mem
CPU
Mem
CPU
Mem
CPU
Mem
CPU CPUCPU
Memoria
CPU
Z[ \�] ^ _` a bc ] d b e e _f ]�g hij 6
Uso de LAM
lamboot
k acceso sin passwd
l rsh: ~/.rhosts
l ssh: ~/.ssh/authorized_keys
k fichero $LAMBHOST
l formato: <host> [<user>]
k asignación procesos
l round-robin por defecto
daemon lamd
l soporte mpirun / mpitask / mpimsg / lamclean / lamhalt / lamtrace...
l comunicación (según RPI = lamd / tcp / sysv / usysv / gm)
CPU3
Mem
CPU1
Mem
CPU2
Mem
CPU1
~/.rhosts
CPU1
~/.rhostsCPU2CPU3CPU1
$LAMBHOST
lamd lamd lamd
mn o�p q rs t uv p w u x x ry p�z {|} 7
Uso de LAM
mpicc
~ wrapper gcc
� gcc -I<...> -L<...> -lmpi -llam ...
mpirun
� -c/-np #procesos
� -ssi <servicio> <variante>
� -ssi rpi tcp
� nomenclaturas N y C
� N n0-3 c4,6-8
� mpirun -c 2 ppong
� comunicador: grupo procesos arrancados juntos (MPI_COMM_WORLD)
CPU3
Mem
CPU1
Mem
CPU2
Mem
ppongCPU2CPU3CPU1
$LAMBHOST
mpirun ppong ppong
ppong
�� ��� � �� � �� � � � � � �� ��� ��� 8
Uso de LAM
lamclean
� limpia cola mensajes/procesos
� como si lamboot reciente
lamhalt
� elimina daemons lamd
� como antes de lamboot
otras utilidades
mpitask, mpimsg
lamexec, lamgrow, lamshrink, lamtrace
CPU3
Mem
CPU1
Mem
CPU2
Mem
lamclean
�� ��� � �� ¡¢ � £ ¡ ¤ ¤ �¥ ��¦ §¨© 9
Programación MPI
ª« ¬� ® ¯° ± ²³ ´ ² µ µ ¯¶ �· ¸¹º 10
Las 6 llamadas MPI básicasMPI_Init
int MPI_Init(int *pargc, char ***pargv)
MPI_Comm_rankint MPI_Comm_rank(MPI_Comm comm, int *rank)
MPI_Comm_sizeint MPI_Comm_size(MPI_Comm comm, int *psize)
MPI_Sendint MPI_Send(void *buf, int count, MPI_Datatype dtype, int dest, int tag, MPI_Comm comm)
MPI_Recvint MPI_Recv(void *buf, int count, MPI_Datatype dtype, int src, int tag, MPI_Comm comm,
MPI_Status *stat)
MPI_Finalizeint MPI_Finalize(void)
»¼ ½�¾ ¿ ÀÁ  ÃÄ ¾ Å Ã Æ Æ ÀÇ ¾�È ÉÊË 11
Programación MPI (cont.)
mpicc -o trivial trivial.cmpirun -c 2 trivial
Ì rank 0 a CPU2, rank 1 a CPU3 CPU3
Mem
CPU1
Mem
CPU2
Mem
CPU2CPU3CPU1
$LAMBHOST
mpirun trivial trivial
ÍÎ Ï�Ð Ñ ÒÓ Ô ÕÖ Ð × Õ Ø Ø ÒÙ Ð�Ú ÛÜÝ 12
Interés de MPI
Biblioteca de alto nivel para paso de mensajes
Þ libera al programador C de aprender sockets TCP/UDP, shm, etc
driver tarjeta red
MPI / daemon LAM
biblioteca MPI
aplicación MPI MPI_Send(buf, cnt, typ, dst, tag, comm)
lamreqs.c: RPI_ADVANCE(lam_rq_top, TRUE)
outw(StartDMADown, ioaddr + EL3_CMD)
send.c: lam_send(buf,cnt,typ,dst,tag,comm,LAM_RQISEND)lamsend.c: err = _mpi_req_advance()
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)
Sistema Operativorpi_tcp_low.c: r = write(sock, buff, nbytes)
ßà á�â ã äå æ çè â é ç ê ê äë â�ì íîï 13
Esquema de la presentaciónLAM: 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
ðñ ò�ó ô õö ÷ øù ó ú ø û û õü ó�ý þÿ� 14
Octave
Entorno de cálculo científico
cada vez más ~ MATLAB
� diferencias en “accesorios”
� GUI, gráficos, toolboxes...
� Simulink, Compiler, RTW...
� soporte SourceForge
� ritmo versionado abrumador
fuente autoconf, paquetes...
MATLAB “libre”
en el sentido GNU GPL
�� � � � � �� � � � � �� �� ��� 15
Octave: entorno interpretado
M-filesinterpretadosprototipado rápidosalvar y ejecutar
.oct-filescompilados (C++, -ldl)más bajo nivel (API)
� computación intensiva
� acceso a bibliotecas
� control hardware
� import/exportación datos
M-file
g++
fuente C++.oct
try-and-error interactivodebugger integrado (dbstop)
paso intermedio compilar/linkarejecutar entonces desde Octave
depuración más complicadarequiere más habilidades
�� � ! "# $ %& ' % ( ( ") �* +,- 16
Programación Octave
./ 01 2 34 5 67 1 8 6 9 9 3: 1�; <=> 17
API Octave
Biblioteca para crear .oct
? fuente C++
@ llamadas API Octave
A wrapper g++: mkoctfile
B -I<...> -L<...> -loctave -lblas ...
C fichero .oct invocable Octave
no documentada, muy volátil
D software apoyo doxygen
E tutoriales Wiki / OctaveForge
F DaCoda, OF Developer Guide
GH IJ K LM N OP J Q O R R LS J�T UVW 18
Programación API Octave
XY Z[ \ ]^ _ `a [ b ` c c ]d [�e fgh 19
Esquema de la presentaciónLAM: 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
ij kl m no p qr l s q t t nu l�v wxy 20
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);}
MPITB
Interfaz DLD (.oct-files) a LAM/MPI
z 1 fichero .oct por cada llamada MPI
Sistema Operativo
API Octave
.oct-file
intérprete Octave >> info = MPI_Barrier(MPI_COMM_WORLD)
MPI lib
write(sock, buff, nbytes)
{| }~ � �� � �� ~ � � � � �� ~�� ��� 21
MPITB
Toolbox: colección de ficheros .oct (157 )
� y ficheros .M (85), utilidades .M (12), startups (6)
� y 4 directorios de ejemplos, y ficheros README / TUTORIAL
Red
Sistema Operativo
Octave MPI
aplicación MPIMPITB
aplicación Octave
�� �� � �� � �� � � � � � �� ��� ��� 22
Historia: PVMTB, MPITB/MATLAB...
� ¡¢ £ ¤¥ ¦ §¨ ¢ © § ª ª ¤« ¢�¬ ®¯ 23
Historia: MPITB/Octave
°± ²³ ´ µ¶ · ¸¹ ³ º ¸ » » µ¼ ³�½ ¾¿À 24
Historia: accesos
MPITB / MATLAB:
16680 Febrero 2000
PVMTB / MATLAB:
13398 Febrero 2000
MPITB / Octave:
2858 Abril 2004
2 artículos
Á ÃÄ Å ÆÇ È ÉÊ Ä Ë É Ì Ì ÆÍ Ä�Î ÏÐÑ 25
Esquema de la presentaciónLAM: 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
ÒÓ ÔÕ Ö ×Ø Ù ÚÛ Õ Ü Ú Ý Ý ×Þ Õ�ß àáâ 26
Diseño
No tan sencillo como se ha dado a entender
ã 157 llamadas => reutilizar código
Criterios
ä 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
ëì íî ï ðñ ò óô î õ ó ö ö ð÷ î�ø ùúû 27
1 oct-file por función / patrón llamada
üý þÿ � �� � �� ÿ � � � � �� ÿ �� 28
patrones / #include
�� ��� � �� � �� � � � � � �� �� ��� 29
bloques segregados por uso
! "�# $ %& ' () # * ( + + %, #- ./0 30
bloques muy frecuentes: mpitb.h
12 3�4 5 67 8 9: 4 ; 9 < < 6= 4> ?@A 31
referencias cruzadas
Facilitan mantenimiento
B Octave cambia de versión muy rápidamente
C cambios importantes API
Ej: oct-2.1.50 -> 2.1.57
D cambió representación interna structs
E requirió cambios en 6 líneas MPITB
F afectando 3 fich.cc y 1 fich.h
criterios: no duplicar trabajo
G no mantener 157 ficheros .cc
H no código duplicado -> bloque
I editar bloque afecta a todos .cc
MPI_Send
PATN_F_B2IC
BLCK_B2IC RET_1_ARG
NARGCHK
BLCK_ONESYM
BLCK_ONEINTBLCK_ONECOM
get_MPI_Buff
DECL_BUF_VARS
JK L�M N OP Q RS M T R U U OV MW XYZ 32
Esquema de la presentaciónLAM: 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
[\ ]�^ _ `a b cd ^ e c f f `g ^h ijk 33
Utilidades MPITB
12 M-files para las tareas más comunes
l “sugerencias de diseño” para aplicaciones paralelas Octave
de “protocolo”
m LAM_Init (nslaves, rpi, hosts)
n [children] = Octave_Spawn (nOctaves, infokey)
o NumCmds_Init (ncmd, qflg, tag, dbug)
p NumCmds_Send(nams, vals)
de “instrumentación”
q init_stamp(n) save_instr print_stamp classstamp
r time_stamp('name') load_instr last_stamp discripar
st u�v w xy z {| v } { ~ ~ x� v� ��� 34
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)
M-file: 236 líneas , usando system('lamboot'/'lamhalt')
�� ��� � �� � �� � � � � � �� �� ��� 35
[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
protocolo para unir intercomunicadores
£ 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
¦§ ¨�© ª «¬ ®¯ © ° ® ± ± «² ©³ ´µ¶ 36
Arrancando Octaves esclavos
Control startup:
· octave ejecuta .octaverc -> linkar a octaverc_MPITB.m
¸ discriminar esclavos por variable entorno LAMPARENT
NET
OS
octave
MPITB
.octaverc
<añadir path a MPITB> )if ~isempty(getenv(‘LAMPARENT’))
startup_mergeParentend
info=MPI_Init;[info parent]=MPI_Comm_get_parent;[info NWORLD]=MPI_Intercomm_merge
(parent,1);MPI_Errandler_set(NWORLD,RETURN);
octaverc_MPITB.m
startup_mergeParent.m
¹º »�¼ ½ ¾¿ À Á ¼ à Á Ä Ä ¾Å ¼Æ ÇÈÉ 37
Arrancando Octaves esclavos
lamboot/MPI_Init:
Ê facilitado por la utilidad LAM_Init (236 líneas M)
NET
OS
octave
MPITB
LAM_Init(1,'tcp',{'B','A'})
NET
OS
lamdlamd
host A host B
ËÌ Í�Î Ï ÐÑ Ò ÓÔ Î Õ Ó Ö Ö Ð× ÎØ ÙÚÛ 38
Arrancando Octaves esclavos
arrancar procesos Octave esclavos:
Ü facilitado por la utilidad Octave_Spawn (68 líneas M)
Ý startup esclavos discriminado por LAMPARENT
NET
OS
octave
MPITB
Octave_spawn(1)
NET
OS
lamd
startup_merge.m
lamd octave
MPITB
LAMPARENT
Þß à�á â ãä å æç á è æ é é ãê áë ìíî 39
Arrancando Octaves esclavos
intracomunicador
ï queda definido NEWORLD con ámbito global
ð en maestro por Octave_Spawn (en esclavos por startup_merge.m)
NET
OS
octave
MPITB
Octave_spawn(1)
NET
OS
lamd
MPI_Init;_Comm_get_parent;_Icomm_merge(par)_Errhandler_set
lamd octave
ñò ó�ô õ ö÷ ø ùú ô û ù ü ü öý ôþ ÿ� � 40
Arrancando Octaves esclavos
necesidad protocolo
� usualmente, esclavo no va a ser utilizado interactivamente
� protocolos sugeridos: Bcast (1 comando), NumCmds (N cmds)
NET
OS
octave
MPITB
NumCmds_Init(...)_Send(N,V)
NET
OS
lamdlamd octave
MPITB
MPI_Recv/_Unpack/eval(cmd)NUMCMDS
QUITTAG
DEBUGvars/cmd
...vars/cmd
�� ��� � � � � � � � � ��� ��� 41
Esquema de la presentaciónLAM: 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
�� ��� � �� � � � ! � " " �# ��$ %&' 42
test ping-pong, protocolo Bcast
() *�+ , -. / 01 + 2 0 3 3 -4 +�5 678 43
test ping-pong (cont)
9: ;�< = >? @ AB < C A D D >E <�F GHI 44
test ping-pong (cont)
JK L�M N OP Q RS M T R U U OV M�W XYZ 45
[\ ]�^ _ `a b cd ^ e c f f `g ^�h ijk 46
Cálculo de пIntegrando arctan'(x)
11+x2
⌠ 1⌡ 0
dx = arctan(x) =1
0
π 4
lnm o pq rs tvu t p txw y p
z|{ }�~ �� �� �� � �� ��
� ��� � � � ��� � � � � � � �
� �� � � � ��� � ����
¡ ¢ £ ¤ �
¥�¦ § ¨© ª© «v¬ © ® ¯ © ° ª ± ²³
´ µ ¶· ¸ ¹�º » ¼ ½ ¾· ¿À ÁvÂ
ÃÄ Å ¸ µ ÆǺ ¹ È ¶É º ¹ ¸ ´ ½ ´ ¼ Â
ÊË ÌÎÍ ÏÐ ÑÒ ÓÕÔ Ö Ò Ó × Ø�Ù ÚÛ Ü ÝvÞ
código paralelo
ßà á�â ã äå æç èâé ç ê ê äë â�ì íîï 47
Cálculo de п
Embarazosamente paralelo
ð enviar N (i=MPI_Comm_rank, C=_size), recibir suma parcial
ñ tiempo medido desde datos enviados hasta π calculado
ò protocolo Bcast
enviar i/C/N cálculo remoto recv suma / acumular
óô õ�ö ÷ øù úû üöý û þ þ øÿ ö�� �� � 48
Cálculo de п
código MPITB (partes de Mast.m / Work.m)
MPI_Barrier(NEWORLD);tic
Psum=0; Sum=0;
for numt=1:C MPI_Recv(Sum,MPI_ANY_SOURCE,...
TAG,NEWORLD); Psum=Psum+Sum;end Psum=Psum/N;
T=toc;
MPI_Barrier(NEWORLD);
[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));
MPI_Send(lsum,0,TAG,NEWORLD);
�� �� �� �� � � � � � �� ��� ��� 49
�� �� � �� � � � ! � " " �# ��$ %&' 50
Esquema de la presentaciónLAM: 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
() *+ , -. / 01 + 2 0 3 3 -4 +�5 678 51
Test de prestaciones
ping-pong: send-recv repetidamente, variando tamaño
9: ; <= >
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
clear arrayend
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 arrayend
?@ AB C DE FG HBI G J J DK B�L MNO 52
Prestaciones“Performance of parallel toolboxes”, VecPar'02, Porto
Latencia 1.8x
Overhead 20%@ 1500B
PQ RS T UV WX YSZ X [ [ U\ S�] ^_` 53
Análisis WaveletVersiones color(3x)/grises(4x), con/sin servidor
a�b ced fg ceh b d ij ig ceh i
k l m n l o m p q r
s q t q r l r u
vd b w x ceh b y h c h
B/W
RGB
B/W
RGB
z { | } ~{ �
}z �
� � ~ �{ �
�� ��� �� ��� �� � � � �� ��� ��� 54
cluster oxigeno
switch BayStack 100Mbps8 Pentium II + servidor
� 333MHz, 128MB, no HD
� 400MHz, 128MB, 14GB
������ ��� ����� �� �¡ �¢ �¢� �£¤¥ ¦� �¢�§ £ £� ¨©ª ¦� � ���� �� � �� ��� �� �� �¡ �¢ �¢� � £¤¥ ¦� �¢� § £ £� ¨©ª ¦� �
«¬ ®¯° ««¬ ± «¬ ² «¬ ³ «¬ ´
«¬ µ «¬ ¶ «¬ · «¬ ¸
«¬ ¹º» ¼½
¾¿ ÀÁ ÃÄ ÅÆÇ ÁÈ Æ É É ÃÊ Á�Ë ÌÍÎ 55
Algoritmo paralelo no trivial (4x)
2↓1
2↓1
2↓1
2↓1
1↓2
1↓2
1↓2
1↓2
ÏÐÑÒÓÔ ÔÔÕ ÓÔÖ×Ø ÐÒÙ ÔÚÛÜÝ ÛÞ Ô ÏÐßà×Ø Ôá × Ù Ôâãäå ß Ð ÏÏÐÑÒÓÔ ÔÔÕ ÓÔÖ×Ø ÐÒÙ ÔÚÛÜÝ ÛÞ Ô ÏÐßà×Ø Ôá × Ù Ôæ ã âå ß Ð ÏÏÐÑÒÓÔ ÔÔÕ ÓÔÖ×Ø ÐÒÙ ÔÚÛÜÝ ÛÞ Ô ÏÐßà×Ø Ôá × Ù Ôâãäå ß Ð ÏÏÐÑÒÓÔ ÔÔÕ ÓÔÖ×Ø ÐÒÙ ÔÚÛÜÝ ÛÞ Ô ÏÐßà×Ø Ôá × Ù Ôæ ã âå ß Ð Ï
çè éêë ìí îïð êñ ï ò ò ìó ê�ô õö÷ 56
Prestaciones (ASTC-HPC'01, Seattle-WA, USA)
øùûúü ýÿþ � �� � ø� � �� ø �
���
� � �
� � �
���
�� � � ���
� �
�� �� � �� �
�� ���� � ��
"! � � #%$ !
&('
) *+ &('
, , &
&('
-. / &('
). -
0� �21 ��43 � �5 67 89 7 8
:; <= ; <> ?
@A BC�D E FG
H"I J J K%L I
M(N
O OP MN
QR S
T�U
VW X TU
YZ [
\] ^2_ ` a4b ] `c d ef"g h i
jk lm k ln o
pq rs�t u vw
(9.16s)
(14.6s)
xy z{ |2} ~ �� � x� � �� x �
����
� �� � ����
�� � �
����
� � �� ����
� � � �
�� �� � �� �
�� ���� � ��
�"� � � �% �
¡(¢
£¤ ¥ ¡(¢
£¤ ¦
¡(¢
£ ¡ § ¡(¢
£ ¦ ¦
¨� �2© ��4ª � �« ¬ ®¯ ®
°± ²³ ± ²´ µ
¶· ¸¹�º » ¼½
¾"¿ º º À%Á ¿
Â(Ã
Ä ÅÆ Â(Ã
Ä ÅÇ
È�É
Ê ËÌ È�É
Ê Ë Ë
ÍÎ Ï2Ð Ñ Ò4Ó Î ÑÔ Õ Ö×"Ø Ù Ú
ÛÜ ÝÞ Ü Ýß à
áâ ãä�å æ çè
(27.43s)
(44.06s)
éê ëíì î ïð ñ òó ì ô ò õ õ ïö ìø÷ ùúû 57
Control del pH
üþý
ÿ�� � � � � � �� � ÿ� ü � � ��� � � ü� � �� � ü�� � �� �� ü � � � �� � � ��� !" # $�% &(') * ' " # # $ ! *) ! % +-, . /0 ' . 1) ' .) +-2 $ ! * 3) ! /') +�4 ') 5 + 0 # . 6
789 : ;9
<=>? @A B CDE FG H IJKLM NO L PQ R L OS OT RU K NUV L
WXYZ [ \] ^_
`abc
defgihj
klmn om pqr st uvwxyz{ y| } st uv w
~ ��� � �� � � �� �� � ����� �� ���� � �� � � �� ����� �� � � � � ¡ �¢
£¤¥ ¦ § ¨� ¥ � � ¡ �¢ � � ©ª « £� �¬ �
® ¯i°± ²³ ´µ¶ °· µ ¸ ¸ ²¹ °»º ¼½¾ 58
Prestaciones
¿ÁÀ
ÂÃ ÂÄ ÂÅ Æ ÇÈÉ È Ê Æ Ç ÈÉ È ËÌÁÍ
ÎÏ ÎÐ ÎÑ Ò ÓÔÕ Ô Ö Ò ÓÔ Õ Ô × ØÙ ÚÛ Ü ÝÞ ßà Øá Ø Ø ØÙ Ø Ú ØÛ Ø Üá ØÙ ÚÛ Ü ÝÞ ßà Ø áØ ØØÙ Ø ÚØÛ Ø Ü
á ØÙ ÚÛ Ü ÝÞ ßà Ø á Ø Ø ØÙ Ø Ú ØÛ Ø ÜáÜ áØ á áØ Ü áÙ á áÙ Ü áÚ á áÚ Ü á
Û á áÛ Ü áÜ á áÜ Ü áÝ á áÝ Ü áÞ á áÞ Ü á
â ã äåæçèé åêë äè ç å ê åêé ìëí è ê îï ð
ñ òóôõ ö÷ø ùúô û
üýÿþ �� �� �� � �� �� � � � � ��
�� � � � �� �� � � �
� �� ��� ���ú� ùõ
��õ� õ� ��� ø
� ! �" � �� � � � � � � � � � � �# �� $% &
'(*) +,-. /. 0 /1 23 4 256 78 96 1
' () + ,- . /. 0 /:; 3 4 2 56 78 96 1' () + ,- . /. 0 / 1 23 4 2 56 78 96 1
<= >@? A BC D EF ? G E H H BI ?KJ LMN 59
NanoElectrónica
OQP RTS UV WX YZ [\ X ] ^_X Ya` b Oc de f f fhg i c i j kl m c ] no Z W pS Z g qc ` b Oc
rs tu t v vxw vy{z t |y~} � } � � t �} � �� ��� ��� �y �� t � � ��� �} �xw � �y �� � � v� � |w u �
�� �@� � �� �� ��� � � � � �K¡ ¢£¤ 60
cluster superman
¥¦ §@¨ © ª« ¬ ®¨¯ ° ° ª± ¨K² ³´µ 61
simulador nanoMOS: task-bag alg.
¶· ¸@¹ º »¼ ½¾ ¿¹À ¾ Á Á »Â ¹Kà ÄÅÆ 62
modelo nanoelectrónico
ÇÈ É@Ê Ë ÌÍ ÎÏ ÐÊÑ Ï Ò Ò ÌÓ ÊKÔ ÕÖ× 63
Prestaciones
ØÚÙ ÛÜÞÝ ßà
ØÚÙ Û ÛÝ Ûà
ØÚÙ áâ Ý ãà
Ø äåçæ å Øè æ åçé ê á ÛÝ ëà
ìí î@ï ð ñò óô õïö ô ÷ ÷ ñø ïKù úûü 64
Econometría
ý þxÿ ��� � � ��� � � � � � � � � � � � ÿ �� � ��� � � � � �
�� �� ��� � � � � !"$# %& �& " " � " � '( ( )� * � � ' '( ) %+ *& * � ( � ,
-. / -0 1 / - 0 23 4 -5 - / / 2 /6 78 9 9 :$;
<>= ? @= AB C D ?
E F @G H G ? I G J @K D=L M GON IP QN R I ITS = L = M K M G ?
UV WYX Z [\ ]^ _X` ^ a a [b Xdc efg 65
Prestaciones
hi jYk l mn op qkr p s s mt kdu vwx 66
Esquema de la presentaciónLAM: 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
yz {Y| } ~� �� �|� � � � ~� |d� ��� 67
Conclusiones
Octave / LAM / MPITB son libres
� clusters cada vez más comunes
� HPC abierta a mayor audiencia
Octave/MPITB, entorno científico HPC
� 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
http://atc.ugr.es/javier-bin/mpitb