<< Chapter < Page Chapter >> Page >

Si es necesario, se recogen de procesadores remotos todos los datos necesarios para realizar el cálculo. Si el programador hace una descomposición y alineación inteligentes, muchos de los datos requeridos estarán en la memoria local, en vez de en una memoria remota. El compilador HPF también es responsable de asignar cualquier estructura de datos temporal necesaria para soportar las comunicaciones a tiempo de ejecución.

En general, el compilador HPF no es mágico -simplemente hace un muy buen trabajo con los detalles de comunicación cuando el programador es capaz de diseñar una buena descomposición de datos. Al mismo tiempo, retiene la transportabilidad con máquinas de una sola CPU y sistemas de memoria uniforme compartida usando FORTRAN 90.

Directivas hpf de disposición de datos

Tal vez las contribuciones más importantes de HPF sean las directivas de disposición de datos. Usándolas, el programador puede controlar cómo se acomodan los datos, basándose en su conocimiento acerca de las interacciones entre datos. Una directiva de ejemplo es la que sigue:


REAL*4 ROD(10) !HPF$ DISTRIBUTE ROD(BLOCK)

El prefijo !HPF$ es visto como un comentario por cualquier compilador que no sea HPF, de forma que un compilador FORTRAN 90 común pueda ignorarla de forma segura. La directiva DISTRIBUTE indica que el arreglo ROD debe distribuirse entre múltiples procesadores. Si no se usase dicha directiva, el arreglo ROD se ubicaría en un procesador y se le comunicaría a los otros procesos conforme se necesitara. Existen varios esquemas de distribución que pueden hacerse en cada dimensión:


REAL*4 BOB(100,100,100),RICH(100,100,100) !HPF$ DISTRIBUTE BOB(BLOCK,CYCLIC,*)!HPF$ DISTRIBUTE RICH(CYCLIC(10))

Estas distribuciones operan como sigue:

  • BLOCK El arreglo se distribuye a lo largo de los procesadores usando bloques contiguos del valor del índice. Los bloques se hacen tan grandes como sea posible.
  • CYCLIC El arreglo se distribuye a lo largo de los procesadores, mapeando cada elemento sucesivo al "siguiente" procesador, y cuando se llega al último procesador, la ubicación comienza nuevamente en el primero.
  • CYCLIC(n) El arreglo se distribuye del mismo modo que en CYCLIC excepto que se colocan n elementos sucesivos en cada procesador antes de pasarse al siguiente.
Todos los elementos en esta dimensión se colocan en el mismo procesador. Esto es mayormente útil para arreglos multidimensionales.

Distribuyendo los elementos del arreglo entre procesadores

Esta figura muestra tres retículas de cajas numeradas, con tres línes de código sobre cada una.

La [link] muestra cómo se mapean los elementos de un arreglo sencillo entre tres procesadores con diferentes directivas.

Deben ubicarse cuatro elementos en los Procesadores 1 y 2 porque no hay un Procesador 4 disponible para el elemento más a la izquierda si se ubican tres elementos en los Procesadores 1 y 2. En [link] , los elementos se ubican en procesadores sucesivos, regresando al Procesador 1 tras el último procesador. En [link] , usar un tamaño de bocado de CYCLIC es un compromiso entre BLOCK puro y CYCLIC puro.

Para explorar el uso de * , debemos observar un simple arreglo bidimensional mapeado entre cuatro procesadores. En [link] , mostramos la distribución del arreglo y cada celda indica cuál procesador almacenará el dato para dicha celda en un arreglo bidimensional. En [link] , la directiva lo descompone en ambas dimensiones simultáneamente. Este enfoque resulta en unos parches aproximadamente cuadrados en el arreglo. Sin embargo, puede que no sea el mejor enfoque. En el siguiente ejemplo, usamos el * para indicar que queremos que todos los elementos de una columna particular sean ubicados sobre le mismo procesador. Así, los valores de columna distribuyen equitativamente las columnas entre los procesadores. Entonces, todos los renglones en cada columna siguen donde ha sido colocada la columna. Ello permite un salto unitario para las porciones ubicadas adentro de los procesadores, y resulta benéfico en algunas aplicaciones. La sintaxis de * también se conoce como distribución sobre el procesador .

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