16.04.2014 Views

Administración avanzada de GNU/Linux (PDF) - SW Computación

Administración avanzada de GNU/Linux (PDF) - SW Computación

Administración avanzada de GNU/Linux (PDF) - SW Computación

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

Administración <strong>avanzada</strong> <strong>de</strong> <strong>GNU</strong>/<strong>Linux</strong><br />

ª FUOC • XP04/90785/00019<br />

Ejemplo <strong>de</strong> PVM: cliente.c<br />

Para compilar:<br />

gcc -O -I/usr/share/pvm3/inclu<strong>de</strong>/ -L/usr/share/pvm3/lib/LINUX<br />

-o cliente cliente.c -lpvm3<br />

#inclu<strong>de</strong> <br />

#inclu<strong>de</strong> “pvm3.h”<br />

main() {<br />

int mytid;/*Mi task id*/<br />

int tids[20];/*Task ids*/<br />

int n, me, i, nproc, master, msgtype, loops; float data[10];<br />

long result[4]; float work();<br />

mytid = pvm_mytid();<br />

msgtype = 0;<br />

pvm_recv( -1, msgtype );<br />

pvm_upkint(&loops, 1, 1);<br />

pvm_upkint(&nproc, 1, 1);<br />

pvm_upkint(tids, nproc, 1);<br />

pvm_upkint(&n, 1, 1);<br />

pvm_upkfloat(data, n, 1);<br />

/*Determina qué hijo es (0 –- nproc-1) */<br />

for( i = 0; i < nproc ; i++ )<br />

if( mytid == tids[i] ){ me = i; break; }<br />

/*Procesa y pasa los datos entre vecinos*/<br />

work( me, data, tids, nproc, loops );<br />

}<br />

/*Envía los datos al máster */<br />

pvm_initsend( PvmDataDefault );<br />

pvm_pkint( &me, 1, 1 );<br />

msgtype = 5;<br />

master = pvm_parent(); /*Averigua quién lo creó*/<br />

pvm_send( master, msgtype);<br />

pvm_exit();<br />

float work(me, data, tids, nproc, loops)<br />

int me, *tids, nproc; float *data; {<br />

int i,j, <strong>de</strong>st; float psum = 0.0, sum = 0.1;<br />

for (j = 1; j

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!