SlideShare una empresa de Scribd logo
1 de 73
Descargar para leer sin conexión
INTRODUCCIÓN A LA
COMPUTACIÓN PARALELA CON
GPUS
Sergio Orts Escolano sorts@dtic.ua.es
Vicente Morell Giménez vmorell@dccia.ua.es
Universidad de Alicante
Departamento de tecnología informática y computación
Contenido
Introducción a la computación
paralela con GPU,s
 GPU
 Paralelismo
 GPGPU
 Introducción a CUDA
 Aplicaciones
 Conclusiones
GPU
Introducción a la computación paralela con
GPU,s
 Unidad de procesamiento gráfico (GPUs) son
procesadores de varios núcleos que ofrecen alto
rendimiento
 Procesador dedicado al procesamiento de gráficos
u operaciones de coma flotante
GPU
Introducción a la computación paralela con
GPU,s
 Hoy en día las GPU son muy potentes y pueden
incluso superar la frecuencia de reloj de una CPU
antigua (más de 800MHz)
 Arquitecturas Many-core con una cantidad ingente
de núcleos que realizan operaciones sobre múltiples
datos
Contenido
Introducción a la computación paralela con
GPU,s
 GPU
 Paralelismo
 GPGPU
 Introducción a CUDA
 Aplicaciones
 Conclusiones
Paralelismo
Introducción a la computación paralela con
GPU,s
 El paralelismo es una forma de computación en la
cual varios cálculos pueden realizarse
simultáneamente.
 Basado en el principio de dividir los problemas
grandes para obtener varios problemas pequeños,
que son posteriormente solucionados en paralelo.
(Divide y vencerás)
SIMD
Introducción a la computación paralela con
GPU,s
 Todos los núcleos ejecutan la misma instrucción al mismo tiempo.
 Solo se necesita decodificar la instrucción una única vez para todos los
núcleos
 Ejemplo: Unidades vectoriales: suma, producto de vectores, etcétera
• SIMD: Una instrucción múltiples datos
Paralelismo
Introducción a la computación paralela con
GPU,s
 Computación paralela sobre GPUs explicado por los
cazadores de mitos: CPU vs GPU
 VÍDEO INCRUSTADO
 NVIDIA_ Adam and Jamie explain parallel
processing on GPU's(360p_H.264-AAC)
Contenido
Introducción a la computación paralela con
GPU,s
 GPU
 Paralelismo
 GPGPU
 Introducción
 CPU y GPU
 Evolución
 Introducción a CUDA
 Aplicaciones
 Conclusiones
GPGPU
Introducción a la computación paralela con
GPU,s
 Computación de propósito general sobre
procesadores gráficos
 Cómputo de aplicaciones tradicionalmente
ejecutadas sobre CPUs
 Aprovechamiento capacidades GPU:
 Grandes vectores de datos
 Paralelismo de grano fino SIMD
 Baja latencia en operaciones en punto flotante
Históricamente GPGPU
Introducción a la computación paralela con
GPU,s
 Restricciones:
 APIs gráficas complejas
 Capacidades de los Shader reducida
 Comunicación limitada
 Entre píxeles
 Conjunto de instrucciones
 Falta de operaciones con enteros
Evolución GPU
Introducción a la computación paralela con
GPU,s
1. Ordenadores sin tarjeta gráfica.
2. Aparición de GPUs para la representación en pantalla.
3. GPUs para procesamiento gráfico: industria del
videojuego (3dfx,NVIDIA,ATI).
4. En 2004 surge la idea de utilizar las GPU para
computación de alto rendimiento (HPC).
5. 2007. NVIDIA ve oportunidad en el mercado del HPC y
desarrolla CUDA. (Lenguaje específico para aprovechar
la capacidad de las GPU).
6. Actualmente NVIDIA ha tenido éxito en la computación
GPGPU. Los supercomputadores top utilizan clústers de
GPUs para aumentar su potencia computacional.
Oportunidad de mercado
Introducción a la computación paralela con
GPU,s
 Si hay un mercado suficientemente grande, alguien
desarrollará el producto.
 La oportunidad de ganar dinero dirige la
computación, así como la tecnología.
 Se necesitan economías de escala para producir de
forma barata, algo que solo pocas empresas
pueden permitirse.
 Observar tendencias de mercado
El gran desarrollo de las GPU
Introducción a la computación paralela con
GPU,s
 La evolución de las tarjetas gráficas ha venido
acompañado de un gran crecimiento en el mundo
de los videojuegos y las aplicaciones 3D
 Gran producción de chips gráficos por parte de
grandes fabricantes:
 NVIDIA
 AMD(ATI)
 IBM: desarrollo en colaboración con Sony y Toshiba
procesadores Cell
 Intel: Desarrollo chips GPU Larrabee
Comparación CPU y GPU
Introducción a la computación paralela con
GPU,s
 Intel Core 2 / Xeon / i7
 4-6 núcleos MIMD
 Pocos registros, cache multi-nivel
 10-30 GB/s ancho de banda hacia la memoria principal
 NVIDIA GTX480
 512 núcleos, organizados en 16 unidades SM cada una con
32 núcleos.
 Muchos registros, inclusión cachés nivel 1 y 2.
 5 GB/s ancho de banda hacia el procesador HOST.
 180 GB/s ancho de banda memoria tarjeta gráfica.
Evolución GPU: GFLOPS/s
Introducción a la computación paralela con
GPU,s
Evolución GPU: GB/s
Introducción a la computación paralela con
GPU,s
Contenido
Introducción a la computación paralela con
GPU,s
 Introducción a CUDA
 Hardware
 Software
 Manejo de la memoria
 Manejo de los hilos
 Librerías
 Cómo afrontar el desarrollo de una nueva aplicación
Hardware: Ubicación GPU
Introducción a la computación paralela con
GPU,s
La GPU se sitúa sobre una placa gráfica pci-e dentro de un
computador con uno o varios núcleos.
Hardware: Arquitectura
Introducción a la computación paralela con
GPU,s
• La GPU dedica más transistores al procesamiento de datos
Hardware: GPU compatible CUDA
Introducción a la computación paralela con
GPU,s
Hardware:
Nueva arquitectura GPU NVIDIA
Introducción a la computación paralela con
GPU,s
Introducción a la computación paralela con
GPU,s
 A nivel de GPU, los detalles dependen de la generación
de los chips.
 Primeras generaciones
 GeForce Series 8,9, GTX2XX
 Tesla C1060, S1070 para HPC, sin salida gráfica, más
memoria.
 Generaciones actuales
 Nueva arquitectura Fermi: GeForce GTX4XX
 Tesla C2050,S2050 para HPC.
Hardware: Generaciones de chips gráficos
Hardware: Características 1ª
generación
Introducción a la computación paralela con
GPU,s
 Primeras generaciones:
 Compuestas de SM “Streaming Multiprocessor”:
 8 núcleos, cada uno con 2048 registros
 Hasta 128 hilos por núcleo
 16 KB de memoria compartida
 8 KB de caché para constantes
 Diferentes chips tienen distinto número de SM,s
Modelo SM,s Ancho de banda
GTX260 27 110 GB/S
GTX285 30 160 GB/S
Tesla C1060 30 102 GB/S
Introducción a la computación paralela con
GPU,s
 Generación actual: Fermi
 Cada SM “Streaming Multiprocessor”:
 32 núcleos, cada uno con 1024 registros
 Hasta 48 hilos por núcleo
 64 KB de memoria compartida / Caché L1
 Cache L2 común a los SM.
 8 KB de caché para constantes
Modelo SM,s Ancho de banda
GTX470 14 134 GB/s
GTX480 15 180 GB/s
Tesla C2050 14 140 GB/S
Hardware: Características generación
actual
SIMT: Una instrucción múltiples hilos
Introducción a la computación paralela con
GPU,s
 Característica clave de los núcleos dentro de un SM.
 Todos los núcleos ejecutan la misma instrucción
simultáneamente pero con distintos datos
 Similar a la computación en los supercomputadores
CRAY
 Mínimo de 32 hilos realizando la misma tarea (casi) al
mismo tiempo
 Técnica tradicional en el procesamiento gráfico y en
muchas aplicaciones científicas
Múltiples hilos
Introducción a la computación paralela con
GPU,s
 Gran cantidad hilos clave alto rendimiento
 No penalización cambios de contexto. Cada hilo tiene
sus propios registros lo cual limita el número máximo de
hilos activos.
 Los hilos se ejecutan en los SM en grupos de 32
denominados “WARPS”. La ejecución alterna entre
“warps” activos y “warps” temporalmente inactivos.
Múltiples hilos
Introducción a la computación paralela con
GPU,s
 Gran cantidad hilos clave alto rendimiento
 No penalización cambios de contexto. Cada hilo tiene
sus propios registros lo cual limita el número máximo de
hilos activos.
 Los hilos se ejecutan en los SM en grupos de 32
denominados “WARPS”. La ejecución alterna entre
“warps” activos y “warps” temporalmente inactivos.
Contenido
Introducción a la computación paralela con
GPU,s
 Introducción a CUDA
 Hardware
 Software
 Manejo de la memoria
 Manejo de los hilos
 Librerías
 Cómo afrontar el desarrollo de una nueva aplicación
Software: Flujo de ejecución
Introducción a la computación paralela con
GPU,s
 En el nivel más alto encontramos un proceso sobre la
CPU (Host) que realiza los siguientes pasos:
1. Inicializa GPU
2. Reserva memoria en la parte host y device
3. Copia datos desde el host hacia la memoria device
4. Lanza la ejecución de múltiples copias del kernel
5. Copia datos desde la memoria device al host
6. Se repiten los pasos 3-5 tantas veces como sea necesario
7. Libera memoria y finaliza la ejecución proceso maestro
CPU GPU
init()
cudaMalloc()
<<>>kernel()
cudaMemCpy()
Software: Dentro de la GPU
Introducción a la computación paralela con
GPU,s
 En el nivel más bajo dentro de la GPU:
 Cada copia del programa se ejecuta sobre un SM
 Si el número de copias excede el número máximo de
SMs, entonces más de uno se ejecutará al mismo tiempo
sobre cada SM hasta ocupar todos los recursos, en ese
caso esperarán para su posterior ejecución.
 No hay garantía en el orden de ejecución en el cual
cada copia se ejecuta
Software: CUDA
Introducción a la computación paralela con
GPU,s
 CUDA (Compute Unified Device Architecture)
 Hace referencia tanto a un compilador como a un
conjunto de herramientas de desarrollo creadas por
NVIDIA
 Basado en C con algunas extensiones
 Soporte C++ , Fortran. Envoltorios para otros lenguajes:
.NET, Python, Java, etcétera
 Gran cantidad de ejemplos y buena documentación, lo
cual reduce la curva de aprendizaje para aquellos con
experiencia en lenguajes como OpenMPI y MPI.
 Extensa comunidad de usuarios en los foros de NVIDIA
Software: Programación CUDA
Introducción a la computación paralela con
GPU,s
 Un programa en cuda tiene dos partes:
 Código Host en la CPU que hace interfaz con la GPU
 Código Kernel que se ejecuta sobre la GPU
 En el nivel host, existen dos APIs
 Runtime: Simplificada, más sencilla de usar.
 Driver: más flexible, más compleja de usar.
 La versión driver no implica más rendimiento, sino más
flexibilidad a la hora de trabajar con la GPU
Software: Conceptos básicos
Introducción a la computación paralela con
GPU,s
 Bloque:
 Agrupación de hilos
 Cada bloque se ejecuta sobre un solo SM
 Un SM puede tener asignados varios bloques
Software: Conceptos básicos
Introducción a la computación paralela con
GPU,s
 Kernel: es una función la cual al ejecutarse lo hará
en N distintos hilos en lugar de en secuencial.
 Grid: forma de estructurar los bloques en el kernel
 Bloques: 1D,2D
 Hilos/Bloque: 1D,2D o 3D
Software: Ejecución
Introducción a la computación paralela con
GPU,s
 Cada bloque se divide
en warps de 32 hilos
 Los hilos de un warp se
ejecutan físicamente en
paralelo
 Aprovechamiento
pipeline gpu
 Ejecución paralela sobre
los 32 núcleos del SM
Contenido
Introducción a la computación paralela con
GPU,s
 Introducción a CUDA
 Hardware
 Software
 Manejo de la memoria
 Manejo de los hilos
 Librerías
 Cómo afrontar el desarrollo de una nueva aplicación
Memoria
Introducción a la computación
paralela con GPU,s
 Desafío clave en las arquitectura modernas de
computadoras
 No tiene sentido aumentar la capacidad de computo si
la memoria no está a la altura
 Las aplicaciones grandes trabajan con mucha memoria
 La memoria rápida es muy cara de fabricar
 Aspectos que obligan a un sistema jerárquico de
memoria
Memoria
Introducción a la computación paralela con
GPU,s
Jerarquía de memoria:
Principio de localidad
Introducción a la computación paralela con
GPU,s
 La velocidad de ejecución se basa en la explotación
de la localidad de los datos:
 Localidad temporal: un dato usado recientemente es
probable que se use otra vez a corto plazo
 Localidad espacial: es probable usar los datos
adyacentes a los usados, por ello se usan caches para
guardar varios datos en una línea del tamaño del bus
Caché Arquitectura Fermi
Introducción a la computación paralela con
GPU,s
 Líneas de caché de 128 bytes (32 floats o 16 doubles)
 Bus de memoria de 384 bits hacia L2
 Ancho de banda de mas de 160 GB/s
 Una caché L2 de 384kB compartida por todos los
multiprocesadores (SM)
 Cada SM tiene una caché L1 de 16kB o 48 kB (64 kb a
repartir entre L1 y la memoria compartida)
 No hay coherencia global de cachés como en las CPUs
así que debería evitarse que varios bloques actualicen
los mismos elementos de la memoria global
Importancia de la localidad GPU
Introducción a la computación paralela con
GPU,s
 1 Tflops GPU (para precisión simple)
 100 GB/s entre la memoria y la caché L2
 128 bytes/línea
 100 Gb/s ≈ 800M líneas/s ≈ 24 Gfloat/s
 En el peor caso, cada operación(flop) necesita 2 entradas y una
salida, si pertenecen a líneas diferentes entonces ≈ 260 Mflops
 para conseguir una velocidad de 500Gflops son necesarios unas 20
operaciones por cada float transferido.
 Incluso con una buena implementación, muchos algoritmos no logran
superar esta limitación.
Tipos de memoria
Introducción a la computación paralela con
GPU,s
Tipos de memoria
Introducción a la computación paralela con
GPU,s
Tipos de memoria:
Memoria Global
Introducción a la computación paralela con
GPU,s
 Declarada y manejada desde la parte Host
 Ubicación para los datos de la aplicación,
normalmente vectores y las variables globales del
sistema.
 Es la memoria compartida por todos los SM
Tipos de memoria:
Memoria Constante
Introducción a la computación paralela con
GPU,s
 Sus valores no pueden ser cambiados.
 Optimizada para lecturas, su uso aumenta
notablemente la velocidad del sistema.
 Su velocidad es similar a los registros sin necesidad
de ocuparlos
 debido a que disponen de su propia
mem. caché.
Tipos de memoria:
Registros
Introducción a la computación paralela con
GPU,s
 Ubicación para las variables usadas en los kernels
 Cada SM dispone de un numero de registros a
repartir entre el numero de hilos
 En la arquitectura Fermi:
 32k registros de 32 bits por SM
 63 registros por hilo, unos 1536 hilos
 Para grandes aplicaciones,
su manejo es esencial
Tipos de memoria:
Memoria Local
Introducción a la computación paralela con
GPU,s
 Destinada a la información local de cada hilo.
 Para variables o vectores locales que no caben en
sus respectivos registros
 Tiene bastante capacidad y su velocidad es como
la mem. Global.
 Las nuevas arquitecturas han mejorado bastante su
uso mediante las caches L1/L2.
Tipos de memoria:
Memoria Compartida
Introducción a la computación paralela con
GPU,s
 Memoria dedicada a cada multiprocesador
 Compartida por todos los hilos de un mismo bloque,
útil para compartir información
 Puede necesitar instrucciones de control de acceso y
flujo para controlar los accesos.
 Normalmente se copian los datos desde la mem.
global en la memoria
compartida
Contenido
Introducción a la computación paralela con
GPU,s
 Introducción a CUDA
 Hardware
 Software
 Manejo de la memoria
 Manejo de los hilos
 Librerías
 Cómo afrontar el desarrollo de una nueva aplicación
Hilos CUDA
Introducción a la computación
paralela con GPU,s
 Los hilos de CUDA se distribuyen automáticamente
entre los SM
 Para identificar el hilo y poder trabajar con su
parte se usan las variables:
int mi_ID=blockIdx.x * blockDim.x + threadIdx.x
Control de flujo
Introducción a la computación paralela con
GPU,s
 Todos los hilos de un mismo warp ejecutan al mismo
tiempo la misma instrucción
 Los kernels con varios posibles caminos se preparan
para que todos ejecuten la misma instrucción pero
cada hilo ejecute su respectiva funcionalidad
if (x < 0.0)
z=x-2.0;
else
z=sqrt(x);
Control de flujo
Introducción a la computación paralela con
GPU,s
 Para resolver los diferentes caminos, el compilador
predica las instrucciones:
 De esta forma todos los hilos ejecutan las mismas
instrucciones.
if (x < 0.0)
z=x-2.0;
else
z=sqrt(x);
p = (x<0.0);
p: z = x-2.0;
!p: z = sqrt(x);
Sincronización
Introducción a la computación paralela con
GPU,s
 Para sincronizar los hilos de forma interna al kernel,
se utiliza la instrucción:
__syncthreads()
 Si se utiliza código condicional hay que asegurarse
que todos los hilos alcancen la instrucción de
sincronización
Operaciones Atómicas
Introducción a la computación paralela con
GPU,s
 Hay operaciones que necesitan asegurar que se
van a ejecutar una tras otra en los diferentes hilos
 necesarias para trabajar con la memoria
compartida
 Existen varias operaciones atómicas:
 Incrementos, mínimos, máximos…
__shared__ int cont;
…
cont++; //dentro de un kernel
Ejemplo de Kernel
Introducción a la computación
paralela con GPU,s
__global__ void sharedABMultiply(float *a,float* b,float *c,int N){
__shared__ float aTile[TILE_DIM][TILE_DIM],
bTile[TILE_DIM][TILE_DIM];
int row = blockIdx.y * blockDim.y + threadIdx.y;
int col = blockIdx.x * blockDim.x + threadIdx.x;
float sum = 0.0f;
aTile[threadIdx.y][threadIdx.x]=a[row*TILE_DIM+threadIdx.x];
bTile[threadIdx.y][threadIdx.x] = b[threadIdx.y*N+col];
__syncthreads();
for (int i = 0; i < TILE_DIM; i++) {
sum += aTile[threadIdx.y][i]* bTile[i][threadIdx.x];
}
c[row*N+col] = sum;
}
Mem compartida
Indicación kernel
registros
Identifadores hilo
Barrera para todos los hilos del mismo bloque
Contenido
Introducción a la computación paralela con
GPU,s
 Introducción a CUDA
 Hardware
 Software
 Manejo de la memoria
 Manejo de los hilos
 Librerías
 Cómo afrontar el desarrollo de una nueva aplicación
Librerías basadas en CUDA
Introducción a la computación paralela con
GPU,s
 Se desarrollaron muchas aplicaciones especificas
 Mas tarde, comenzaron a aparecer varias librerías
sobre CUDA para varios ámbitos:
 CUBLAS: operaciones sobre algebra lineal
 CUFFT : transformadas rápidas de Fourier
 CUDPP: operaciones paralelas primitivas
Librerías basadas en CUDA
Introducción a la computación paralela con
GPU,s
 Thrust: desarrollada por uno de los desarrolladores
de CUDA e incluida en la versión 4.
 Ofrece una abstracción de la programación de los
kernel
 Implementa varios algoritmos paralelos de datos
 Máximo, suma, Multiplicación de vectores, …
Librerías basadas en CUDA
Introducción a la computación paralela con
GPU,s
 CUVILib: librería que implementa sobre GPU
algoritmos de visión por computador y procesamiento
de imágenes.
Cálculo de flujo de
movimiento:
Lucas and Kanade
Algorithm
Contenido
Introducción a la computación paralela con
GPU,s
 Introducción a CUDA
 Hardware
 Software
 Manejo de la memoria
 Manejo de los hilos
 Librerías
 Cómo afrontar el desarrollo de una nueva aplicación
Diseñar aplicación con CUDA
Introducción a la computación paralela con
GPU,s
 1) La aplicación a desarrollar…
 Hay algo similar en el SDK de CUDA?
 En los foros de CUDA hay algún proyecto relacionado?
 Hay algo en la red ? (google)
 2) ¿Qué partes son paralelizables?
 ¿tiene suficiente paralelismo?
 CUDA es eficiente cuando trabaja con miles de hilos
Diseñar aplicación con CUDA
Introducción a la computación paralela con
GPU,s
 3) Dividir el problema en funcionalidades
diferenciadas:
 Alguna de las partes esta ya implementada?
 Diseñar un kernel para cada funcionalidad..
 Puede servir alguna de las librerías ya
implementadas?
 4) Va a existir mucha divergencia en los warp?
 Hay mucho código condicional a las entradas?
 La máxima eficiencia se consigue con la poca
divergencia
Diseñar aplicación con CUDA
Introducción a la computación paralela con
GPU,s
 5) Habrá un problema con el ancho de banda?
 El tiempo de trasferir la información entre la CPU y la
GPU se verá recompensado por la ventaja de
paralelizar el problema?
 Para aplicaciones para varios kernels, es apropiado
utilizar ciertas funciones en la GPU o conviene mover
toda la funcionalidad en la GPU
 Siempre tener en cuenta que el número de operaciones
por dato debe ser alto para compensar las
transferencias
Diseñar aplicación con CUDA
Introducción a la computación paralela con
GPU,s
 6.a) ¿El problema es de computación intensiva?
 No hay que preocuparse tanto por la optimización de
memoria
 Cuidado si los cálculos son doubles
 6.b) ¿O sin embargo es para trabajar con muchos
datos?
 Hay que utilizar muy bien los niveles de memoria
Contenido
Introducción a la computación paralela con
GPU,s
 GPU
 Paralelismo
 GPGPU
 Introducción a CUDA
 Aplicaciones
 Conclusiones
Aplicaciones en CUDA
Introducción a la computación paralela con
GPU,s
 En la pagina de www.nvidia.com podemos encontrar una larga lista
de aplicaciones especificas y modificaciones de programas para
aprovechar esta tecnología, para diferentes ámbitos de aplicación:
 Gobierno y defensa
 Dinámica molecular
 Bioinformática
 Electrodinámica y electromagnetismo
 Imágenes medicas
 Combustibles y gases
 Computación financiera
 Extensiones de Matlab
 Tratamiento de video y visión por computador
 Modelado del tiempo y los océanos
Aplicaciones en CUDA
Introducción a la computación paralela con
GPU,s
 Actualmente estamos trabajando en:
 Visión:
 Aceleración algoritmos redes neuronales auto-
organizativas (GNG,NG)
 Reconstrucción escenarios 3D
 Representación 3D objetos
Aplicaciones en CUDA
Introducción a la computación paralela con
GPU,s
 Actualmente estamos trabajando en:
 CAD/CAM: Calculo de rutas de maquinas-
herramienta para recrear modelos digitales
Y axis
Z axis
X axis
Contenido
Introducción a la computación paralela con
GPU,s
 GPU
 Paralelismo
 GPGPU
 Introducción a CUDA
 Aplicaciones
 Conclusiones
CUDA para acelerar algoritmos
 Buenas prácticas :
 Paralelizar la mayor parte posible del algoritmo.
 Disminuir las operaciones de memoria entre device y host
 Organizar la memoria de forma que los accesos paralelos
sean óptimos:
 Copiando partes de la memoria global a la compartida
 Transformando los datos para que los accesos sean concurrentes
 Alinear y conjuntar la memoria para que en menos accesos se
lean los datos necesarios.
 Usar medidas tanto de tiempo como de ancho de banda
utilizado para optimizar los algoritmos.
Conclusiones
 CUDA es una tecnología que permite obtener
grandes rendimientos para problemas con un alto
paralelismo.
 Hay que tener claro su funcionamiento para saber
si es adecuado y obtener el mayor rendimiento
posible.
 Programar en CUDA es fácil, pero no lo es obtener
rendimiento.
¿Preguntas?

Más contenido relacionado

La actualidad más candente

Gerenciamento e administração de Redes
Gerenciamento e administração de RedesGerenciamento e administração de Redes
Gerenciamento e administração de RedesHelder Lopes
 
Aula02 lab01 - montagem de uma topologia simples
Aula02   lab01 - montagem de uma topologia simplesAula02   lab01 - montagem de uma topologia simples
Aula02 lab01 - montagem de uma topologia simplesCarlos Veiga
 
Modelo tcp ip
Modelo tcp ipModelo tcp ip
Modelo tcp ipwsar85
 
Infraestrutura e Componentes de Redes de Dados
Infraestrutura e Componentes de Redes de DadosInfraestrutura e Componentes de Redes de Dados
Infraestrutura e Componentes de Redes de Dadostiredes
 
Trabalho - Projeto redes
Trabalho - Projeto redesTrabalho - Projeto redes
Trabalho - Projeto redesValdir Junior
 
Cisco Packet Tracer
Cisco Packet TracerCisco Packet Tracer
Cisco Packet Tracermaykon-26
 
Introducción equipos de red
Introducción equipos de redIntroducción equipos de red
Introducción equipos de redcesar4174
 
Instalacion de red lan
Instalacion de red lanInstalacion de red lan
Instalacion de red lanAndii Cr
 
Vpn (virtual private network) bag 2
Vpn (virtual private network) bag 2Vpn (virtual private network) bag 2
Vpn (virtual private network) bag 2Cak FeRi
 
Redes de Computadores - Camada de Aplicação
Redes de Computadores - Camada de AplicaçãoRedes de Computadores - Camada de Aplicação
Redes de Computadores - Camada de AplicaçãoLuís Felipe de Andrade
 
Redes 1 introducao historico conceitos
Redes 1 introducao historico conceitosRedes 1 introducao historico conceitos
Redes 1 introducao historico conceitosMauro Pereira
 
Algoritmos de Control de Congestión
Algoritmos de Control de CongestiónAlgoritmos de Control de Congestión
Algoritmos de Control de CongestiónCarlos Román
 

La actualidad más candente (20)

Gerenciamento e administração de Redes
Gerenciamento e administração de RedesGerenciamento e administração de Redes
Gerenciamento e administração de Redes
 
Modelo TCP/IP
Modelo TCP/IPModelo TCP/IP
Modelo TCP/IP
 
Aula02 lab01 - montagem de uma topologia simples
Aula02   lab01 - montagem de uma topologia simplesAula02   lab01 - montagem de uma topologia simples
Aula02 lab01 - montagem de uma topologia simples
 
Modelo tcp ip
Modelo tcp ipModelo tcp ip
Modelo tcp ip
 
Infraestrutura e Componentes de Redes de Dados
Infraestrutura e Componentes de Redes de DadosInfraestrutura e Componentes de Redes de Dados
Infraestrutura e Componentes de Redes de Dados
 
Redes de área local (lan)
Redes de área local (lan)Redes de área local (lan)
Redes de área local (lan)
 
Trabalho - Projeto redes
Trabalho - Projeto redesTrabalho - Projeto redes
Trabalho - Projeto redes
 
Ip sobre atm
Ip sobre atmIp sobre atm
Ip sobre atm
 
Cisco Packet Tracer
Cisco Packet TracerCisco Packet Tracer
Cisco Packet Tracer
 
Capa de presentación modelo OSI
Capa de presentación modelo OSICapa de presentación modelo OSI
Capa de presentación modelo OSI
 
Ambiente wifi
Ambiente wifiAmbiente wifi
Ambiente wifi
 
Introducción equipos de red
Introducción equipos de redIntroducción equipos de red
Introducción equipos de red
 
Instalacion de red lan
Instalacion de red lanInstalacion de red lan
Instalacion de red lan
 
Vpn (virtual private network) bag 2
Vpn (virtual private network) bag 2Vpn (virtual private network) bag 2
Vpn (virtual private network) bag 2
 
Redes de Computadores - Camada de Aplicação
Redes de Computadores - Camada de AplicaçãoRedes de Computadores - Camada de Aplicação
Redes de Computadores - Camada de Aplicação
 
Redes 1 introducao historico conceitos
Redes 1 introducao historico conceitosRedes 1 introducao historico conceitos
Redes 1 introducao historico conceitos
 
PPT Cableado Estructurado 2018.PPTX
PPT Cableado Estructurado 2018.PPTXPPT Cableado Estructurado 2018.PPTX
PPT Cableado Estructurado 2018.PPTX
 
Puertos tcp mas usados
Puertos tcp mas usadosPuertos tcp mas usados
Puertos tcp mas usados
 
Algoritmos de Control de Congestión
Algoritmos de Control de CongestiónAlgoritmos de Control de Congestión
Algoritmos de Control de Congestión
 
Dispositivos de red
Dispositivos de  redDispositivos de  red
Dispositivos de red
 

Destacado

Gpu
GpuGpu
Gpuecci
 
Gpu ii
Gpu iiGpu ii
Gpu iiecci
 
OpenHPI - Parallel Programming Concepts - Week 4
OpenHPI - Parallel Programming Concepts - Week 4OpenHPI - Parallel Programming Concepts - Week 4
OpenHPI - Parallel Programming Concepts - Week 4Peter Tröger
 
FAST MAP PROJECTION ON CUDA.ppt
FAST MAP PROJECTION ON CUDA.pptFAST MAP PROJECTION ON CUDA.ppt
FAST MAP PROJECTION ON CUDA.pptgrssieee
 
GPU Computing with Ruby
GPU Computing with RubyGPU Computing with Ruby
GPU Computing with RubyShin Yee Chung
 
GPU - An Introduction
GPU - An IntroductionGPU - An Introduction
GPU - An IntroductionDhan V Sagar
 
Introduction to CUDA
Introduction to CUDAIntroduction to CUDA
Introduction to CUDARaymond Tay
 

Destacado (9)

Gpu
GpuGpu
Gpu
 
Gpu ii
Gpu iiGpu ii
Gpu ii
 
Equipo 2 gpus
Equipo 2 gpusEquipo 2 gpus
Equipo 2 gpus
 
OpenHPI - Parallel Programming Concepts - Week 4
OpenHPI - Parallel Programming Concepts - Week 4OpenHPI - Parallel Programming Concepts - Week 4
OpenHPI - Parallel Programming Concepts - Week 4
 
FAST MAP PROJECTION ON CUDA.ppt
FAST MAP PROJECTION ON CUDA.pptFAST MAP PROJECTION ON CUDA.ppt
FAST MAP PROJECTION ON CUDA.ppt
 
GPU Computing with Ruby
GPU Computing with RubyGPU Computing with Ruby
GPU Computing with Ruby
 
Cuda Architecture
Cuda ArchitectureCuda Architecture
Cuda Architecture
 
GPU - An Introduction
GPU - An IntroductionGPU - An Introduction
GPU - An Introduction
 
Introduction to CUDA
Introduction to CUDAIntroduction to CUDA
Introduction to CUDA
 

Similar a Computación paralela con gp us cuda

GPUs para Científicos
GPUs para CientíficosGPUs para Científicos
GPUs para CientíficosAntonio Mora
 
Que ordenador comprar
Que ordenador comprarQue ordenador comprar
Que ordenador comprarrlopezdavi
 
Computación Heterogénea: Aplicaciones y Modelado de Rendimiento
Computación Heterogénea: Aplicaciones y Modelado de RendimientoComputación Heterogénea: Aplicaciones y Modelado de Rendimiento
Computación Heterogénea: Aplicaciones y Modelado de RendimientoUnai Lopez-Novoa
 
Prueba Conferencia
Prueba ConferenciaPrueba Conferencia
Prueba Conferenciaguest988f714
 
Tarjeta De Video
Tarjeta De VideoTarjeta De Video
Tarjeta De Videoguesta14383
 
Mi computadora
Mi computadoraMi computadora
Mi computadoragermanr
 
T.p.micomputadora
T.p.micomputadoraT.p.micomputadora
T.p.micomputadoragerman1622
 
Partes internas del computador
Partes internas del computadorPartes internas del computador
Partes internas del computadori1310688
 
Evolución de los micro procesadores
Evolución de los micro procesadoresEvolución de los micro procesadores
Evolución de los micro procesadores-Yasir Castro-
 
Presentacion De Board
Presentacion De BoardPresentacion De Board
Presentacion De BoardJohan
 
Componentes de un computadora
Componentes de un computadoraComponentes de un computadora
Componentes de un computadoraRicardoLopezMx
 
Componentes de un computadora
Componentes de un computadoraComponentes de un computadora
Componentes de un computadorarosa22i
 

Similar a Computación paralela con gp us cuda (20)

GPUs para Científicos
GPUs para CientíficosGPUs para Científicos
GPUs para Científicos
 
G P Un Vidia
G P Un VidiaG P Un Vidia
G P Un Vidia
 
Trabajo mics
Trabajo micsTrabajo mics
Trabajo mics
 
Moodle
MoodleMoodle
Moodle
 
Articulo de cuda
Articulo de cudaArticulo de cuda
Articulo de cuda
 
Que ordenador comprar
Que ordenador comprarQue ordenador comprar
Que ordenador comprar
 
Computación Heterogénea: Aplicaciones y Modelado de Rendimiento
Computación Heterogénea: Aplicaciones y Modelado de RendimientoComputación Heterogénea: Aplicaciones y Modelado de Rendimiento
Computación Heterogénea: Aplicaciones y Modelado de Rendimiento
 
Prueba Conferencia
Prueba ConferenciaPrueba Conferencia
Prueba Conferencia
 
Tarjeta De Video
Tarjeta De VideoTarjeta De Video
Tarjeta De Video
 
Mi computadora
Mi computadoraMi computadora
Mi computadora
 
Micomputadora
MicomputadoraMicomputadora
Micomputadora
 
T.p.micomputadora
T.p.micomputadoraT.p.micomputadora
T.p.micomputadora
 
Partes internas del computador
Partes internas del computadorPartes internas del computador
Partes internas del computador
 
Evolución de los micro procesadores
Evolución de los micro procesadoresEvolución de los micro procesadores
Evolución de los micro procesadores
 
Presentacion De Board
Presentacion De BoardPresentacion De Board
Presentacion De Board
 
Componentes de un computadora
Componentes de un computadoraComponentes de un computadora
Componentes de un computadora
 
Componentes de un computadora
Componentes de un computadoraComponentes de un computadora
Componentes de un computadora
 
Componentes de un computadora
Componentes de un computadoraComponentes de un computadora
Componentes de un computadora
 
Componentes de un computadora
Componentes de un computadoraComponentes de un computadora
Componentes de un computadora
 
Componentes de un computadora
Componentes de un computadoraComponentes de un computadora
Componentes de un computadora
 

Computación paralela con gp us cuda

  • 1. INTRODUCCIÓN A LA COMPUTACIÓN PARALELA CON GPUS Sergio Orts Escolano sorts@dtic.ua.es Vicente Morell Giménez vmorell@dccia.ua.es Universidad de Alicante Departamento de tecnología informática y computación
  • 2. Contenido Introducción a la computación paralela con GPU,s  GPU  Paralelismo  GPGPU  Introducción a CUDA  Aplicaciones  Conclusiones
  • 3. GPU Introducción a la computación paralela con GPU,s  Unidad de procesamiento gráfico (GPUs) son procesadores de varios núcleos que ofrecen alto rendimiento  Procesador dedicado al procesamiento de gráficos u operaciones de coma flotante
  • 4. GPU Introducción a la computación paralela con GPU,s  Hoy en día las GPU son muy potentes y pueden incluso superar la frecuencia de reloj de una CPU antigua (más de 800MHz)  Arquitecturas Many-core con una cantidad ingente de núcleos que realizan operaciones sobre múltiples datos
  • 5. Contenido Introducción a la computación paralela con GPU,s  GPU  Paralelismo  GPGPU  Introducción a CUDA  Aplicaciones  Conclusiones
  • 6. Paralelismo Introducción a la computación paralela con GPU,s  El paralelismo es una forma de computación en la cual varios cálculos pueden realizarse simultáneamente.  Basado en el principio de dividir los problemas grandes para obtener varios problemas pequeños, que son posteriormente solucionados en paralelo. (Divide y vencerás)
  • 7. SIMD Introducción a la computación paralela con GPU,s  Todos los núcleos ejecutan la misma instrucción al mismo tiempo.  Solo se necesita decodificar la instrucción una única vez para todos los núcleos  Ejemplo: Unidades vectoriales: suma, producto de vectores, etcétera • SIMD: Una instrucción múltiples datos
  • 8. Paralelismo Introducción a la computación paralela con GPU,s  Computación paralela sobre GPUs explicado por los cazadores de mitos: CPU vs GPU  VÍDEO INCRUSTADO  NVIDIA_ Adam and Jamie explain parallel processing on GPU's(360p_H.264-AAC)
  • 9. Contenido Introducción a la computación paralela con GPU,s  GPU  Paralelismo  GPGPU  Introducción  CPU y GPU  Evolución  Introducción a CUDA  Aplicaciones  Conclusiones
  • 10. GPGPU Introducción a la computación paralela con GPU,s  Computación de propósito general sobre procesadores gráficos  Cómputo de aplicaciones tradicionalmente ejecutadas sobre CPUs  Aprovechamiento capacidades GPU:  Grandes vectores de datos  Paralelismo de grano fino SIMD  Baja latencia en operaciones en punto flotante
  • 11. Históricamente GPGPU Introducción a la computación paralela con GPU,s  Restricciones:  APIs gráficas complejas  Capacidades de los Shader reducida  Comunicación limitada  Entre píxeles  Conjunto de instrucciones  Falta de operaciones con enteros
  • 12. Evolución GPU Introducción a la computación paralela con GPU,s 1. Ordenadores sin tarjeta gráfica. 2. Aparición de GPUs para la representación en pantalla. 3. GPUs para procesamiento gráfico: industria del videojuego (3dfx,NVIDIA,ATI). 4. En 2004 surge la idea de utilizar las GPU para computación de alto rendimiento (HPC). 5. 2007. NVIDIA ve oportunidad en el mercado del HPC y desarrolla CUDA. (Lenguaje específico para aprovechar la capacidad de las GPU). 6. Actualmente NVIDIA ha tenido éxito en la computación GPGPU. Los supercomputadores top utilizan clústers de GPUs para aumentar su potencia computacional.
  • 13. Oportunidad de mercado Introducción a la computación paralela con GPU,s  Si hay un mercado suficientemente grande, alguien desarrollará el producto.  La oportunidad de ganar dinero dirige la computación, así como la tecnología.  Se necesitan economías de escala para producir de forma barata, algo que solo pocas empresas pueden permitirse.  Observar tendencias de mercado
  • 14. El gran desarrollo de las GPU Introducción a la computación paralela con GPU,s  La evolución de las tarjetas gráficas ha venido acompañado de un gran crecimiento en el mundo de los videojuegos y las aplicaciones 3D  Gran producción de chips gráficos por parte de grandes fabricantes:  NVIDIA  AMD(ATI)  IBM: desarrollo en colaboración con Sony y Toshiba procesadores Cell  Intel: Desarrollo chips GPU Larrabee
  • 15. Comparación CPU y GPU Introducción a la computación paralela con GPU,s  Intel Core 2 / Xeon / i7  4-6 núcleos MIMD  Pocos registros, cache multi-nivel  10-30 GB/s ancho de banda hacia la memoria principal  NVIDIA GTX480  512 núcleos, organizados en 16 unidades SM cada una con 32 núcleos.  Muchos registros, inclusión cachés nivel 1 y 2.  5 GB/s ancho de banda hacia el procesador HOST.  180 GB/s ancho de banda memoria tarjeta gráfica.
  • 16. Evolución GPU: GFLOPS/s Introducción a la computación paralela con GPU,s
  • 17. Evolución GPU: GB/s Introducción a la computación paralela con GPU,s
  • 18. Contenido Introducción a la computación paralela con GPU,s  Introducción a CUDA  Hardware  Software  Manejo de la memoria  Manejo de los hilos  Librerías  Cómo afrontar el desarrollo de una nueva aplicación
  • 19. Hardware: Ubicación GPU Introducción a la computación paralela con GPU,s La GPU se sitúa sobre una placa gráfica pci-e dentro de un computador con uno o varios núcleos.
  • 20. Hardware: Arquitectura Introducción a la computación paralela con GPU,s • La GPU dedica más transistores al procesamiento de datos
  • 21. Hardware: GPU compatible CUDA Introducción a la computación paralela con GPU,s
  • 22. Hardware: Nueva arquitectura GPU NVIDIA Introducción a la computación paralela con GPU,s
  • 23. Introducción a la computación paralela con GPU,s  A nivel de GPU, los detalles dependen de la generación de los chips.  Primeras generaciones  GeForce Series 8,9, GTX2XX  Tesla C1060, S1070 para HPC, sin salida gráfica, más memoria.  Generaciones actuales  Nueva arquitectura Fermi: GeForce GTX4XX  Tesla C2050,S2050 para HPC. Hardware: Generaciones de chips gráficos
  • 24. Hardware: Características 1ª generación Introducción a la computación paralela con GPU,s  Primeras generaciones:  Compuestas de SM “Streaming Multiprocessor”:  8 núcleos, cada uno con 2048 registros  Hasta 128 hilos por núcleo  16 KB de memoria compartida  8 KB de caché para constantes  Diferentes chips tienen distinto número de SM,s Modelo SM,s Ancho de banda GTX260 27 110 GB/S GTX285 30 160 GB/S Tesla C1060 30 102 GB/S
  • 25. Introducción a la computación paralela con GPU,s  Generación actual: Fermi  Cada SM “Streaming Multiprocessor”:  32 núcleos, cada uno con 1024 registros  Hasta 48 hilos por núcleo  64 KB de memoria compartida / Caché L1  Cache L2 común a los SM.  8 KB de caché para constantes Modelo SM,s Ancho de banda GTX470 14 134 GB/s GTX480 15 180 GB/s Tesla C2050 14 140 GB/S Hardware: Características generación actual
  • 26. SIMT: Una instrucción múltiples hilos Introducción a la computación paralela con GPU,s  Característica clave de los núcleos dentro de un SM.  Todos los núcleos ejecutan la misma instrucción simultáneamente pero con distintos datos  Similar a la computación en los supercomputadores CRAY  Mínimo de 32 hilos realizando la misma tarea (casi) al mismo tiempo  Técnica tradicional en el procesamiento gráfico y en muchas aplicaciones científicas
  • 27. Múltiples hilos Introducción a la computación paralela con GPU,s  Gran cantidad hilos clave alto rendimiento  No penalización cambios de contexto. Cada hilo tiene sus propios registros lo cual limita el número máximo de hilos activos.  Los hilos se ejecutan en los SM en grupos de 32 denominados “WARPS”. La ejecución alterna entre “warps” activos y “warps” temporalmente inactivos.
  • 28. Múltiples hilos Introducción a la computación paralela con GPU,s  Gran cantidad hilos clave alto rendimiento  No penalización cambios de contexto. Cada hilo tiene sus propios registros lo cual limita el número máximo de hilos activos.  Los hilos se ejecutan en los SM en grupos de 32 denominados “WARPS”. La ejecución alterna entre “warps” activos y “warps” temporalmente inactivos.
  • 29. Contenido Introducción a la computación paralela con GPU,s  Introducción a CUDA  Hardware  Software  Manejo de la memoria  Manejo de los hilos  Librerías  Cómo afrontar el desarrollo de una nueva aplicación
  • 30. Software: Flujo de ejecución Introducción a la computación paralela con GPU,s  En el nivel más alto encontramos un proceso sobre la CPU (Host) que realiza los siguientes pasos: 1. Inicializa GPU 2. Reserva memoria en la parte host y device 3. Copia datos desde el host hacia la memoria device 4. Lanza la ejecución de múltiples copias del kernel 5. Copia datos desde la memoria device al host 6. Se repiten los pasos 3-5 tantas veces como sea necesario 7. Libera memoria y finaliza la ejecución proceso maestro CPU GPU init() cudaMalloc() <<>>kernel() cudaMemCpy()
  • 31. Software: Dentro de la GPU Introducción a la computación paralela con GPU,s  En el nivel más bajo dentro de la GPU:  Cada copia del programa se ejecuta sobre un SM  Si el número de copias excede el número máximo de SMs, entonces más de uno se ejecutará al mismo tiempo sobre cada SM hasta ocupar todos los recursos, en ese caso esperarán para su posterior ejecución.  No hay garantía en el orden de ejecución en el cual cada copia se ejecuta
  • 32. Software: CUDA Introducción a la computación paralela con GPU,s  CUDA (Compute Unified Device Architecture)  Hace referencia tanto a un compilador como a un conjunto de herramientas de desarrollo creadas por NVIDIA  Basado en C con algunas extensiones  Soporte C++ , Fortran. Envoltorios para otros lenguajes: .NET, Python, Java, etcétera  Gran cantidad de ejemplos y buena documentación, lo cual reduce la curva de aprendizaje para aquellos con experiencia en lenguajes como OpenMPI y MPI.  Extensa comunidad de usuarios en los foros de NVIDIA
  • 33. Software: Programación CUDA Introducción a la computación paralela con GPU,s  Un programa en cuda tiene dos partes:  Código Host en la CPU que hace interfaz con la GPU  Código Kernel que se ejecuta sobre la GPU  En el nivel host, existen dos APIs  Runtime: Simplificada, más sencilla de usar.  Driver: más flexible, más compleja de usar.  La versión driver no implica más rendimiento, sino más flexibilidad a la hora de trabajar con la GPU
  • 34. Software: Conceptos básicos Introducción a la computación paralela con GPU,s  Bloque:  Agrupación de hilos  Cada bloque se ejecuta sobre un solo SM  Un SM puede tener asignados varios bloques
  • 35. Software: Conceptos básicos Introducción a la computación paralela con GPU,s  Kernel: es una función la cual al ejecutarse lo hará en N distintos hilos en lugar de en secuencial.  Grid: forma de estructurar los bloques en el kernel  Bloques: 1D,2D  Hilos/Bloque: 1D,2D o 3D
  • 36. Software: Ejecución Introducción a la computación paralela con GPU,s  Cada bloque se divide en warps de 32 hilos  Los hilos de un warp se ejecutan físicamente en paralelo  Aprovechamiento pipeline gpu  Ejecución paralela sobre los 32 núcleos del SM
  • 37. Contenido Introducción a la computación paralela con GPU,s  Introducción a CUDA  Hardware  Software  Manejo de la memoria  Manejo de los hilos  Librerías  Cómo afrontar el desarrollo de una nueva aplicación
  • 38. Memoria Introducción a la computación paralela con GPU,s  Desafío clave en las arquitectura modernas de computadoras  No tiene sentido aumentar la capacidad de computo si la memoria no está a la altura  Las aplicaciones grandes trabajan con mucha memoria  La memoria rápida es muy cara de fabricar  Aspectos que obligan a un sistema jerárquico de memoria
  • 39. Memoria Introducción a la computación paralela con GPU,s
  • 40. Jerarquía de memoria: Principio de localidad Introducción a la computación paralela con GPU,s  La velocidad de ejecución se basa en la explotación de la localidad de los datos:  Localidad temporal: un dato usado recientemente es probable que se use otra vez a corto plazo  Localidad espacial: es probable usar los datos adyacentes a los usados, por ello se usan caches para guardar varios datos en una línea del tamaño del bus
  • 41. Caché Arquitectura Fermi Introducción a la computación paralela con GPU,s  Líneas de caché de 128 bytes (32 floats o 16 doubles)  Bus de memoria de 384 bits hacia L2  Ancho de banda de mas de 160 GB/s  Una caché L2 de 384kB compartida por todos los multiprocesadores (SM)  Cada SM tiene una caché L1 de 16kB o 48 kB (64 kb a repartir entre L1 y la memoria compartida)  No hay coherencia global de cachés como en las CPUs así que debería evitarse que varios bloques actualicen los mismos elementos de la memoria global
  • 42. Importancia de la localidad GPU Introducción a la computación paralela con GPU,s  1 Tflops GPU (para precisión simple)  100 GB/s entre la memoria y la caché L2  128 bytes/línea  100 Gb/s ≈ 800M líneas/s ≈ 24 Gfloat/s  En el peor caso, cada operación(flop) necesita 2 entradas y una salida, si pertenecen a líneas diferentes entonces ≈ 260 Mflops  para conseguir una velocidad de 500Gflops son necesarios unas 20 operaciones por cada float transferido.  Incluso con una buena implementación, muchos algoritmos no logran superar esta limitación.
  • 43. Tipos de memoria Introducción a la computación paralela con GPU,s
  • 44. Tipos de memoria Introducción a la computación paralela con GPU,s
  • 45. Tipos de memoria: Memoria Global Introducción a la computación paralela con GPU,s  Declarada y manejada desde la parte Host  Ubicación para los datos de la aplicación, normalmente vectores y las variables globales del sistema.  Es la memoria compartida por todos los SM
  • 46. Tipos de memoria: Memoria Constante Introducción a la computación paralela con GPU,s  Sus valores no pueden ser cambiados.  Optimizada para lecturas, su uso aumenta notablemente la velocidad del sistema.  Su velocidad es similar a los registros sin necesidad de ocuparlos  debido a que disponen de su propia mem. caché.
  • 47. Tipos de memoria: Registros Introducción a la computación paralela con GPU,s  Ubicación para las variables usadas en los kernels  Cada SM dispone de un numero de registros a repartir entre el numero de hilos  En la arquitectura Fermi:  32k registros de 32 bits por SM  63 registros por hilo, unos 1536 hilos  Para grandes aplicaciones, su manejo es esencial
  • 48. Tipos de memoria: Memoria Local Introducción a la computación paralela con GPU,s  Destinada a la información local de cada hilo.  Para variables o vectores locales que no caben en sus respectivos registros  Tiene bastante capacidad y su velocidad es como la mem. Global.  Las nuevas arquitecturas han mejorado bastante su uso mediante las caches L1/L2.
  • 49. Tipos de memoria: Memoria Compartida Introducción a la computación paralela con GPU,s  Memoria dedicada a cada multiprocesador  Compartida por todos los hilos de un mismo bloque, útil para compartir información  Puede necesitar instrucciones de control de acceso y flujo para controlar los accesos.  Normalmente se copian los datos desde la mem. global en la memoria compartida
  • 50. Contenido Introducción a la computación paralela con GPU,s  Introducción a CUDA  Hardware  Software  Manejo de la memoria  Manejo de los hilos  Librerías  Cómo afrontar el desarrollo de una nueva aplicación
  • 51. Hilos CUDA Introducción a la computación paralela con GPU,s  Los hilos de CUDA se distribuyen automáticamente entre los SM  Para identificar el hilo y poder trabajar con su parte se usan las variables: int mi_ID=blockIdx.x * blockDim.x + threadIdx.x
  • 52. Control de flujo Introducción a la computación paralela con GPU,s  Todos los hilos de un mismo warp ejecutan al mismo tiempo la misma instrucción  Los kernels con varios posibles caminos se preparan para que todos ejecuten la misma instrucción pero cada hilo ejecute su respectiva funcionalidad if (x < 0.0) z=x-2.0; else z=sqrt(x);
  • 53. Control de flujo Introducción a la computación paralela con GPU,s  Para resolver los diferentes caminos, el compilador predica las instrucciones:  De esta forma todos los hilos ejecutan las mismas instrucciones. if (x < 0.0) z=x-2.0; else z=sqrt(x); p = (x<0.0); p: z = x-2.0; !p: z = sqrt(x);
  • 54. Sincronización Introducción a la computación paralela con GPU,s  Para sincronizar los hilos de forma interna al kernel, se utiliza la instrucción: __syncthreads()  Si se utiliza código condicional hay que asegurarse que todos los hilos alcancen la instrucción de sincronización
  • 55. Operaciones Atómicas Introducción a la computación paralela con GPU,s  Hay operaciones que necesitan asegurar que se van a ejecutar una tras otra en los diferentes hilos  necesarias para trabajar con la memoria compartida  Existen varias operaciones atómicas:  Incrementos, mínimos, máximos… __shared__ int cont; … cont++; //dentro de un kernel
  • 56. Ejemplo de Kernel Introducción a la computación paralela con GPU,s __global__ void sharedABMultiply(float *a,float* b,float *c,int N){ __shared__ float aTile[TILE_DIM][TILE_DIM], bTile[TILE_DIM][TILE_DIM]; int row = blockIdx.y * blockDim.y + threadIdx.y; int col = blockIdx.x * blockDim.x + threadIdx.x; float sum = 0.0f; aTile[threadIdx.y][threadIdx.x]=a[row*TILE_DIM+threadIdx.x]; bTile[threadIdx.y][threadIdx.x] = b[threadIdx.y*N+col]; __syncthreads(); for (int i = 0; i < TILE_DIM; i++) { sum += aTile[threadIdx.y][i]* bTile[i][threadIdx.x]; } c[row*N+col] = sum; } Mem compartida Indicación kernel registros Identifadores hilo Barrera para todos los hilos del mismo bloque
  • 57. Contenido Introducción a la computación paralela con GPU,s  Introducción a CUDA  Hardware  Software  Manejo de la memoria  Manejo de los hilos  Librerías  Cómo afrontar el desarrollo de una nueva aplicación
  • 58. Librerías basadas en CUDA Introducción a la computación paralela con GPU,s  Se desarrollaron muchas aplicaciones especificas  Mas tarde, comenzaron a aparecer varias librerías sobre CUDA para varios ámbitos:  CUBLAS: operaciones sobre algebra lineal  CUFFT : transformadas rápidas de Fourier  CUDPP: operaciones paralelas primitivas
  • 59. Librerías basadas en CUDA Introducción a la computación paralela con GPU,s  Thrust: desarrollada por uno de los desarrolladores de CUDA e incluida en la versión 4.  Ofrece una abstracción de la programación de los kernel  Implementa varios algoritmos paralelos de datos  Máximo, suma, Multiplicación de vectores, …
  • 60. Librerías basadas en CUDA Introducción a la computación paralela con GPU,s  CUVILib: librería que implementa sobre GPU algoritmos de visión por computador y procesamiento de imágenes. Cálculo de flujo de movimiento: Lucas and Kanade Algorithm
  • 61. Contenido Introducción a la computación paralela con GPU,s  Introducción a CUDA  Hardware  Software  Manejo de la memoria  Manejo de los hilos  Librerías  Cómo afrontar el desarrollo de una nueva aplicación
  • 62. Diseñar aplicación con CUDA Introducción a la computación paralela con GPU,s  1) La aplicación a desarrollar…  Hay algo similar en el SDK de CUDA?  En los foros de CUDA hay algún proyecto relacionado?  Hay algo en la red ? (google)  2) ¿Qué partes son paralelizables?  ¿tiene suficiente paralelismo?  CUDA es eficiente cuando trabaja con miles de hilos
  • 63. Diseñar aplicación con CUDA Introducción a la computación paralela con GPU,s  3) Dividir el problema en funcionalidades diferenciadas:  Alguna de las partes esta ya implementada?  Diseñar un kernel para cada funcionalidad..  Puede servir alguna de las librerías ya implementadas?  4) Va a existir mucha divergencia en los warp?  Hay mucho código condicional a las entradas?  La máxima eficiencia se consigue con la poca divergencia
  • 64. Diseñar aplicación con CUDA Introducción a la computación paralela con GPU,s  5) Habrá un problema con el ancho de banda?  El tiempo de trasferir la información entre la CPU y la GPU se verá recompensado por la ventaja de paralelizar el problema?  Para aplicaciones para varios kernels, es apropiado utilizar ciertas funciones en la GPU o conviene mover toda la funcionalidad en la GPU  Siempre tener en cuenta que el número de operaciones por dato debe ser alto para compensar las transferencias
  • 65. Diseñar aplicación con CUDA Introducción a la computación paralela con GPU,s  6.a) ¿El problema es de computación intensiva?  No hay que preocuparse tanto por la optimización de memoria  Cuidado si los cálculos son doubles  6.b) ¿O sin embargo es para trabajar con muchos datos?  Hay que utilizar muy bien los niveles de memoria
  • 66. Contenido Introducción a la computación paralela con GPU,s  GPU  Paralelismo  GPGPU  Introducción a CUDA  Aplicaciones  Conclusiones
  • 67. Aplicaciones en CUDA Introducción a la computación paralela con GPU,s  En la pagina de www.nvidia.com podemos encontrar una larga lista de aplicaciones especificas y modificaciones de programas para aprovechar esta tecnología, para diferentes ámbitos de aplicación:  Gobierno y defensa  Dinámica molecular  Bioinformática  Electrodinámica y electromagnetismo  Imágenes medicas  Combustibles y gases  Computación financiera  Extensiones de Matlab  Tratamiento de video y visión por computador  Modelado del tiempo y los océanos
  • 68. Aplicaciones en CUDA Introducción a la computación paralela con GPU,s  Actualmente estamos trabajando en:  Visión:  Aceleración algoritmos redes neuronales auto- organizativas (GNG,NG)  Reconstrucción escenarios 3D  Representación 3D objetos
  • 69. Aplicaciones en CUDA Introducción a la computación paralela con GPU,s  Actualmente estamos trabajando en:  CAD/CAM: Calculo de rutas de maquinas- herramienta para recrear modelos digitales Y axis Z axis X axis
  • 70. Contenido Introducción a la computación paralela con GPU,s  GPU  Paralelismo  GPGPU  Introducción a CUDA  Aplicaciones  Conclusiones
  • 71. CUDA para acelerar algoritmos  Buenas prácticas :  Paralelizar la mayor parte posible del algoritmo.  Disminuir las operaciones de memoria entre device y host  Organizar la memoria de forma que los accesos paralelos sean óptimos:  Copiando partes de la memoria global a la compartida  Transformando los datos para que los accesos sean concurrentes  Alinear y conjuntar la memoria para que en menos accesos se lean los datos necesarios.  Usar medidas tanto de tiempo como de ancho de banda utilizado para optimizar los algoritmos.
  • 72. Conclusiones  CUDA es una tecnología que permite obtener grandes rendimientos para problemas con un alto paralelismo.  Hay que tener claro su funcionamiento para saber si es adecuado y obtener el mayor rendimiento posible.  Programar en CUDA es fácil, pero no lo es obtener rendimiento.