<< Chapter < Page Chapter >> Page >

Si lo observa detenidamente, verá que la salida es la misma que la de la implementación rojo-negro. Ello se debe a que en FORTRAN 90:


ROD(2:9) = (ROD(1:8) + ROD(3:10) ) / 2

es una única sentencia de asignación. Como se muestra en [link] , la parte derecha se evalúa completamente antes de que la sección del arreglo resultante se le asigne a ROD(2:9) . A primera vista puede parecer poco natural, pero considere la siguiente sentencia:


I = I + 1

Sabemos que si I comienza en 5, esta sentencia incrementará su valor a 6. Ello sucede porque el lado derecho (5+1) se evalúa antes de ejecutar la asignación del 6 a I . En FORTRAN 90, una variable puede ser un arreglo completo. Así que ésta is una operación rojo-negro. ¡Hay un ROD "antiguo" en la parte derecha, y un ROD "nuevo" en la parte izquierda!

Para realmente "pensar" al estilo FORTRAN 90, es bueno suponer que está usted usando un sistema SIMD con millones de pequeñas CPUs. Primero alineamos cuidadosamente los datos, deslizándolos alrededor, y entonces... ¡zas! en una sola instrucción, sumamos todos los valores alineados en un solo instante. [link] muestra gráficamente este acto de "alinear" los valores y luego sumarlos. El grafo de flujo de datos es extremadamente simple. Los dos renglones superiores son de sólo lectura, y los datos fluyen de arriba hacia abajo. Usar el espacio temporal elimina la dependencia aparente. Este enfoque de "pensar SIMD" es una de dos formas posibles de obligarnos a enfocar nuestro pensamiento en los datos, en vez de en el control. Puede que la SIMD no sea una buena arquitectura para nuestro problema, pero si es capaz de expresarlo de forma tal que pueda trabajarse en SIMD, un buen ambiente SPMD puede tomar ventaja del paralelismo a nivel de datos que usted ha identificado.

El ejemplo siguiente pone de manifiesto uno de los retos que aparecen al producir una implementación eficiente de FORTRAN 90. Si estos arreglos contienen 10 millones de elementos, y el compilador usa un enfoque simple, necesitará 30 millones de elementos para los valores "izquierdos" viejos, los valores "derechos" viejos y para los nuevos. Se requiere optimizar el flujo de datos sólo para determinar para determinar cuántos datos extras deben mantenerse para obtener los resultados apropiados. Si el compilador es inteligente, la memoria extra puede ser muy poca:

Alineación de datos y cálculos

esta figura muestra cuatro renglones de cajas conectadas. El primer renglón está etiquetado como Valores Izquierdos, y sus cajas numeradas de la 1 a la 10, con la 9 y la 10 sombreadas. A la derecha del renglón está la etiqueta ROD (1:8). Bajo este renglón está la etiqueta SUMAR. El segundo renglón está etiquetado Valores Derechos, y está numerado del 1 al 10, con la 1 y la 2 sombreadas. A la derecha del renglón está la etiqueta ROD (3:10). Bajo este renglón aparece la etiqueta Dividir la Suma entre 2. El tercer renglón está etiquetado Espacio Temporal, y sus cajas numeradas de la 1 a la 8. Bajo las cajas 1, 2, 7 y 8 hay flechas apuntando al cuarto renglón. Bajo el tercer renglón aparece la etiqueta Y la Asignación THEN. El cuarto renglón está etiquetado Resultados, y numerado del 1 al 10, con las cajas 1 a la 10 sombreadas. A la derecha del renglón está la etiqueta ROD (2:9)

SAVE1 = ROD(1) DO I=2,9SAVE2 = ROD(I) ROD(I) = (SAVE1 + ROD(I+1) ) / 2SAVE1 = SAVE2 ENDDO

Si bien esta implementación no tiene el paralelismo de una implementación rojo-negro completa, produce los resultados correctos con sólo dos elementos de datos extras. El truco consiste en guardar el valor "izquierdo" viejo justo antes de borrarlo. Un buen compilador de FORTRAN 90 usa análisis de flujo de datos, en busca de una plantilla sobre cómo se mueven los cálculos a lo largo de los datos para ver si puede guardar unos pocos elementos durante un corto periodo de tiempo, para aliviar la necesidad de una copia extra completa de los datos.

La ventaja del lenguaje FORTRAN 90 es que depende del compilador si usa una copia completa del arreglo, o unos pocos elementos de datos para asegurar que el programa se ejecute apropiadamente. Y lo que es más importante, puede cambiar su enfoque conforme cambia de una arquitectura a otra.

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