Utilización de la programación paralela en...

Post on 01-Oct-2018

224 views 0 download

Transcript of Utilización de la programación paralela en...

Utilización de la programación paralela en procesadores gráficos para el cálculo científico.

EMNO 2013

Rolando E. Rodríguez Fernández

Medicina Computacional, Instituto de Nefrología. y Facultad de Física, Universidad de la Habana.

rerodriguez@infomed.sld.cu

Medicina Computacional que cosa es eso ?

La Medicina Computacional es un campo de aplicaciones científicas, definido como la aplicación de las ciencias naturales y exactas a la medicina, utilizando como puente los modelos computacionales que han servido de manera clásica para explicar en la naturaleza y la sociedad, los fenómenos químicos, físicos, biológicos, matemáticos, psicológicos y hasta económicos y sociales. La Medicina Computacional utiliza a la Clínica y la Epidemiología como fundamentos esenciales para tener al paciente en la perspectiva directa de trabajo. La versión de la Bioinformática en el contexto médico …

J. Endocrinol. Aug 2012

La enfermedad renal poliquística una condición genética producida por el mal funcionamiento de un sistema de señales mediado de manera primaria por un canal de calcio

La enfermedad renal poliquística mecanismos involucrados Ca, cAMP, TSC2, MAP kinasas (regulación primaria por receptores de GABA y canales de Ca L P y Q)

EGFR inh

Simulación en la Membrana Celular Receptor de GABA, DM en solución salina isotónica [1 226 413 átomos]

Un problema grande Cálculo del movimiento y la energía en un sistema molecular (Dinámica molecular)

E total = E enlazante + E no-enlazante E enlazante = E enlace + E tangular + E tdihedrica E no-enlazante = E electrostatica + E van der Waals

Poisson’s Eq

Descomposición de dominio: Cada átomo se puede calcular por separado Descomposición funcional: Lista de átomos enlazados Interacciones enlazantes Energía vibracional Energía rotacional Lista de átomos vecinos Generación del enrejado Interacciones no enlazantes Potencial Electrostático Potencial de van der Waals Puentes de Hidrógeno Posición y velocidad Conservación de la Energía Parte no Paralela (serial): Cálculo de la energía total del sistema Temperatura y Volumen

Un problema grande Cálculo del movimiento y la energía en un sistema molecular (Dinámica molecular)

Superficie de interacción en el sitio activo del receptor

Topología de la interacción

Un problema Enorme La simulación del acoplamiento molecular buscando posibles ligandos

Enrejado para el cálculo de energía El experimento !!

(228 348 102 Compuestos)

Un problema Enorme La simulación del acoplamiento molecular buscando posibles ligandos

135

1193

143

Existe una demanda continua de potencia de cálculo en las computadoras siempre mayor que la que encontramos disponible. Desde el principio de la existencia de las computadoras hemos aprendido a dividir el problema en partes que deben ser ejecutadas en varios sistemas de computación y luego combinadas para obtener el resultado final. Esta estrategia se conoce como programación paralela o en paralelo. Gill (1958) “Parallel Programming”, The computer Journal, Vol 1, April, pp 12-10.

La programación en paralelo es un concepto bastante antiguo

Nicholas Metropolis formuló por primera vez el dilema eterno en el que ponemos a nuestros jefes .. “Esta máquina (la ENIAC) no es suficiente potente para resolver nuestros problemas” Y así obtuvo el dinero para armar una mas potente (MANIAC) que podía hasta jugar ajedrez .. En la MANIAC hizo el programa con el que George Gamow elucidó el código genético, que publicaron juntos en 1954

1943 1951

Hace falta un sistema computacional grande Vamos a construir un clúster de computadoras

Hace falta un sistema computacional grande La evolución de los sistemas distribuidos hoy nos podemos construir el clúster en el laboratorio .. antes no ..

2000s

Sistema de Cálculo Científico 152 CPUs, 4352 GPUs (9.8 TFlops), 380GB RAM, 80+ TB HDD

3 unidades de cálculo

24 CPUs (2x Opteron 12 core), 64GB RAM, 6TB HDD

48 CPUs (4x Opteron 12 core), 128 GB RAM, 6TB HDD

24 CPUs (2x Opteron 12 core), 64GB RAM 1024 GPUs (2x NVIDIA M2075, 12GB GDDR6, 2TFlops) 3TB UHSHDD

4 estaciones gráficas 3D

8 CPUs (Opteron 8 core), 16GB RAM, 1TB HDD, 256 GPUs (Nvidia Quadro 4000, 2GB GDDR5, 1 TFlop)

6 estaciones gráficas

4 CPUs (Opteron 4 core), 8GB RAM, 1TB HDD, 192 GPUs (Nvidia GTX, 1GB GDDR5, 0.4 TFlop)

7 u de control 2 CPUs (Atom 2 core), 4GB RAM, no HDD, vSphere

1 unidad SAN 1x Promise 32TB dual iSCSI SAN

Sistema de cálculo y procesamiento gráfico la tendencia actual es la arquitectura híbrida

Programación en sistemas ccNUMA 1. Hasta 16 núcleos 2. Registros multipropósito en los núcleos 3. Interfaz rápida de los 16 núcleos con su

memoria. 4. 64x vector pipeline, una instrucción se

puede ejecutar simultáneamente en los 64 registros multipropósito de cada núcleo (SIMD)

Multicomputadora de paso de mensajes y memoria compartida (ccNUMA)

Sistemas computacionales las arquitecturas actuales mas comunes

Sistemas computacionales La evolución de los procesadores gráficos ¨independientes¨ (la línea de desarrollo de nVidia)

1995 2000 2005 2010

RIVA 128 3M trans

GeForce® 256 23M trans

GeForce FX 125M trans

GeForce 8800 681M trans

GeForce 3 60M trans

“Fermi” 3B trans

2012

“Kepler” 7B trans

Sistemas computacionales Los procesadores gráficos, el camino (pipeline) de los gráficos

Raster

Vertex

Pixel

Blend

Rast

er

Vertex Pixel 0

Blen

d

Pixel 1

Pixel 2

Pixel 3

Vrtx 0 Vr

tx 2

Vrtx

1

Sistemas computacionales La evolución de los procesadores gráficos

ALU

Control

ALU

Control

ALU

Control

ALU

Control

ALU

Control

ALU

Control

ALU ALU ALU

Control

ALU ALU ALU

Sistemas computacionales La evolución de los procesadores gráficos

Sistemas computacionales Los procesadores gráficos son bastante baratos

0.339 30 137.4

0.703 30 66.3

Sistemas computacionales AMD y nVidia tenían hasta ahora rendimientos similares (ej. Cálculo del orbital molecular del C60)

Sistemas computacionales La evolución de los procesadores gráficos, un clúster dentro del chip (nVidia Kepler K110 GF)

Sistemas computacionales La evolución de los procesadores gráficos, el multiprocesador de ¨streaming¨

/* * Copyright 2003-2012 NVIDIA Corporation. All rights reserved. * Modified by Rolando, rolando@cmbi.ru.nl */ #include <cuda.h> #include <stdio.h> __global__ void add( int a, int b, int *c ) { *c = a + b; } int main( void ) { int c; int *dev_c; cudaMalloc( (void**)&dev_c, sizeof(int) ); add <<<1,1>>> ( 2, 7, dev_c ); cudaMemcpy( &c, dev_c, sizeof( int ),cudaMemcpyDeviceToHost ); printf( "2 + 7 = %d\n", c ); cudaFree( dev_c ); return 0; }

Sistemas computacionales un programa muy simple que si hace algo

Cada kernel de CUDA es ejecutado por un arreglo de hilos

- Cada hilo corre el mismo código (SIMD) - Cada hilo tiene un ID que se puede usar para calcular las direcciones de

memoria y realizar decisiones de control

7 6 5 4 3 2 1 0

… float x = input[threadID]; float y = func(x); output[threadID] = y; …

threadID

Sistemas computacionales Vamos a programar un procesador gráfico de nVidia con CUDA

El arreglo de hilos se distribuye en bloques - Los hilos dentro del bloque cooperan a través de memoria compartida, operaciones atómicas y sincronización de barrera

- Los hilos de bloques diferentes no pueden cooperar entre si.

… float x = input[threadID]; float y = func(x); output[threadID] = y; …

threadID

Thread Block 0

… … float x = input[threadID]; float y = func(x); output[threadID] = y; …

Thread Block 1

… float x = input[threadID]; float y = func(x); output[threadID] = y; …

Thread Block N - 1 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0

Sistemas computacionales Vamos a programar un procesador gráfico de nVidia con CUDA

Cada instancia tiene un ID

- Block ID: 1D, 2D y ahora hasta 3D - Thread ID: 1D, 2D o 3D

Host

Kernel 1

Kernel 2

Device

Grid 1

Block (0, 0)

Block (1, 0)

Block (0, 1)

Block (1, 1)

Grid 2

Block (1, 1)

Thread (0,1,0)

Thread (1,1,0)

Thread (2,1,0)

Thread (3,1,0)

Thread (0,0,0)

Thread (1,0,0)

Thread (2,0,0)

Thread (3,0,0)

(0,0,1) (1,0,1) (2,0,1) (3,0,1)

Sistemas computacionales Vamos a programar un procesador gráfico de nVidia con CUDA

Grid

Memoria Global

Bloque (0, 0)

Memoria Compartida

Hilo (0, 0)

Registros

Hilo (1, 0)

Registros

Bloque (1, 0)

Memoria Compartida

Hilo (0, 0)

Registros

Hilo (1, 0)

Registros

Host

Memoria de Constantes

Tipos de memoria

Sistemas computacionales Vamos a programar un procesador gráfico de nVidia con CUDA

Mi algoritmo puede ser paralelizable ? Bueno yo no se, al final de todo es su algoritmo Puedo programar mi problema en paralelo ? Generalmente si ... Los métodos numéricos SI son paralelizables ! Se están paralelizando para GPU la mayoría de los paquetes de cálculo numérico.

Sistemas computacionales Vamos a programar en paralelo

Bibliotecas numéricas en el GPU un buen comienzo para su proyecto www.netlib.org/utk/people/JackDongarra/la-sw.html

Bibliotecas numéricas en el GPU un buen comienzo para su proyecto

Bibliotecas numéricas en el GPU un buen comienzo para su proyecto

Bibliotecas numéricas en el GPU un buen comienzo para su proyecto

Bibliotecas numéricas en el GPU un buen comienzo para su proyecto

Bibliotecas numéricas en el GPU un buen comienzo para su proyecto

Bibliotecas numéricas en el GPU un buen comienzo para su proyecto

Bibliotecas numéricas en el GPU un buen comienzo para su proyecto Factorización de Cholesky utilizando MAGMA

Conclusiones o algo parecido • Los procesadores gráficos son una buena alternativa a los clústeres de

computadoras, en prestaciones y coste. • El código para los procesadores gráficos no es igual a los que se utilizan

en los clústeres, pero no es difícil de portar una vez que ya se ha paralelizado.

• Existen numerosas bibliotecas numéricas disponibles para los procesadores gráficos que sustituyen directamente las funciones anteriormente existentes.

• El incremento de la velocidad de ejecución es siempre mas del doble sin mucho esfuerzo y puede llegar a miles de veces.

En todo el mundo .. Hay mas de 200 universidades que enseñan Programación Gráfica, Mas de 20 000 artículos en la literatura, mas de 60 000 desarrolladores

Mejoramiento de la conectividad ETECSA/CUBADATA, Empalme FO hasta Panorama

Muchas Gracias