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