<< Chapter < Page | Chapter >> Page > |
Cuando lidie con más de una estructura de datos para realizar un cálculo, puede bien sea distribuirlas separadamente , o bien usar la directiva
ALIGN
para asegurarse de que los elementos correspondientes de ambas estructuras estén alojados juntos. En el siguiente ejemplo, tenemos un arreglo de placa y un factor de escala que debemos aplicar a cada columna de la placa durante el cálculo:
DIMENSION PLATE(200,200),SCALE(200)
!HPF$ DISTRIBUTE PLATE(*,BLOCK)!HPF$ ALIGN SCALE(I) WITH PLATE(J,I)
O bien:
DIMENSION PLATE(200,200),SCALE(200)
!HPF$ DISTRIBUTE PLATE(*,BLOCK)!HPF$ ALIGN SCALE(:) WITH PLATE(*,:)
En ambos ejemplos, las variables
PLATE
y
SCALE
están ubicadas en los mismos procesadores que las columnas correspondientes de
PLATE
. La sintaxis
*
y
:
comunican la misma información. Cuando se usa
*
, esa dimensión se colapsa y no participa en la distribución. Cuando se usa
:
, significa que la esa dimensión sigue a la dimensión correspondiente en la variable que ya ha sido distribuida.
También puede usted especificar el acomodo de la variable
SCALE
y hacer que la variable
PLATE
"siga" la distribución de la variable
SCALE
:
DIMENSION PLATE(200,200),SCALE(200)
!HPF$ DISTRIBUTE SCALE(BLOCK)!HPF$ ALIGN PLATE(J,I) WITH SCALE(I)
Puede agregar expresiones aritméticas simples en la directiva
ALIGN
, sujetas a ciertas limitaciones. Las otras directivas incluyen:
PROCESSORS
Le permite crear una forma de configuración de los procesos que pueda usarse para alinear otras estructuras de datos.REDISTRIBUTE y REALIGN
Le permite cambiar dinámicamente la forma de las estructuras de datos a tiempo de ejecución, conforme cambian los patrones de comunicación durante el curso de la misma.TEMPLATE
Le permite crear un arreglo que no usa espacio. En vez de distribuir una estructura de datos y alinear todas las demás, algunos usuarios crearán y distribuirán una plantilla y luego alinearán todas las estructuras de datos reales de acuerdo a esa plantilla.El uso de directivas puede fluctuar desde lo muy simple a lo muy complejo. En algunas situaciones, usted distribuirá la única estructura grande compartida, alineando unas pocas estructuras relacionadas y habrá terminado. En otras, los programadores intentan optimizar las comunicaciones basándose en la topología de la red de interconexión (hypercubo, red de interconexión multietapa, malla o toroide) usando directivas muy detalladas. También pueden redistribuir cuidadosamente los datos durante las varias fases del cómputo.
Con suerte, su aplicación logrará un buen rendimiento sin demasiado esfuerzo.
Mientras los diseñadores de HPF estaban enmedio de definir un nuevo lenguaje, se dieron a la tarea de mejorar aquello que habían visto como una limitación de FORTRAN 90. Es interesante que tales modificaciones son las que se están considerando como parte del nuevo estándar de FORTRAN 95.
La sentencia
FORALL
permite al usuario expresar operaciones iterativas sencillas que se aplican al arreglo completo, sin descansar en un ciclo do-loop (recuerde, los ciclos do-loop fuerzan un orden). Por ejemplo:
Notification Switch
Would you like to follow the 'Cómputo de alto rendimiento' conversation and receive update notifications?