Está en la página 1de 14

Programacin en clusters Rocks

Bruno Contreras-Moreira http://www.eead.csic.es/compbio


Fundacin ARAID y Estacin Experimental de Aula Dei/CSIC, Zaragoza, Espa a

En este material primero re!isamos cmo instalar "!irtualmente# y usar un cluster de cmputo con el sistema operati!o Roc$s y despu%s exploramos unas cuantas &erramientas y metodolog'as (tiles para &acer c)lculos intensi!os, *ue demandan muc&os recursos de procesamiento y/o memoria, del estilo de los *ue se &acen en +ioin,orm)tica- .n posi+le li+ro de texto para ampliar este material es /ig& 0er,ormance 1inux Clusters 2it& 3SCAR, Roc$s, 3pen4osix and 40I-

Rocks
Roc$s es una distri+ucin 1inux dise ada para construir clusters de cmputo- Incluye, adem)s del sistema operati!o, un con5unto de rolls, *ue son pa*uetes de so,t2are adecuados para tareas m)s especializadas, *ue se instalan opcionalmente-

Instalacin de un cluster Rocks virtual


.na +uena manera de aprender a programar en un entorno Roc$s es usando un cluster al *ue tengas acceso- Sin em+argo, una opcin toda!'a m)s interesante es crear uno, aun*ue sea !irtual, por*ue por el camino aprendes un poco de la ar*uitectura del sistema, y eso te ser) (til para usar el cluster despu%sEn los siguientes pasos explico exactamente cmo crear un cluster de 67 +its en miniatura, compuesto por un nodo maestro y uno de c)lculo, en +ase a este protocolo de 8on Forrest- Antes de seguir, por ,a!or comprue+a *ue dispones de al menos de 97 :+ de espacio en disco y ;:+ de RA4 Instala <irtual=ox para tu sistema 1inux "puedes descargarlo de &ttp>//222-!irtual+ox-org/2i$i/Do2nloads#- En este tutorial usamos la !ersin ;-?-@ Descargar e instala el A<irtual=ox Extension 0ac$A, *ue puedes o+tener en el mismo lugar Descargar IS3 del D<D 8um+o de Roc$s, *ue ya incluye los rolls esenciales "puedes descargarlo de &ttp>//222-roc$sclusters-org, compro+ando tras la descarga la suma 4DB#- En este tutorial usaremos la !ersin B-;, *ue se llama area51+base+bio+ganglia+hpc+kernel+os+sge+web-server+xen16.12.2009-15.16.53.i386.disk1.iso, *ue guardamos en la carpeta /home/pepe/so !/ Elige un directorio donde u+icar los discos duros !irtuales, como por e5emplo /home/pepe/ Crea el nodo principal tecleando en el terminal estos comandos>
"#ox$anage%crea!evm%--name%&v'ocks5(-)ron!end&%--os!*pe%'ed+a!%--regis!er "#ox$anage%modi *vm%&v'ocks5(-)ron!end&%--memor*%1000%--vram%32%--nic1%in!ne!% --nic2%na!%--a,dio%none%--nic!*pe1%825(0-$%--nic!*pe2%825(0-$%%--boo!1%dvd% --boo!2%disk%--boo!3%none%--boo!(%none

"#ox$anage%crea!ehd%-- ilename%&/home/pepe/v'ocks5(-)ron!end.vdi&%--si.e%50000% --varian!%/!andard% "#ox$anage%s!oragec!l%&v'ocks5(-)ron!end&%--name%&/010%2on!roller&%--add%sa!a% --con!roller%3n!el0hci "#ox$anage%s!oragea!!ach%&v'ocks5(-)ron!end&%--s!oragec!l%&/010%2on!roller&% --por!%0%--device%0%--!*pe%hdd%--medi,m%&/home/pepe/v'ocks5(-)ron!end.vdi& "#ox$anage%s!oragec!l%&v'ocks5(-)ron!end&%--name%&34-con!rol&%--add%ide "#ox$anage%s!oragea!!ach%&v'ocks5(-)ron!end&%--s!oragec!l%&34-con!rol&%--por!% 0%--device%0%--!*pe%dvddrive%--medi,m% /home/pepe/so !/area51+base+bio+ganglia+hpc+kernel+os+sge+web-server+xen16.12.2009-15.16.53.i386.disk1.iso "#ox$anage%s!ar!vm%&v'ocks5(-)ron!end&

Cras estos comandos da comienzo el proceso normal de instalacin del nodo maestro o frontend , documentado en la 2e+ o,icial- El proceso es casi autom)tico, pero de+es recordar dos cosas> escri+e ron!end cuando aparezca el terminal de arran*ue boo!5 cuando llegue el momento elige como m'nimo estos rolls > kernel6%base6%web% server6%os .na !ez instalado el ron!end puedes a adir el pa*uete <irtual=ox guest additions para mayor comodidad En el terminal del nodo maestro teclea como superusuario 7%inser!-e!hers 0ara cada nodo compute *ue *uieras crear, empezando por el ?D?, &asta el ?DE teclea en el terminal de tu 1inux>
"#ox$anage%crea!evm%--name%&v'ocks5(-2omp,!e-0-0&%--os!*pe%'ed+a!%--regis!er "#ox$anage%modi *vm%&v'ocks5(-2omp,!e-0-0&%--memor*%1000%--vram%32%--nic1% in!ne!%--a,dio%none%--nic!*pe1%825(0-$%--boo!1%ne!%--boo!2%disk%--boo!3%none% --boo!(%none "#ox$anage%crea!ehd%-- ilename%&/home/pepe/v'ocks5(-2omp,!e-0-0.vdi&%--si.e% 50000%--varian!%/!andard% "#ox$anage%s!oragec!l%&v'ocks5(-2omp,!e-0-0&%--name%&/010%2on!roller&%--add% sa!a%--con!roller%3n!el0hci "#ox$anage%s!oragea!!ach%&v'ocks5(-2omp,!e-0-0&%--s!oragec!l%&/010%2on!roller&% --por!%0%--device%0%--!*pe%hdd%--medi,m%&/home/pepe/v'ocks5(-2omp,!e-0-0.vdi& "#ox$anage%s!oragec!l%&v'ocks5(-2omp,!e-0-0&%--name%&34-%2on!roller&%--add%ide% "#ox$anage%s!ar!vm%&v'ocks5(-2omp,!e-0-0&

En el terminal del nodo maestro teclea como superusuario la tecla F@ para terminar de a adir nodos

Figura 1: Cluster Roc$s B-; con un maestro y dos nodos compute so+re <irtual=ox-

Operaciones fundamentales para usuarios de un cluster Rocks


Si aca+as de montar un cluster Roc$s o te &an dado acceso a uno, pro+a+lemente necesites aprender a usarlo y/o administrarlo- 0or supuesto tu me5or recurso es la documentacin o,icial Roc$s "*ue por cierto est) a tu alcance aun*ue no tengas acceso a Internet, a+riendo un na!egador en el nodo maestro con la .R1 h!!p5//localhos!8#- Si pre,ieres en espa ol, te recomiendo el manual 1inux Clustering con Roc$s, una :u'a 0r)cticaEstos son unas cuantas tareas esenciales para aprender a mane5ar el cluster> Cmo encender el cluster Si te toca encender el cluster, aseg(rate de *ue *ue el nodo maestro est) enc&u,ado a la red el%ctrica y oprime el +otn 3E/03FER o e*ui!alente- 0uedes !er cmo discurre el arran*ue si enc&u,as una pantalla y un teclado al maestro- Si todo !a +ien, tras los mensa5es t'picos de un sistema 1inux, llega la linea ,inal de login5%donde puedes registrarte con tu nom+re de usuarioA&ora puedes encender los nodos secundarios poco a poco o todos a la !ez, dependiendo de la potencia de tu alimentacin el%ctrica, d)ndole al +otn de encendido de cada uno0uedes compro+ar *ue el sistema est) listo conect)ndote al maestro y e5ecutando 7%9s!a!%- , o+teniendo algo como>
:roo!;maes!ro%<=7%9s!a!%9,e,ename%%%%%%%%%%%%%%%%%%%%%%9!*pe%resv/,sed/!o!.%load>avg%arch% s!a!es ---------------------------------------------------------------------------all.9;comp,!e-0-0.local%%%%%%%%#3?%%%0/(%%%%%%%0.00%%%%%lx26-x86 ---------------------------------------------------------------------------all.9;comp,!e-0-1.local%%%%%%%%#3?%%%0/(%%%%%%%0.00%%%%%lx26-x86 ----------------------------------------------------------------------------

Si alg(n nodo estu!iera con pro+lemas aparece en la columna s!a!es en el estado a, Cmo ver qu rolls estn instalados 0ara este ,in de+es teclear en el terminal> 7%rocks%lis!%roll "en el apartado ?-7-7 se explica cmo instalar un roll# Nombres de los nodos 0or de,ecto, Roc$s llama al nodo maestro ron!end- 1os nodos secundarios o compute se !an numerando al crearse, desde comp,!e-0-0 &asta comp,!e-0-@, donde EG9 es el n(mero total de nodos secundarios instalados Cmo ver la carga de trabajo en el cluster Si *uieres !er el estado actual de las colas de tra+a5os +asta con teclear 7%9s!a!%- en un terminal del maestro y podr)s !er *u% est) corriendo en el cluster y *u% est) en espera, y la carga de cada nodoSi *uieres !er la carga glo+al del sistema gr),icamente lo me5or es usar el so,t2are ganglia, *ue suele estar instalado en los clusters Roc$s- 0ara ello a+re un na!egador 2e+ desde el nodo maestro apuntando a la .R1 h!!p5//localhos!/ganglia, o si est) con,igurado el ser!idor 2e+, desde cual*uier otra ma*uina apuntando a la .R1 h!!p5//www.maes!ro.org/ganglia-

Figura : Estado de un cluster Roc$s "de 9H nodos# tal como lo muestra :anglia Cmo conectarte a uno de los nodos secundarios 0or de,ecto, Roc$s con,igura los nodos de manera *ue son parte de una red 1AE con el maestro e in!isi+les desde ,uera de ella, as' *ue solamente podremos conectarnos a ellos desde un terminal del nodo maestro> roo!;maes!ro%<=A%ssh%comp,!e-0-6 *ue dependiendo de la !ersin de Roc$s es e*ui!alente a>
:roo!;cl,s!er%<=7%ssh%c0-6

Cmo probar el sistema de colas para distribuir tareas a los nodos En Roc$s el mane5ador de colas por de,ecto es :rid Engine "S:E, incluido en el roll sge#, *ue se explica por medio de e5emplos en la documentacin o,icial documentacin o,icial<amos a pro+ar *ue el S:E de nuestro cluster ,unciona, en!iando una serie de tra+a5os sencillos al mane5ador S:E mediante el comando 9s,b- 0ara ellos, primero editamos este cdigo y lo guardamos en un arc&i!o llamado por e5emplo !es!/B-.pl >
AC/,sr/bin/perl% orDm*%7iE0F7iG30F7i++HI%sleepD2H%8 prin!%&okCJn&F

Cras &acer el arc&i!o e5ecuta+le con 7%chmod%+x%!es!/B-.pl podemos en!iar !arias instancias de este programita al cluster y compro+ar *ue los tra+a5os e,ecti!amente se e5ecutan

&aciendo>
:pepe;cl,s!er%<=7% or%DDiE1FiGE10Fi+E1HHF%do%9s,b%!es!/B-.plF%%done Ko,r%Lob%2%D&!es!/B-.pl&H%has%been%s,bmi!!ed Ko,r%Lob%3%D&!es!/B-.pl&H%has%been%s,bmi!!ed Ko,r%Lob%(%D&!es!/B-.pl&H%has%been%s,bmi!!ed Ko,r%Lob%5%D&!es!/B-.pl&H%has%been%s,bmi!!ed Ko,r%Lob%6%D&!es!/B-.pl&H%has%been%s,bmi!!ed Ko,r%Lob%M%D&!es!/B-.pl&H%has%been%s,bmi!!ed Ko,r%Lob%8%D&!es!/B-.pl&H%has%been%s,bmi!!ed Ko,r%Lob%9%D&!es!/B-.pl&H%has%been%s,bmi!!ed Ko,r%Lob%10%D&!es!/B-.pl&H%has%been%s,bmi!!ed Ko,r%Lob%11%D&!es!/B-.pl&H%has%been%s,bmi!!ed :roo!;cl,s!er%<=7%9s!a!%9,e,ename%%%%%%%%%%%%%%%%%%%%%%9!*pe%resv/,sed/!o!.%load>avg%arch% s!a!es -------------------------------------------------------------------------------all.9;comp,!e-0-0.local%%%%%%%%#3?%%%0/0/1%%%%%%%%%%0.05%%%%%lx26-x86%%%%%% AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA %-%?-@43@B%NO#/%-%?-@43@B%NO#/%-%?-@43@B%NO#/%-%?-@43@B%NO#/%-%?-@43@B%NO#/ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA %%%%%%3%0.55500%!es!/B-.pl%pepe%%%%%%%%%9w%%%%06/10/2011%095(15(5%%%%%1% %%%%%%(%0.55500%!es!/B-.pl%pepe%%%%%%%%%9w%%%%06/10/2011%095(15(5%%%%%1% %%%%%%5%0.55500%!es!/B-.pl%pepe%%%%%%%%%9w%%%%06/10/2011%095(15(5%%%%%1% %%%%%%6%0.55500%!es!/B-.pl%pepe%%%%%%%%%9w%%%%06/10/2011%095(15(5%%%%%1% %%%%%%M%0.55500%!es!/B-.pl%pepe%%%%%%%%%9w%%%%06/10/2011%095(15(5%%%%%1% %%%%%%8%0.55500%!es!/B-.pl%pepe%%%%%%%%%9w%%%%06/10/2011%095(15(5%%%%%1% %%%%%%9%0.55500%!es!/B-.pl%pepe%%%%%%%%%9w%%%%06/10/2011%095(15(5%%%%%1% %%%%%10%0.55500%!es!/B-.pl%pepe%%%%%%%%%9w%%%%06/10/2011%095(15(5%%%%%1% %%%%%11%0.55500%!es!/B-.pl%pepe%%%%%%%%%9w%%%%06/10/2011%095(15(5%%%%%1

0uedes indagar so+re todas las opciones de 9s,b en el terminal con 7%man%9s,b, por e5emplo para aprender a guardar los mensa5es de error y la salida est)ndar en arc&i!os, como se muestra en el e5emplo ?-7-9 Cmo ejecutar el mismo comando en diferentes nodos del cluster desde el terminal Es posi+le in!ocar comandos desde el s&ell del nodo maestro para *ue sean e5ecutados en !arios "o todos los# nodos usando la instruccin rocks%r,n%hos!, *ue sustituye al antiguo comando cl,s!er- ork- Como es &a+itual en sistemas 1inux, podemos consultar su ,orma de uso tecleando su nom+re en el terminal>
:roo!;cl,s!er%<=7%rocks%r,n%hos!%%% error%-%m,s!%s,ppl*%a%command :hos!=...%Icommand8%Imanaged8%Ix118%:commandEs!ring=

0or e5emplo, para compro+ar los procesos acti!os en todos los nodos compute de un cluster, podemos teclear en el terminal> 7%rocks%r,n%hos!%comp,!e%ps A&ora un e5emplo similar so+re un nodo en particular>
:roo!;cl,s!er%<=7%rocks%r,n%hos!%comp,!e-0-0%&ls%-l%/!mp& comp,!e-0-15%!o!al%12 comp,!e-0-15%-rw-r--r--%1%roo!%roo!%%%%0%N,n%1(%09528%pos!-91-sge-execd.deb,g comp,!e-0-15%-rw-r--r--%1%roo!%roo!%%%%0%N,n%1(%09528%pos!-99-done.deb,g comp,!e-0-15%-rw-r--r--%1%roo!%roo!%%%%0%N,n%1(%%2011%pre-09-prep-kernelso,rce.deb,g comp,!e-0-15%-rw-r--r--%1%roo!%roo!%%%%0%N,n%1(%%2011%pre-10-src-ins!all.deb,g comp,!e-0-15%drwx------%2%roo!%roo!%(096%N,n%1(%%2011%'2/ comp,!e-0-15%-rw-r--r--%1%roo!%roo!%3321%N,n%1(%%2011%sshd>con ig

comp,!e-0-15%drwx------%2%roo!%roo!%(096%N,n%1(%095(2%ssh-9PwOne33M5

3tra manera de e5ecutar un comando so+re un nodo es mediante SS/>


:pepe;maes!ro%<=7%ssh%comp,!e-0-3%d )iles*s!em%%%%%%%%%%%1Q-blocks%%%%%%Rsed%0vailable%RseS%$o,n!ed%on /dev/sda1%%%%%%%%%%%%%%806(2M2%%%50M9996%%%25M(62(%%6MS%/ none%%%%%%%%%%%%%%%%%%%2052036%%%%%%%%%0%%%2052036%%%0S%/dev/shm /dev/sda5%%%%%%%%%%%%1(069(608%%%%%93M32%133(5396(%%%1S%/s!a!e/par!i!ion1 /dev/sda2%%%%%%%%%%%%%%(03212(%%%%%93620%%%3M336M6%%%3S%/var maes!ro.local5/expor!/home/pepe %%%%%%%%%%%%%%%%%%%%%238299008%%%(M39296%221(5(M20%%%3S%/home/pepe

Operaciones fundamentales para administradores de un cluster Rocks


1as siguientes tareas se &acen como superusuario root y por tanto no so+ran las precauciones para no romper el sistema Cmo crear usuarios 0ara crear un usuario pepe lo me5or es usar la terminal del superusuario> :roo!;maes!ro%=7%,seradd%pepe :roo!;maes!ro%=7%passwd%pepe "para esta+lecer su contrase a# :roo!;maes!ro%=7%rocks%s*nc%,sers "para propagar el usuario a todos los nodos# A&ora podemos compro+ar *ue existe un directorio llamado /home/pepe , accesi+le desde /expor!/home/pepe , precisamente desde donde se exporta a los nodos secundarios Cmo apagar o reiniciar el cluster .sando la instruccin rocks%r,n%hos! "*ue ya !imos en ?-9-7#, es sencillo apagar o reiniciar los nodos &i5os- 0or e5emplo, si un nodo est) dando pro+lemas podemos reiniciarlo as'>
:roo!;maes!ro%<=7%rocks%r,n%hos!%comp,!e-0-0%reboo!

Si *ueremos apagarlo entonces podemos usar la instruccin powero

o reboo! seg(n

En cuanto al nodo maestro, siendo superusuario, &ay *ue e5ecutar powero sea necesario Cmo eliminar nodos del cluster

Si por e5emplo el nodo ?D9? ,alla y lo *ueremos eliminar del sistema de colas, es su,iciente con 6 instrucciones en el terminal de superusuario>
inser!-e!hers%--remove%comp,!e-0-10F rocks%lis!%hos!F rocks%s*nc%con ig

!erramientas " e#emplos de c$lculo en paralelo


En esta seccin repasamos di,erentes maneras de usar las capacidades de un cluster, te recomiendo *ue las prue+es como un usuario normal, no como superusuario "!er ?-9-6#-

%sando el mane#ador del cluster


1a manera m)s natural y sencilla de apro!ec&ar un cluster para &acer c)lculos en paralelo es usando el mane5ador de tra+a5os del mismo, *ue en el caso de Roc$s es normalmente :rid Engine "?-9-7#- Este tipo de uso es adecuado para tra+a5os independientes *ue corren en paralelo en di,erentes nodos a la !ez, un tipo de paralelismo tam+i%n llamado " ag of !as"s #arallelism #En la pr)ctica el :rid Engine te permite e5ecutar cual*uier so,t2are o programa en m(ltiples nodos, manteniendo el excedente de tra+a5os en una cola para no so+recargar la capacidad del cluster- 0ara este tipo de aplicaciones son especialmente adecuados los lengua5es de scripting como 0erl, puesto *ue su sintaxis permite un control preciso con muy pocas l'neas de cdigoEl siguiente e5emplo en 0erl muestra cmo en!iar a un cluster de ,orma ordenada m(ltiples instancias del mismo so,t2are o programa propio, en este caso &mmer "del =io roll#>
AC/,sr/bin/perl%-w ,se%s!ric!F m*%79s,b-T-%E%&/op!/gridengine/bin/lx26-x86/9s,b&F m*%7?)0$-T-%E%&/op!/#io/hmmer/bin/hmmp am&F%A%re9,ires%ins!alla!ion%o %#io%roll m*%7?)0$4#%%E%&/home/pepe/db/? am>ls>22&F%%%A% !p5// !p.sanger.ac.,k/p,b/da!abases/? am/c,rren!>release m*%;genomes%E%DU0rabidopsis.!haliana. aaU6U?h*scomi!rella.pa!ens>pa!ens. aaU6%A%... %%%%%%%%%%%%%%%6U/orgh,m.bicolor. aaUHF oreach%m*%7genome%D;genomesH I %%%m*%7o,! ile%E%7genome.&.p am&F %%%m*%7?#/o,! ile%E%7o,! ile%.%&.pbso,!&F%A%keep%r,n-!ime%errors%and%warnings%in%1% ile%/%Lob %%%m*%79s,bcommand%E%&%-cwd%-@%n7genome%-L%*%-o%7?#/o,! ile%-/%/bin/bash&F %%%m*%79?34%E%V79s,b-T-%79s,bcommand%GG-O) %%%7?)0$-T-%7?)0$4#%7genome%W%7o,! ile %%%-O)VF %%%prin!%&79?34Jn&F 8

!e&ras o t'reads
3tra posi+ilidad de sacar partido a los recursos de un cluster es apro!ec&ar los procesadores de sus nodos, *ue &a+itualmente son multiDn(cleo "multiDcore#- Este tipo de procesadores se pueden programar para resol!er !arias tareas en paralelo creando &e+ras o t&reads- 1a principal !enta5a de repartir un tra+a5o en &e+ras es ganar capacidad de procesamiento, pero si el tra+a5o a realizar necesita acceder de manera intensa al disco duro entonces di,erentes &e+ras en el mismo nodo compiten entre si, pudiendo e!aporarse el terico +ene,icio de &acerlo en paralelo- 0recisamente para este tipo de tra+a5os es pre,eri+le usar di,erentes nodos desde el mane5ador del cluster-

Este tipo de programacin puede ser comple5a, y re*uiere de ciertos conocimientos so+re la implementacin de las &e+ras en cada lengua5e, *ue puede di,erir +astanteEn lengua5e C &ay !arias implementaciones, pero posi+lemente las m)s est)ndar sean las 03SII pt&reads, de las *ue &ay a+undantes tutoriales en la Red, como %ste del 1a2rence 1i!ermore Eational 1a+oratory o %ste del 4ICEn 0erl la implementacin !igente son las interpreter t&reads "it&reads#, *ue ,orman parte del core de 0erl y por tanto est)n +ien documentadas, como los mdulos t&reads y t&reads>>s&ared- En el terminal puedes acceder a la documentacin de tu sistema con 7%perldoc%!hreadsEo &a sido %sta la cara m)s +rillante de la &istoria de 0erl, puesto *ue se &an pro+ado di,erentes implementaciones anteriormente, ya a+andonadas, y las actuales it&reads tienen pro+lemas de gestin de memoria en algunas !ersiones de 0erl so+re 1inux "no en Findo2s#- Ja *ue estos pro+lemas se &an resuelto desde la !ersin B-96-K parece *ue podremos programar it&reads con ciertas garant'as de continuidad- El siguiente e5emplo de it&reads, modi,icado de otro del curso 0erl en +ioin,orm)tica, muestra cmo coordinar y compartir datos entre &e+ras en el perl B-@-@ de Roc$s B-;, +astante m)s limitado *ue !ersiones posteriores>
AC/,sr/bin/perl%-w A%!es!ed%in%'ocks%5.(%wi!h%perl%5.8.8 ,se%s!ric!F ,se%!hreadsF ,se%!hreads55sharedF% m*%7$0T1+'-04/%E%(F m*%7/-X)3Y-%%%%E%Upro!ein>se9,ence>complexes. aaUF% A%descargado%con%wge!%-c% h!!p5// lores!a.eead.csic.es/3d oo!prin!/download/pro!ein>se9,ence>complexes. aa m*%D;hebras67sec,encia67hHF m*%;sec,encias%5%shared%E%DHF%A%da!os%compar!idos%en!re%hebras m*%D7!o!al6S rec,encias>globalesH%E%D0HF AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA A%1H%lee%archivo%de%sec,encias%*%agregalas%a%,n%arreglo openD/-X67/-X)3Y-H%ZZ%die%&A%70%5%canno!%read%7/-X)3Y-Jn&F whileDG/-XWH I %%%nex!%i D/[A/%ZZ%/[W/HF %%%p,shD;sec,encias6Dspli!H:0=HF 8 closeD/-XHF A%1H%ins!ancia%7$0T1+'-04/%n,evas%hebras%9,e%se%ponen%a%procesar%las%sec,encias or%7h%D1%..%7$0T1+'-04/H I% %%%prin!%&A%lan.o%hebra%7hJn&F %%%p,shD;hebras6%!hreads-Wcrea!eDJ\calc,la> rec,encias67hHHF% 8 A%2H%espera%a%9,e%acaben%las%hebras%*%recoge%s,s%res,l!ados% or%7h%D;hebrasH I %%%m*%7re >res,l!s%E%7h-WLoinDHF %%% oreach%m*%7aa%Dke*sDS7re >res,l!sHH %%%I %%%%%%nex!%i DC7re >res,l!s-WI7aa8HF %%%%%%7 rec,encias>globalesI7aa8%+E%7re >res,l!s-WI7aa8F %%%%%%7!o!al%+E%7re >res,l!s-WI7aa8F %%%8

8 prin!%&A%!o!al%aminoacids%E%7!o!alJn&F

s,b%calc,la> rec,encias I %%%m*%D7hebraH%E%;>F %%%m*%D7sec,encia67h!o!al6S rec,enciasH%E%DUU60HF %%%whileD1H %%%I %%%%%%I% %%%%%%%%%A%acceso%excl,sivo%a%lis!a%compar!ida%;sec,encias% %%%%%%%%%lockD;sec,enciasHF %%%%%%%%%7sec,encia%E%popD;sec,enciasHF %%%%%%8 %%%%%%i D7sec,enciaH%A%9,edan%sec,encias %%%%%%I %%%%%%%%%whileD7sec,encia%E<%/D:0-P=H/gH %%%%%%%%%I %%%%%%%%%%%%7 rec,enciasI718++F %%%%%%%%%%%%7h!o!al++F %%%%%%%%%8 %%%%%%8 %%%%%%else %%%%%%I %%%%%%%%%prin!%&A%hebra%7hebra%!ermina%D!o!alE7h!o!alHJn&F %%%%%%%%%re!,rn%JS rec,enciasF% %%%%%%8 %%%8% 8

Si lo e5ecutas en el terminal o+tienes di,erentes parciales en cada &e+ra>


:pepe;cl,s!er%<=7%perl%!es!hreads.pl% A%lan.o%hebra%1 A%lan.o%hebra%2 A%lan.o%hebra%3 A%lan.o%hebra%( A%hebra%1%!ermina%D!o!alE93622H A%hebra%2%!ermina%D!o!alE2M5M3H A%hebra%3%!ermina%D!o!alE12582H A%hebra%(%!ermina%D!o!alE2393H A%!o!al%aminoacids%E%1361M0

MPI
1a manera m)s so,isticada para &a+lar entre procesos, y &acer *ue unos esperen a otros si es necesario, es posi+lemente a tra!%s del protocolo de comunicacin 40I " $essage #assing %nterface #, *ue sir!e para programar tareas en paralelo y permitir *ue di,erentes procesadores se comuni*uen por medio de mensa5es- Este tipo de comunicacin es adecuado para coordinar tra+a5os *ue corren en paralelo en !arios procesadores, aun*ue sea en di,erentes nodos, como ocurre normalmente en un cluster Roc$s3riginalmente el protocolo 40I se cre en lengua5e F3RCRAE, pero posteriormente se &a implementado "!arias !eces# en lengua5e C "1A4/40I, 40IC/, open40I#- 0recisamente el roll &pc de Roc$s incluye open$?3 y podemos instalarlo "como superusuario# ya sea durante la instalacin del ron!end "!er ?-9-9# o en un cluster ya instalado- En el segundo caso es necesario descargar la imagen IS3 de &pc, por

e5emplo mediante el comando 7%wge!%-c%h!!p5//mirror1.k,.ac.!h/rocks/rocks5.(/lin,x/hpc-5.(-0.i386.disk1.iso para luego instalarlo mediante las siguientes instrucciones en el terminal>
rocks%add%roll%hpc rocks%enable%roll%hpc cd%/expor!/rocks/ins!all/ rocks%crea!e%dis!ro rocks%r,n%roll%hpc%Z%bash ini!%6 rocks%r,n%hos!%comp,!e%/boo!/kicks!ar!/cl,s!er-kicks!ar!-pxe

MPI desde C
El est)ndar 40I a+arca m)s de cien su+rutinas, accesi+les poniendo Aincl,de%Gmpi.hW en nuestro cdigo, aun*ue solamente unas pocas son esenciales- 40I declara tipos de datos e*ui!alentes a los preexistentes en C, como $?3>)YO016%$?3>4OR#Y-6%$?3>3@1, *ue se pueden intercam+iar entre procesos, pero tam+i%n permite de,inir tipos dise ados por el usuario.n concepto importante es el de comunicador, una coleccin de procesadores *ue tra+a5an so+re un tra+a5o en paralelo, numerados de ? a ED9 y guardados en la !aria+le glo+al $?3>2O$$>]O'Y4<eamos esto con un par de e5emplos>
Aincl,de%Gs!dio.hW Aincl,de%Gs!dlib.hW Aincl,de%Gmpi.hW % /^%?rograma%Uhola%m,ndoU%donde%cada%procesador%re9,erido%se%iden!i ica6 basado%en%eLemplos%orginales%de%1im%Qaiser%Dh!!p5//www.sdsc.ed,/<!kaiserH6 del%/an%4iego%/,percomp,!er%2en!er6%en%2ali ornia%^/ in!%mainDin!%argc6%char%^^argvH I %%%%in!%m*id6%n,mprocsF %%%%)3Y-%^archF % %%%%$?3>3ni!D\argc6\argvHF %%%%$?3>2omm>si.eD%$?3>2O$$>]O'Y46%\n,mprocs%HF%//%dev,elve%el%n,mero%de%procesos%en% es!e%2O$$>]O'Y4 %%%%$?3>2omm>rankD%$?3>2O$$>]O'Y46%\m*id%HF%%%%%//%iden!i ica!e%por%el%m*id%asignado% % %%%%prin! D&/o*%el%procesador%Sd%de%,n%!o!al%de%SdJn&6m*id6n,mprocsHF %%%% %%%%i Dm*id%EE%1H%//%solamen!e%para%el%procesador%1 %%%%I %%%%%%%//%aL,s!a%la%r,!a%del%archivo%si%es%necesario% %%%%%%%archE openD&/home/pepe/archivo.!x!&6&w&HF %%%%%%% prin! Darch6&+ola6%so*%el%procesador%1Jn&HF %%%%%%% closeDarchHF %%%%8 %%%%%%%% %%%%$?3>)inali.eDHF %%%%%%%% %%%%re!,rn%0F 8

Este cdigo lo guardamos en un ,ic&ero "por e5emplo /home/pepe/!es!$?3.c# y se compila con el siguiente comando> 7%mpicc%!es!$?3.c%-o%!es!$?3.exe En el contexto de un cluster Roc$s &a+itualmente *ueremos distri+uir las tareas entre di,erentes nodos, por e5emplo entre los ; procesadores o n(cleos de los nodos computeD?D? y computeD?D9- Eso lo

indicamos creando un ,ic&ero de texto con el siguiente contenido, *ue podemos llamar /home/pepe/lis!anodos.!x!>
comp,!e-0-0 comp,!e-0-0 comp,!e-0-1 comp,!e-0-1

0ara e5ecutar el programa en estas ; C0.s tecleamos en el terminal>


7%mpir,n%-np%(%-machine ile%lis!anodos.!x!%!es!$?3.exe

El siguiente e5emplo muestra como se pueden para mensa5es de un proceso a otros>


/^%!omado%de%h!!p5//en.wikipedia.org/wiki/$essage>?assing>3n!er ace%^/ Aincl,de%Gmpi.hW Aincl,de%Gs!dio.hW Aincl,de%Gs!ring.hW Ade ine%#R)/3P-%128 Ade ine%10B%0 in!%mainDin!%argc6%char%^argv:=H I %%char%ids!r:32=F %%char%b, :#R)/3P-=F %%in!%n,mprocsF %%in!%m*idF %%in!%iF %%$?3>/!a!,s%s!a!F %%$?3>3ni!D\argc6\argvHF% %%$?3>2omm>si.eD$?3>2O$$>]O'Y46\n,mprocsHF% %%$?3>2omm>rankD$?3>2O$$>]O'Y46\m*idHF% %%i Dm*id%EE%0H %%I %%%%%%%%prin! D&Sd5%]e%have%Sd%processorsJn&6%m*id6%n,mprocsHF %%%%%%%% orDiE1FiGn,mprocsFi++H %%%%%%%%I %%%%%%%%%%sprin! Db, 6%&+ello%SdC%&6%iHF %%%%%%%%%%$?3>/endDb, 6%#R)/3P-6%$?3>2+0'6%i6%10B6%$?3>2O$$>]O'Y4HF %%%%%%%%8 %%%%%%%% orDiE1FiGn,mprocsFi++H %%%%%%%%I %%%%%%%%%%$?3>'ecvDb, 6%#R)/3P-6%$?3>2+0'6%i6%10B6%$?3>2O$$>]O'Y46%\s!a!HF %%%%%%%%%%prin! D&Sd5%SsJn&6%m*id6%b, HF %%%%%%%%8 %%8 %%else %%I %%%%%%%%/^%receive% rom%rank%05%^/ %%%%%%%%$?3>'ecvDb, 6%#R)/3P-6%$?3>2+0'6%06%10B6%$?3>2O$$>]O'Y46%\s!a!HF %%%%%%%%sprin! Dids!r6%&?rocessor%Sd%&6%m*idHF %%%%%%%%s!rnca!Db, 6%ids!r6%#R)/3P--1HF %%%%%%%%s!rnca!Db, 6%&repor!ing% or%d,!*Jn&6%#R)/3P--1HF %%%%%%%%/^%send%!o%rank%05%^/ %%%%%%%%$?3>/endDb, 6%#R)/3P-6%$?3>2+0'6%06%10B6%$?3>2O$$>]O'Y4HF %%8 %%$?3>)inali.eDHF% %%re!,rn%0F 8

Es posi+le usar 40I desde un programa en C para repartir tareas como en el e5emplo de perl ?-7-9, como se !e en el siguiente documento de Cim Laiser40I tam+i%n sir!e para coordinar procesos de escritura en paralelo, como se explica en este 0DF de Cim Laiser-

(i&rer)as espec)ficas de c$lculo en C


En este apartado menciono algunos recursos, normalmente li+rer'as o +i+liotecas de ,unciones, *ue podemos usar para programas *ue re*uieren de c)lculos intensi!os N&meros aleatorios escalables .n recurso muy utilizado son los n(meros aleatorios, ya sea para algoritmos estoc)sticos o para optimizaciones tipo 4onte Carlo- 1a li+rer'a S0RE: incluye H generadores distintos, con todas las propiedades desea+les "periodo largo, &omog%neos, repeti+les, entre otras#, con la particularidad de *ue ,unciona +ien en uno o m)s procesadores "!'a 40I# *ue resuel!en alg(n pro+lema 'ibrer(as algebraicas 1as li+rer'as 1A0ACL y su !ersin escala+le Sca1A0ACL son muy utilizadas en ingenier'a y en ciencias- /ay e5emplos de uso en &ttp>//see&u&n-de/pages/linear-

MPI desde Perl


:racias a la inter,az entre 0erl y C es posi+le utilizar el est)ndar 40I desde programas escritos en 0erl, usando el mdulo 0arallel>>40I>>Simple- Sin em+argo, la instalacin "como superusuario# con 7%cpan% -i%?arallel55$?355/imple no siempre es tri!ial- 0ara lograrlo en Roc$s B-;, el sistema operati!o *ue se emplea en este material, es preciso in!ocar 7%cpan%-i%?arallel55$?355/imple como root, para luego cam+iar al directorio /roo!/.cpan/b,ild/?arallel-$?3-/imple-0.05 y editar el $ake ile, donde es necesario sustituir las apariciones de gcc por mpicc, para ya luego &acer 7%makeF%make%!es! y 7%make%ins!allComo e5emplo de uso de esta inter,az os de5o este programita, *ue permite compartir entre procesos estructuras de datos comple5as, *ue se pasan como re,erencias>
AC/,sr/bin/perl%-w ,se%s!ric!F ,se%?arallel55$?355/impleF $?3>3ni!DHF m*%7process>rank%%%E%$?3>2omm>rankD$?3>2O$$>]O'Y4HF%A% rom%0%!o%@-1% m*%7n>o >processes%E%$?3>2omm>si.eD$?3>2O$$>]O'Y4HF m*%7!ag%E%113MF%%%%%%A%arbi!rar*%!ag% or%!his%message% i D7process>rank%EE%0H% I %%%%m*%Sda!a%E%DU!ex!UEWUhola6%es!as%ahi_U6Ucon!en!UEWUso*%el%proceso%0UHF %%%%prin! D&?roceso%Sd%emi!e%a%Sd%procesoDsHJn&67process>rank67n>o >processes-1HF %%%% orDm*%7pE1F7pG7n>o >processesF7p++H %%%%I %%%%%%%$?3>/endDJSda!a6%7p6%7!ag6%$?3>2O$$>]O'Y4%HF %%%%8

8% else% I %%%%m*%7re >da!os%E%$?3>'ecvD%06%7!ag6%$?3>2O$$>]O'Y4%HF%A%0%es%la%iden!idad%del% emisor%esperado %%%%prin! D&?roceso%Sd%recibe%de%05%SsJn&67process>rank67re >da!os-WIU!ex!U8HF 8 $?3>)inali.eDHF

Al e5ecutar el programa en el terminal se o+tiene>


:roo!;cl,s!er%<=A%mpir,n%-np%(%!es!$?3.pl% ?roceso%0%emi!e%a%3%procesoDsH ?roceso%1%recibe%de%05%hola6%es!as%ahi_ ?roceso%3%recibe%de%05%hola6%es!as%ahi_ ?roceso%2%recibe%de%05%hola6%es!as%ahi_

Al igual *ue con 0erl, &ay disponi+les inter,aces para usar 40I desde otros lengua5es de alto ni!el, como por e5emplo 0yt&on -

*o&re este documento+++


Programacin en clusters Rocks C&is document 2as generated using t&e (a,e-7+1$Y translator <ersion 7??@ "9-M9# Copyrig&t N 9KK6, 9KK;, 9KKB, 9KKH, Ei$os Dra$os, Computer =ased 1earning .nit, .ni!ersity o, 1eedsCopyrig&t N 9KKM, 9KK@, 9KKK, Ross 4oore, 4at&ematics Department, 4ac*uarie .ni!ersity, SydneyC&e command line arguments 2ere> late. 'tml in!ensiva%-dir%programacion>rocks1%-spli!%0%-no>naviga!ion C&e translation 2as initiated +y =runo Contreras 4oreira on 7?99D?HD9M runo Contreras)$oreira http://www.eead.csic.es/compbio

También podría gustarte