You are on page 1of 6

PROGRAMACIN PARALELA EN FORTRAN

1. INTRODUCCIN A LA PROGRAMACIN PARALELA


Uno de los propsitos principales de escribirun programa paralelo suele ser conseguir unmodelo computacional que permita estudiaralgn fenmeno de forma ms rpida. Se necesitan programas paralelos: a. b. c. d. Eficientes Escalables Porttiles Flexibles

A mediados de 1990s, los fabricantes desupercomputadoras determinaron que era msfcil y barato construir mquinas con muchosprocesadores en vez de construir procesadoresms potentes. A mediados de 2000s, los fabricantes deprocesadores determinaron que es ms eficienteusar procesadores con muchos cores en vez deconstruir procesadores ms rpidos. Prcticamente ya no se fabrican procesadores de unsolo core. Las supercomputadoras han pasado en estos 15aos de unos cuantos miles de procesadores ams de 100,000 cores. En servidores existen procesadores con 12 cores y seespera que este nmero se siga incrementando ao con Ao. Qu se puede hacer con tantos cores?Correr muchos programas distintos simultneamente. La cantidad de trabajo por unidad de tiempo aumenta High Throughput Computing Correr un solo programa usando todos los cores disponibles High Performance Computing Un programa paralelo significa hacer un programa que utiliza de forma coordinada ms de unelemento de procesamiento. Un programa paralelo reparte ese trabajo entre losvarios elementos de procesamiento que se pretende utilizar. Modelos de programacin paralela: Memoria compartida Memoria distribuida Hbrido compartida/distribuida Partitioned Global AddressSpace (PGAS) Paralelismo de datos (GPUs)

2. HIGH PERFORMANCE FORTRAN


Paradigma de Paralelismo de Datos. Modelo SPMD: cada procesador ejecuta el mismo programa asncronamente tanto en mquinas de memoria compartida como Distribuida.

Espacio de direcciones global: El programador ve una nica memoriase deja al compilador (con ayuda de las directivas) la tarea dedistribuir los datos, acceder a memoria, gestionar las comunicaciones, etc. Procesadores virtuales: son mapeados a losprocesadores fsicos. 3. PROGRAMACIN PARALELA EN HIGH PERFORMANCE FORTRAN Ejemplo:

Directivas de HPF: HPF es basado en directivas, paraevitar modificar el cdigo existente loms posible (similar a OpenMP, peroste es para sistemas de memoriacentralizada y HPF intenta ser tantopara centralizada como distribuida)Formato: !HPF$ <directiva> Tipos Directivas: a) b) c) d) e) f) PROCESSOR DISTRIBUTE ALING FORALL INDEPENDENT Funciones Intrnsecas NUMBER_OF_PROCESSORS() PROCESSORS_SHAPE()

a) Directivas de HPF: PROCESSOR Establece una malla lgica de procesadores. !HPF$ PROCESSOR, DIMENSION(4) :: P1 !HPF$ PROCESSOR, DIMENSION(2,2) :: P2 !HPF$ PROCESSOR, DIMENSION(2,1,2) :: P3

Por lo general, mapeouno-a-uno.

Las dimensiones sin especificar toman valor por defecto igual a 1. Permitiendo linealizar las dimensionesque se dejan sin indicar. b) Directivas de HPF: DISTRIBUTE Especifica la distribucin de los datos entre lasunidades de procesamiento. !HPF$ DISTRIBUTE (BLOCK) ONTO P1 :: A !HPF$ DISTRIBUTE (CYCLIC) ONTO P1 :: B !HPF$ DISTRIBUTE (CYCLIC,BLOCK) ONTO P2 :: B Variantes: BLOCK REAL, DIMENSION(16) :: A !HPF$ PROCESSOR, DIMENSION(4) :: P1 !HPF$ DISTRIBUTE (BLOCK) ONTO P1 :: A BLOCK + * REAL X(12,12) !HPF$ DISTRIBUTE X(BLOCK,*) BLOCK + BLOCK !HPF$ DISTRIBUTE Y(BLOCK,BLOCK)

CYCLYC REAL, DIMENSION(16) :: A !HPF$ PROCESSOR, DIMENSION(4) :: P1 !HPF$ DISTRIBUTE (CYCLYC) ONTO P1 :: A * + CYCLIC REAL X(12,12) !HPF$ DISTRIBUTE X(*,CYCLIC) CYCLIC + CYCLIC !HPF$ DISTRIBUTE Y(CYCLIC(2),CYCLIC(3))

c) Directivas de HPF: ALING Fuerza a los elementos de un vector o matriz aser alineados en la misma ubicacin que losde la plantilla. !HPF$ ALIGN array(lista-fuente) WITH target(lista-destino) !HPF$ ALIGN (lista-fuente) WITH target(lista-destino) ::array Crea una relacin entre el array y target demodo que para todos los valores dearray(lista-fuente) y target(lista-destino) sealmacenan en el mismo procesador. REAL X(6,6),Y(6,6),W(5),Z(3) !HPF$ ALIGN Y(i,j) WITH X(j,i) !HPF$ ALIGN W(k) WITH X(k,*) !HPF$ ALIGN Z(l) WITH Y(3,2*l-1)

d) Directivas de HPF: FORALL Diferenciar sentencias secuenciales desentencias paralelas. for secuencial!= sentencia paralela (FORALL) Conceptualmente, ejecuta cada entrada enparalelo.Para bucles sin dependencias. FORALL (i=2:n) A(i) = A(i-1) END FORALL e) Directivas de HPF: INDEPENDENT Vlida para bucles DO clsicos y paraconstrucciones FORALL.Determina que la porcin del programa puedaser ejecutada en un orden arbitrario. !HPF$ INDEPENDENT DO I = 1, 100 A(P(I)) = B(I) END DO

f)

Directivas de HPF: FuncionesIntrnsecas Obtener valores reales, especficos delhardware: NUMBER_OF_PROCESSORS() PROCESSORS_SHAPE() MAXLOC() + DIM MINLOC() + DIM

Compiladores: 2 componentes bsicas: (Traduce a paso de mensajes para memoriadistribuida) Fadapt: traduce de HPF a Fortran90. Dalib: se encarga del paralelismo. Multithread para memoria compartida. Multithreading (invoca a las rutinas de OpenMP)

You might also like