<< Chapter < Page Chapter >> Page >

Cuando se ejecuta el programa maestro, produce la siguiente salida:


% pheat Gracias a 262204 2*0=0Gracias a 262205 2*1=2 Gracias a 262206 2*2=4Gracias a 262207 2*3=6 Gracias a 262204 2*5=10Gracias a 262205 2*6=12 Gracias a 262206 2*7=14Gracias a 262207 2*8=16 Gracias a 262204 2*9=18Gracias a 262205 2*10=20 Gracias a 262206 2*11=22Gracias a 262207 2*12=24 Gracias a 262205 2*14=28Gracias a 262207 2*16=32 Gracias a 262205 2*17=34Gracias a 262207 2*18=36 Gracias a 262204 2*13=26Gracias a 262205 2*19=38 Gracias a 262206 2*15=30Gracias a 262208 2*4=8 %

Claramente los procesos están operando en paralelo, y el orden de ejecución es en cierta forma eleatorio. Este código es un excelente esqueleto para manejar una amplia variedad de cómputos. En el siguiente ejemplo, realizaremos un cómputo estilo SPMD para resolver el problema del flujo de calor usando PVM.

Flujo de calor en pvm

El siguiente ejemplo es una aplicación mucho más complicada, que implementa el problema del flujo de calor en PVM. De muchos modos, nos da una vsión del trabajo que realiza el ambiente HPF. Resolveremos un flujo de calor en una placa bidimensional con dos fuentes de calor y los bordes inmersos en agua a cero grados, como se muestra en [link] .

Una placa bidimensional con cuatro fuentes constantes de calor

Este figura muestra una caja acostada, delineada mediante ceros en el exterior. Dentro de la misma hay cuatro círculos, etiquetados 10.0 en superior izquierda, -20.0 el superior derecho, y 20.0 los dos inferiores.

Los datos se repartirán entre todos los procesos usando una distribución ( * , BLOCK ). Las columnas se distribuyen entre procesos en bloques contiguos, y todos los elementos de los renglones en una columna se almacenan en el mismo proceso. Como con HPF, el proceso que "posee" una celda de datos realiza los cálculos para esa celda tras recibir cualquier dato necesario para realizar el cálculo.

Usamos un enfoque rojo-negro, pero por simplicidad copiamos los datos de vuelta al final de cada iteración. Para que verdaderamente fuera rojo-negro, debe usted realizar un cálculo en la dirección opuesta cada nuevo paso.

Note que en vez de engendrar procesos esclavos, el proceso padre engendra copias adicionales de sí mismo. Esto es típico de los programas estilo SPMD. Una vez engendrados tales procesos adicionales, todos los procesos esperan en una barrera antes de observar los números de proceso de los miembros del grupo. Una vez que los procesos han llegado a la barrera, todos ellos recuprean una lista de los distintos números de proceso:


% cat pheat.f PROGRAM PHEATINCLUDE ’../include/fpvm3.h’ INTEGER NPROC,ROWS,COLS,TOTCOLS,OFFSETPARAMETER(NPROC=4,MAXTIME=200) PARAMETER(ROWS=200,TOTCOLS=200)PARAMETER(COLS=(TOTCOLS/NPROC)+3) REAL*8 RED(0:ROWS+1,0:COLS+1), BLACK(0:ROWS+1,0:COLS+1)LOGICAL IAMFIRST,IAMLAST INTEGER INUM,INFO,TIDS(0:NPROC-1),IERRINTEGER I,R,C INTEGER TICK,MAXTIMECHARACTER*30 FNAME* Obtener como va la cosa SPMD - Unirse al grupo pheat CALL PVMFJOINGROUP(’pheat’, INUM)* Si somos los primeros en el grupo pheat, creamos algunos ayudantesIF ( INUM.EQ.0 ) THEN DO I=1,NPROC-1CALL PVMFSPAWN(’pheat’, 0, ’anywhere’, 1, TIDS(I), IERR) ENDDOENDIF* Barrera para asegurarnos que todos estamos en este punto, y así poder buscarnos CALL PVMFBARRIER( ’pheat’, NPROC, INFO )* Encontrar a mis camaradas y obtener sus TIDs - Los TIDS son necesarios para los envíosDO I=0,NPROC-1 CALL PVMFGETTID(’pheat’, I, TIDS(I))ENDDO

Get Jobilize Job Search Mobile App in your pocket Now!

Get it on Google Play Download on the App Store Now




Source:  OpenStax, Cómputo de alto rendimiento. OpenStax CNX. Sep 02, 2011 Download for free at http://cnx.org/content/col11356/1.2
Google Play and the Google Play logo are trademarks of Google Inc.

Notification Switch

Would you like to follow the 'Cómputo de alto rendimiento' conversation and receive update notifications?

Ask