Kepler. Contenidos de la charla. Kepler, Johannes ( ) 1. Presentación de la arquitectura

Documentos relacionados
Inside Kepler. I. Presentación de la arquitectura. Índice de contenidos [25 diapositivas] Kepler, Johannes ( )

Kepler. 1. Presentación de la arquitectura. Contenidos de la charla. Kepler, Johannes ( )

Kepler. 1. Presentación de la arquitectura. Índice de contenidos [25 diapositivas] Kepler, Johannes ( )

Contenidos [62 diapositivas] Málaga, del 15 al 24 de Julio, 2015

Explotando el rendimiento de la GPU FLOPS pico en doble precisión

La GPU. I. La tarjeta gráfica y su GPU. Indice de contenidos [36 diapositivas] El diagrama de bloques de la tarjeta gráfica

Descubriendo Kepler. 1. Presentación de la arquitectura. Agradecimientos. Indice de contenidos [46 diapositivas]

Introducción a la Arquitectura y Plataforma de Programación de Cómputo Paralelo CUDA (36 hrs) Instructor M. en C. Cristhian Alejandro Ávila-Sánchez

Arquitectura de aceleradores. Carlos Bederián IFEG CONICET GPGPU Computing Group FaMAF UNC

GPGPU ( GENERAL PURPOSE COMPUTING ON GRAPHICS PROCESSING UNITS)

Tema 3 GPUs: Introducción

Alejandro Molina Zarca

INTRODUCCIÓN A LA COMPUTACIÓN PARALELA CON GPUS

Ejemplos de optimización para Kepler Contenidos de la charla [18 diapositivas]

FUNDAMENTOS DE COMPUTACION INVESTIGACION PROCESADORES DIANA CARRIÓN DEL VALLE DOCENTE: JOHANNA NAVARRO ESPINOSA TRIMESTRE II

Modelos de computadores paralelos

Francisco J. Hernández López

Arquitecturas GPU v. 2015

GPU-Ejemplo CUDA. Carlos García Sánchez

V. OPTIMIZACIÓN PARA COMPUTACIÓN GPU EN CUDA

CUDA: MODELO DE PROGRAMACIÓN

Arquitectura de Computadoras. Clase 9 Procesamiento paralelo

MAGMA. Matrix Algebra on GPU and Multicore Architecture. Ginés David Guerrero Hernández

Arquitecturas y Computación de Alto Rendimiento SISTEMAS PARA COMPUTACIÓN DE ALTO RENDIMIENTO. Índice

Primeros pasos con CUDA. Clase 1

cuevogenet Paralelización en CUDA de la Dinámica Evolutiva de Redes Génicas Dirigido por: Fernando Díaz del Río José Luis Guisado Lizar

INTRODUCCIÓN A LA PROGRAMACIÓN DE GPUS CON CUDA

INTRODUCCIÓN A LA PROGRAMACIÓN EN CUDA. Francisco Javier Hernández López

Plan 95 Adecuado DEPARTAMENTO: ELECTRÓNICA CLASE: ELECTIVA DE ESPECIALIDAD ÁREA: TÉCNICAS DIGITALES HORAS SEM.: 4 HS. HORAS / AÑO: 64 HS.

Ejemplos de optimización para Kepler. 1. Balanceo dinámico de la carga. Contenidos de la charla [18 diapositivas]

TEMA 10 INTRODUCCIÓN A LOS SISTEMAS OPERATIVOS DISTRIBUIDOS. Introducción Hardware Software Aspectos de diseño

DESARROLLO DE APLICACIONES EN CUDA

Tile64 Many-Core. vs. Intel Xeon Multi-Core

TEMA 9. SISTEMAS OPERATIVOS DISTRIBUIDOS

Innovaciones y futuro de la GPU. Contenidos de la charla [30 diapositivas] Estados Unidos construirá dos supercomputadores insignia

Arquitectura de Computadores Problemas (hoja 4). Curso

CAR. Responsable : María del Carmen Heras Sánchez. Asesores Técnicos : Daniel Mendoza Camacho Yessica Vidal Quintanar.

PROCESAMIENTO DISTRIBUIDO

Múltiples GPU (y otras chauchas)

Tema 7. Mejora del rendimiento: introducción a la segmentación y a las arquitecturas paralelas

Computación de Propósito General en Unidades de Procesamiento Gráfico GPGPU. Clase 0 Lanzamiento del Curso. Motivación

CÓMPUTO DE ALTO RENDIMIENTO EN MEMORIA COMPARTIDA Y PROCESADORES GRÁFICOS

Introducción a Cómputo Paralelo con CUDA C/C++

Francisco Javier Hernández López

La memoria del PC. 1. La saga DDR. Índice de contenidos [25 diapositivas] Comparativa frente a otras tecnologías de almacenamiento de datos

CUDA (Compute Unified Device Architecture)

ARQUITECTURA DEL COMPUTADOR

PARADIGMA y LENGUAJES DE PROGRAMACIÓN

FLAG/C. Una API para computación matricial sobre GPUs. M. Jesús Zafont Alberto Martín Francisco Igual Enrique S. Quintana-Ortí

Apellidos Nombre Grupo. Arquitectura e Ingeniería de Computadores. Examen Final (Teoría parte primer cuatrimestre). 18/06/2012

Programando la GPU con CUDA

Práctica 1 - Rendimiento *

Organización del Computador I. Introducción e Historia

Multiprocesadores de Memoria Compartida

GRADO EN INGENIERÍA DE COMPUTADORES

FUNDAMENTOS DE COMPUTACIÓN PARA CIENTÍFICOS. CNCA Abril 2013

Computación de Altas Prestaciones Sistemas computacionales

Arquitecturas de Altas Prestaciones y Supercomputación

Agradecimientos. Contenidos [60 diapositivas] Recursos avanzados de CUDA

MULTIPROCESADORES COMERCIALES. José M. Cámara v. 2.0

La elección de la CPU. 1. Introducción. Indice de contenidos [23 diapositivas] El procesador central o CPU

UNIVERSIDAD DE GUADALAJARA

Arquitectura y Tecnología de Computadores (09/10) Organización. Jerarquía de Memoria

Arquitectura de Computadoras

PROGRAMACIÓN EN EL ENTORNO CUDA EN APLICACIONES DE MECÁNICA COMPUTACIONAL. PRUEBAS, RESULTADOS Y CONCLUSIONES CONCLUSIONES:

Desarrollo de Software Numérico de Simulación de Flujos Geofísicos Basado en Volúmenes Finitos Usando Hardware Gráfico

Francisco J. Hernández López

CARACTERIZACION DE PROBLEMAS A SOLUCIONAR MEDIANTE PROGRAMACIÓN MULTIPROCESO DE MEMORIA COMPARTIDA. Autor ERIKA VIVIANA RIAÑO BEJAR

Trabajo Práctico Número 6

Entornos de programación paralela basados en modelos/paradigmas

Programación Gráfica de Altas Prestaciones

CAR.

1. Partes del ordenador. Nuevas Tecnologías y Sociedad de la Información

Arquitectura de GPUs

TEMA 1: EJECUCIÓN PARALELA: FUNDAMENTOS(I)

Programa Educativo: Licenciatura en Sistemas PROGRAMA DE ESTUDIO

Quinta tarea: Existen varias versiones del 80486:

PROGRAMACIÓN AVANZADA DE GPUs PARA APLICACIONES CIENTÍFICAS

Arquitecturas GPU v. 2013

Arquitectura de Computadoras para Ingeniería

Intel lanza su procesador Caballero Medieval habilitado para Inteligencia Artificial

8 abril 2014 IFEMA Madrid spain.ni.com/nidays. spain.ni.com

RECONOCIMIENTO DE SUS COMPONENTES - LA PC POR DENTRO:

CAPACIDAD COMPUTACIONAL: Tabla 1: Resumen de algunas características de GPUs CUDA.

Tema: Microprocesadores

MPP. MIMD Computador Masivamente Paralelo

Arquitectura de Computadores Problemas (hoja 2). Curso

Paralelismo _Arquitectura de Computadoras IS603

La compra del PC modelo para un ingeniero. Manuel Ujaldón Martínez Departamento de Arquitectura de Computadores Universidad de Málaga

También denominada adaptador de vídeo, es uno de los componentes más básicos e importantes del ordenador, ya que nos va a permitir visualizar toda la

TEMA 2: Organización de computadores

ARQUITECTURA DE VON NEUMANN Y HARVARD

Arquitectura e Ingeniería de Computadores. Examen Parcial. 7/02/2012

Organización lógica Identificación de bloque

Procesamiento de imágenes en GPUs mediante CUDA. I. Introducción. Indice de contenidos

SISTEMAS OPERATIVOS Arquitectura de computadores

Programación Concurrente y Paralela. Unidad 1 Introducción

Requisitos Técnicos de actualización de Cluster Heterogéneo

Introducción a la programación de códigos paralelos con CUDA y su ejecución en un GPU multi-hilos

Transcripción:

Kepler RIO 2014 Río Cuarto, 20 de Febrero, 2014 Manuel Ujaldón Martínez Dpto. Arquitectura de Computadores. Univ. Málaga. NVIDIA CUDA Fellow. Contenidos de la charla 1. Presentación de la arquitectura [7 diapositivas] 2. La memoria y el transporte de datos [9] 3. Los cores SMX [9] 4. Desplegando todo el paralelismo en Kepler [12] 5. Mejoras funcionales [7] 1. Paralelismo dinámico. 2. Hyper-Q. 6. Optimizaciones futuras [] 1. Vectorización: El tamaño del warp. 2. Stacked-DRAM: Memoria apilada sobre el procesador. 2 1. Presentación de la arquitectura Kepler, Johannes (1571-1630) Autor de las leyes del movimiento planetario. Primera ley: Las órbitas de los planetas son planas. El sol está en el plano de la órbita. La trayectoria del planeta respecto del sol es una elipse en la que el sol ocupa uno de los fotos. Segunda ley: El radio vector que une al sol y el planeta barre áreas iguales en tiempos iguales. Un planeta se mueve más rápidamente en su perihelio que en su afelio, y mientras más excéntrica sea su órbita, mayor será la diferencia de velocidad entre sus extremos. Tercera ley: Los cuadrados de los períodos de revolución en torno al sol son proporcionales a los cubos de los semiejes mayores de las órbitas. La velocidad media con que un planeta recorre su órbita disminuye a medida que el planeta está más lejos del sol. La influencia que el sol ejerce sobre los planetas disminuye con la distancia. 4

Nuestra Kepler también tiene tres leyes Y tres innovaciones principales SMX: Un multiprocesador con más recursos y menos consumo. Consumo Rendimiento Paralelismo dinámico: La GPU es más autónoma, puede lanzar kernels CUDA. Programabilidad Hyper-Q: Múltiples kernels pueden compartir los SMX. 5 6 Resumen de sus rasgos más sobresalientes Fabricación: 7100 Mt. integrados a 28 nm. por TSMC. Arquitectura: Entre 7 y 15 multiprocesadores SMX, dotados de 192 cores cada uno. Modelos más populares: K20 (con 13 SMX), K20X (14), K40 (15). Aritmética: Más de 1 TeraFLOP en punto flotante de doble precisión (formato IEEE-754 de 64 bits). Los valores concretos dependen de la frecuencia de cada modelo. Con sólo 10 racks de servidores, podemos alcanzar 1 PetaFLOP. Principales innovaciones en el diseño de los cores: Paralelismo dinámico. Planificación de hilos (Hyper-Q). Modelos comerciales de Kepler: GeForce y Tesla frente a frente GeForce GTX Titan Diseñada para jugar: El precio es prioritario (<500 ). Gran disponibilidad/popularidad. Poca memoria de vídeo (1-2 GB.). Relojes un poco más rápidos. Hyper-Q sólo para streams CUDA. Perfecta para desarrollar código que luego pueda disfrutar Tesla. Orientada a HPC: Fiabilidad (tres años de garantía). Pensada para conectar en clusters. Más memoria de vídeo (6-12 GB.). Ejecución sin descanso (24/7). Hyper-Q para procesos MPI. GPUDirect (RDMA) y otras coberturas para clusters de GPUs. 7 8

Kepler GK110: Disposición física de las UFs para la Tesla K40 dotada de 15 SMXs El multiprocesador SMX Planificación y emisión de instrucciones en warps Front-end Ejecución de instrucciones. 512 unidades funcionales: - 192 para aritmética entera. - 192 para aritmética s.p. - 64 para aritmética d.p. - 32 para carga/almacen. - 32 para SFUs (log,sqrt, ) Back-end Acceso a memoria Interfaz 9 10 La memoria en las Teslas: Fermi vs. Kepler 2. La memoria y el transporte de datos Tarjeta gráfica Tesla M2075 M2090 K20 K20X K40 Registros de 32 bits / multiprocesador Tamaño caché L1 + mem. compartida Anchura de los 32 bancos de m.c. Frecuencia de SRAM (la de la GPU) Ancho de banda L1 y mem. compartida Tamaño de la caché L2 Ancho de banda L2 (bytes por ciclo) L2 en ops. atómicas (dir. compartida) L2 en ops. atómicas (dirs. separadas) Anchura del bus de memoria DRAM Frecuencia de la memoria (MHz) Ancho de banda DRAM (no ECC) Tamaño DRAM (todas GDDR5) Bus externo de conexión con la CPU 32768 32768 65536 65536 65536 64 KB. 64 KB. 64 KB. 64 KB. 64 KB. 32 bits 32 bits 64 bits 64 bits 64 bits 575 MHz 650 MHz 706 MHz 732 MHz 745, 810, 875 73.6 GB/s. 83.2 GB/s. 180.7 GB/s 187.3 GB/s 216.2 GB/s. 768 KB. 768 KB. 1.25 MB. 1.5 MB. 1.5 MB. 384 384 1024 1024 1024 1/9 por clk 1/9 por clk 1 por clk 1 por clk 1 per clk 24 por clk 24 por clk 64 por clk 64 por clk 64 per clk 384 bits 384 bits 320 bits 384 bits 384 bits 2x 1500 2x 1850 2x 2600 2x 2600 2 x 3000 144 GB/s. 177 GB/s. 208 GB/s. 250 GB/s. 288 GB/s. 6 GB. 6 GB. 5 GB. 6 GB. 12 GB. PCI-e 2.0 PCI-e 2.0 PCI-e 3.0 PCI-e 3.0 PCI-e 3.0 12

Diferencias en la jerarquía de memoria: Fermi vs. Kepler Motivación para usar la nueva caché de datos 48 Kbytes extra para expandir el tamaño de la caché L1. Posee el mayor ancho de banda en caso de fallo a caché. Usa la caché de texturas, pero de forma transparente al programador, y elimina el tiempo de configuración de ésta. Permite que una dirección global pueda buscarse y ubicarse en esta caché, utilizando para ello un camino separado del que accede a caché L1 y memoria compartida. Es flexible, no requiere que los accesos estén alineados. Gestionada automáticamente por el compilador. 13 14 Cómo utilizar la nueva caché de datos Comparativa con la memoria de constantes Declarar los punteros con el prefijo "const restrict ". El compilador automáticamente mapeará la carga de esos valores en la caché para usar el nuevo camino de datos a través de la memoria de texturas. A comparar Memoria de constantes Caché de datos de sólo lectura Disponibilidad Desde CUDA Compute Capability 1.0 A partir de CCC 3.5 (aunque desde CCC 1.0 se podía usar la memoria de texturas manualmente) global void saxpy(float x, float y, const float * restrict input, float * output) { size_t offset = threadidx.x + (blockidx.x * blockdim.x); Tamaño Implementación hardware Acceso Mejor rasgo 64 Kbytes 48 Kbytes Una partición de la memoria global (DRAM) A través de una caché de 8 Kbytes que posee cada multiprocesador SM(X) Latencia muy baja Caché de texturas que expande la L1 (SRAM) Mediante un camino aparte en el cauce de segmentación gráfico Gran ancho de banda } // El compilador utilizará la nueva caché para "input" output[offset] = (input[offset] * x) + y; 15 Peor rasgo Mejor escenario de uso Menor ancho de banda Acceso con el mismo coeficiente (sin usar threadidx) a un pequeño conjunto de datos de sólo lectura Mayor latencia Cuando el kernel es memory-bound, aún después de haber saturado el ancho de banda con memoria compartida 16

Comunicación entre las memorias de las GPU En Fermi se puso en marcha GPU Direct 1.0 para permitir la comunicación entre GPUs dentro de clusters de CPUs. Kepler + CUDA 5 soportan GPUDirect-RDMA [Remote Direct Memory Access] Esto permite una transferencia más directa entre GPUs. Normalmente, el enlace es PCI-express o InfiniBand. Receptor Transmisor 17 18 GPUDirect-RDMA en Maxwell Resultados preliminares de GPUDirect-RDMA (mejoran con CUDA 6.0 & OpenMPI) La situación será más compleja en la próxima generación de GPUs, pues tendrán un espacio de memoria unificado con la CPU. Latencia GPU-GPU (microsegundos) Tiempo de ejecución total (segundos) Tamaño del mensaje (bytes) Número lateral Latencia inter-nodo usando: Mejor escalado en MPI: GPUs Tesla K40m (no GeForces). Código: HSG (bioinformática). Librería MPI MVAPICH2. 2 nodos de GPU. 19 ConnectX-3, IVB 3GHz. 4 procesos MPI por nodo. 20

Un breve recordatorio de CUDA GPU Multiprocesador N Multiprocesador 2 Multiprocesador 1 Hilo Bloque de hilos 3. Los cores SMX Registros Procesador 1 Memoria compartida Registros Procesador 2 Registros Procesador M Memoria global Unidad de Control SIMD Caché para constantes Caché para texturas Memoria integrada en la GPU Memoria externa a la GPU (incluida dentro de la tarjeta gráfica) Malla 0 (grid) Malla 1 22 y de cómo va escalando la arquitectura Kepler en perspectiva: Recursos hardware y rendimiento pico Arquitectura Tesla G80 Tesla GT200 Fermi GF100 Fermi GF104 Kepler GK104 Kepler GK110 Tarjeta Tesla (modelo comercial) Modelo GeForce similar en cores Generación de GPU (y CCC) M2075 M2090 K20 K20X K40 GTX 470 GTX 580 - GTX Titan - Fermi GF100 (2.0) Kepler GK110 (3.5) Marco temporal CUDA Compute Capability (CCC) N (multiprocs.) 2006-07 2008-09 2010 2011 2012 2013-14 1.0 1.2 2.0 2.1 3.0 3.5 16 30 16 7 8 15 Multiprocesadores x (cores/multipr.) Número total de cores Tipo de multiprocesador Distancia de integración de los trans. Frecuencia de la GPU (para gráficos) Frecuencia de los cores (para GPGPU) 14 x 32 16 x 32 13 x 192 14 x 192 15 x 192 448 512 2496 2688 2880 SM SMX con paralelismo dinámico y HyperQ 40 nm. 40 nm. 28 nm. 28 nm. 28 nm. 575 MHz 650 MHz 706 MHz 732 MHz 745,810,875 MHz 1150 MHz 1300 MHz 706 MHz 732 MHz 745,810,875 MHz M (cores/multip.) Número de cores 8 8 32 48 192 192 128 240 512 336 1536 2880 Número de cores (simple precisión) GFLOPS (pico en simple precisión) Número de cores (doble precisión) GFLOPS (pico en doble precisión) 448 512 2496 2688 2880 1030 1331 3520 3950 4290 224 256 832 896 960 515 665 1170 1310 1680 23 24

GPU Boost Permite acelerar hasta un 17% el reloj de la GPU si el consumo de una aplicación es bajo. Se retornará al reloj base si se sobrepasan los 235 W. Se puede configurar un modo persistente de vigencia permanente de un reloj, u otro para ejecuciones puntuales. Consumo sin apurar Maximiza los relojes gráficos sin salirse de los márgenes de consumo nominales Rendimiento Board Power (Watts) Cada aplicación tiene un comportamiento distinto en relación al consumo Aquí vemos el consumo medio (vatios) en la Tesla K20X de aplicaciones muy populares en el ámbito HPC: 160 120 80 40 Reloj base Reloj a máxima frecuencia 745 MHz 810 MHz 875 MHz 0 AMBER ANSYS Black ScholesChroma GROMACS GTC LAMMPS LSMS NAMD Nbody QMCPACK RTM SPECFEM3D 25 26 Aquellas aplicaciones que menos consumen pueden beneficiarse de una frecuencia mayor En el caso de la K40, se definen tres saltos de frecuencia con incrementos del 8.7%. GPU Boost frente a otras implementaciones Resulta mejor un régimen estacionario para la frecuencia desde el punto de vista del estrés térmico y la fiabilidad. Reloj acelerado #2 Reloj acelerado #1 875 MHz 810 MHz Reloj de la GPU Otros fabricantes Boost Clock # 2 Boost Clock # 1 Base Clock # 1 Tesla K40 Reloj base 745 MHz Conmutación automática de reloj Relojes deterministas 235W Consumo máximo. Referencia (peor caso). 235W Consumo moderado. Ej: AMBER 235W Consumo bajo. Ej: ANSYS Fluent A 875 MHz, la K40 mejora el rendimiento hasta en un 40% respecto a la K20X. Y no sólo mejoran los GFLOPS, también lo hace el ancho de banda con memoria (GDDR5). 27 Valor por defecto Opciones predefinidas Interfaz con el usuario Duración del reloj acelerado Otros fabricantes Reloj acelerado Bloquear a la frecuencia base Panel de control Aprox. 50% del tiempo de ejec. Tesla K40 Reloj base 3 niveles: Base, Boost1 o Boost2 Comandos en el shell: nv-smi 100% del tiempo de ejecución 28

Lista de comandos GPU Boost Ejemplo Comando Efecto nvidia-smi -q -d CLOCK id=0000:86:00.0 nvidia-smi -q -d SUPPORTED_CLOCKS Muestra los relojes que soporta nuestra GPU nvidia-smi -ac <MEM clock, Graphics clock> Activa uno de los relojes soportados nvidia-smi -pm 1 Habilita el modo persistente (el reloj sigue vigente tras el apagado) nvidia-smi -pm 0 Modo no persistente: El reloj vuelve a su configuración base tras apagar la máquina nvidia-smi -q -d CLOCK Consulta el reloj en uso nvidia-smi -rac Inicializa los relojes en su configuración base nvidia-smi -acp 0 Permite cambiar los relojes a los usuarios que no son root 29 30 Del multiprocesador SM de Fermi GF100 al multiprocesador SMX de Kepler GK110 4. Desplegando todo el paralelismo en Kepler 32

Comparación entre la emisión y ejecución de instrucciones (front-end vs. back-end) Mejoras en concurrencia y paralelismo Fermi (GF100) Kepler (GK110) En Kepler, cada SMX puede emitir 8 warp-instrucciones por ciclo, pero debido a limitaciones por recursos y dependencias: 7 es el pico sostenible. Búsqueda y emisión (front-end) Puede emitir 2 warps, 1 instr. cada uno. Total: Máx. 2 warps por ciclo. Warps activos: 48 en cada SM, seleccionados de entre 8 bloques máx. En GTX580: 16*48= 768 warps activos. Puede emitir 4 warps, 2 instrs. cada uno. Total: Máx. 8 warps por ciclo. Warps activos: 64 en cada SMX, seleccionados de entre 16 bloques máx. En K40: 15 * 64 = 960 warps activos. Ejecución en SM-SMX (back-end) 32 cores (1 warp) para "int" y "float". 16 cores para "double" (1/2 warp). 16 unids. de carga/almacen. (1/2 warp). 4 unids. de funcs. especiales (1/8 warp). Total: Hasta 5 warps concurrentes. 192 cores (6 warps) para "int" y "float". 64 cores para "double" (2 warps). 32 unids. de carga/almacen. (1 warp). 32 unids. de funcs. especiales (1 warp). Total: Hasta 16 warps concurrentes. 4-5 es una buena cantidad para códigos limitados por instrucción. <4 en códigos limitados por memoria o latencia. 33 Generación de GPU Modelo hardware CUDA Compute Capability (CCC) Número de hilos / warp (tamaño del warp) Máximo número de warps / Multiprocesador Máximo número de bloques / Multiprocesador Máximo número de hilos / Bloque Máximo número de hilos / Multiprocesador Fermi Kepler GF100 GF104 GK104 GK110 2.0 2.1 3.0 3.5 32 32 32 32 48 48 64 64 8 8 16 16 1024 1024 1024 1024 1536 1536 2048 2048 Mejoras cruciales para ocultar latencias Máx. concurrencia en cada SMX 34 Gigathread, o cómo el programa es devorado por el procesador Cada malla (grid) contiene un número de bloques, que son asignados a los SMXs (hasta 16 en Kepler, 8 en Fermi). Los bloques se dividen en warps o grupos de 32 hilos. Los warps se ejecutan para cada instrucción de los hilos (hasta 64 warps activos en Kepler, 48 en Fermi). Ejemplo: Expresar todo el paralelismo posible: Los SMX son más anchos que los SM Tetris (baldosa = warp_instr.): - Emite 4 warp_instrs. - Ejecuta hasta 10 warps = 320 hilos. - Warp_instrs. son simétricos y se ejecutan todos en 1 ciclo. Correspondencia de colores: para instrucciones int. para instrs. float. double. Emite 4 warp_instrs. load/store. log/sqrt. El jugador planifica los warps! Se pueden rotar las fichas si no hay dependencias entre sus 4 warps instr. warp G80: Tarda 4 ciclos en ejecutar cada warp_instrs. Ejemplo: Kernel con bloques de 384 hilos (12 warps). Fermi: - Emite 2. - Ejecuta hasta 5. Bloque 0: Bloque 1: sub fmadd fdiv64 load sqrt Kepler: - Emite 4 warps x 2 instrs. - Ejecuta hasta 16 warp_instrs. (512 unidades funcionales). 64 FPU DP 32 SFU 32 LD/ST 35 Ejecuta hasta 10 warp_instrs. G80: 16 U.F. SM en Fermi: 100 U.F. paralelas. 6x32 = 192 ALUs 192 FPU SP SMX en Kepler: 512 U.F. paralelas. 36

Paralelismo en SMX: A nivel de hilo (TLP) y a nivel de instrucción (ILP) Incrementar paralelismo verticalmente con ILP: Si las instrs. son más independientes Incrementar el paralelismo horizontalmente a través del TLP: Más warps concurrentes (bloques más grandes y/o más bloques activos en cada SMX). Los SMX pueden potenciar el ILP disponible de forma intercambiable con el TLP: Es mucho mejor que Fermi para esto. Algunas veces es más fácil incrementar el ILP que el TLP (por ejemplo, desenrrollar un lazo en un pequeño factor): El número de hilos puede estar limitado por el algoritmo o los límites HW. Necesitamos el ILP para lograr un elevado IPC (Instrs. Per Cycle). 37 En las GPUs Kepler concurren todas las formas de paralelismo. Ejemplo: K40. 2: De instrs. (ILP) 1: De tareas (TLP) 3: De datos (SIMD) 4: Vectorial (warp = 32) (todo este volumen representa menos, 60x15 warps) SMX 0 La K40 puede ejecutar hasta 512x15 = 7680 SMX 15 La K40 puede planificar y emitir hasta 64x15 warps en un ciclo: 30720 hilos en 1.14 ns. hilos en un ciclo si éstos son del color adecuado. Imagina un tetris 3D con 15 cubiletes y hasta 64 baldosas cayendo simultáneamente en cada uno de ellos, porque así funciona la K40 planificando warps con el máx. paralelismo. 38 Cómo trabaja el front-end de la GPU: (1) Planificación de warps La conexión entre front-end y back-end: (2) Emisión de warps En los 5 ciclos ilustrados, hemos podido ejecutar hasta aquí. En Fermi hay déficit en las SFUs (azul), mientras que en Kepler lo hay en las unidades de carga/almacenamiento (verde). Kepler equilibra la doble precisión (rojo) y tiene gran superávit en computación int y float, señal de que los códigos reales tienen mayor presencia de instrs. naranjas, y sobre todo, amarillas. SM (Fermi) SMX (Kepler) 39 SM (Fermi) SMX (Kepler) 40

Cómo trabaja el back-end de la GPU: (2) Ejecución de warps Caso estudio: Polinomios de Zernike Suponemos que en el momento en que comenzamos a monitorizar la ejecución quedaban pendientes de ejecutar: Un par de warps de punto flotante en simple precisión (naranjas). Otro par de warps en doble precisión (rojos). Parece conveniente que el front-end vaya un poco adelantado respecto al back-end (prebúsquedas) con objeto de maximizar el throughput. Recursos GPU Fermi Kepler Kernel de los polinomios de Zernike Mejor ALU FPU 32 bits FPU 64 bits Carga/ almacen. SFU 32% 32% 16% 16% 4% 37.5% 37.5% 12.5% 6.25% 6.25% 54% 21% 0% 25% 0% Kepler Fermi Kepler Fermi Fermi Fermi se encuentra más equilibrada para este caso. SM (Fermi) SMX (Kepler) 41 La distribución de recursos en Kepler mejora la ejecución de la aritmética entera, pero empeora la de punto flotante y carga/almacenamiento. El resto no se utilizan. 42 Utilizar el CUDA Visual Profiler para conocer qué tal se adapta nuestra aplicación 5. Mejoras funcionales: Paralelismo dinámico y Hyper-Q 43

Principales mejoras hardware Qué es el paralelismo dinámico? Computación a gran escala (grandes tamaños de problema) Generación de GPU Modelo hardware Compute Capability (CCC) Fermi Novedades funcionales: Kepler GF100 GF104 GK104 GK110 Limitación Impacto 2.0 2.1 3.0 3.5 Máxima dimensión X de la malla 2^16-1 2^16-1 2^32-1 2^32-1 Software Generación de GPU Modelo hardware Compute Capability (CCC) Paralelismo dinámico Hyper-Q Fermi Kepler Tamaño del problema GF100 GF104 GK104 GK110 Limitación Impacto 2.0 2.1 3.0 3.5 No No No Sí Hardware No No No Sí Hardware Estructura del problema Planificación de hilos 45 La habilidad para lanzar nuevos procesos (mallas de bloques de hilos) desde la GPU de forma: Dinámica: Basándonos en datos obtenidos en tiempo de ejecución. Simultánea: Desde múltiples hilos a la vez. Independiente: Cada hilo puede lanzar una malla diferente. CPU GPU CPU GPU Fermi: Sólo la CPU puede generar trabajo en GPU. Kepler: La GPU puede generar trabajo por sí sola. 46 Así se hacían las cosas en la era pre-kepler: La GPU era un mero esclavo del host o CPU Gran ancho de banda en las comunicaciones: Externas: Superior a 10 GB/s (PCI-express 3). Internas: Superior a 100 GB/s (memoria de vídeo GDDR5 y anchura de bus en torno a 384 bits, que es como un séxtuple canal en CPU). Y así se pueden hacer con Kepler: Las GPUs lanzan sus propios kernels Antes la GPU era un co-procesador Con Kepler, la GPU is más autónoma: Entra en escena el paralelismo dinámico CPU GPU CPU GPU Función Lib Lib Función Función Init Alloc GPU CPU Operación 1 Operación 2 Operación 3 47 Ahora los programas van más rápido y se expresan de una forma más natural. 48

% utilización de la GPU % utilización de la GPU El comportamiento de los warps nos enseña que la GPU no es un procesador regular Factores impredecibles en tiempo de ejecución dificultan un reparto equilibrado de la carga computacional entre los multiprocesadores. Aquí vemos un ejemplo de la varianza existente entre los 8 últimos warps ejecutados en cada SM: Hyper-Q En Fermi, diversos procesos de CPU ya podían enviar sus mallas de bloques de hilos sobre una misma GPU, pero un kernel no podía comenzar hasta que no acabase el anterior. En Kepler, pueden ejecutarse simultáneamente hasta 32 kernels procedentes de: Varios procesos de MPI, hilos de CPU o streams de CUDA. Esto incrementa el porcentaje de ocupación temporal de la GPU. FERMI 1 sola tarea MPI activa KEPLER 32 tareas MPI simultáneas 49 50 Sin Hyper-Q: Multiproceso por división temporal 100 Síntesis final A B C D E F 50 0 A B C D E F Tiempo Con Hyper-Q: Multiproceso simultáneo 100 50 0 C B A E D A Tiempo ganado Procesos en CPU mapeados sobre GPU 51 F 0 D C B D C F E B A F E Kepler simboliza la generación de GPUs de Nvidia para 2013-14, más adecuada para miles de cores. Habilita todas las formas de paralelismo a gran escala: De tareas, de instrucciones, de datos y vectorial. Hace énfasis en la eficiencia energética y en ampliar la programabilidad del modelo CUDA. La GPU es más autónoma, pero a la vez admite mayor interacción con la CPU. También se mejora la jerarquía de memoria y las conexiones entre las memorias de las GPUs. La conexión SMX-DRAM será determinante en el futuro. 52

Bibliografía recomendada Muchas gracias por vuestra atención Descripciones y especificaciones técnicas de los modelos Tesla vigentes en la actualidad: http://www.nvidia.com/object/tesla_product_literature.html Documentación sobre CUDA para Kepler: Best Practices Guide: http://docs.nvidia.com/cuda/cuda-c-best-practices-guide Kepler Tuning Guide: http://docs.nvidia.com/cuda/kepler-tuning-guide Webinars [de GTC'12 a GTC'13, continua actualización]: http://www.nvidia.com/object/webinar.html Especialmente recomendables: "CUDA 5 and beyond" [por Mark Harris]. "New features in the CUDA programming model" [Stephen Jones & Lars Nyland]. "Introduction to dynamic parallelism" [Stephen Jones]. "Inside the Kepler Tesla K20 family" [Julia Levites & Stephen Jones]. 53 Siempre a vuestra disposición en el Dpto. de Arquitectura de Computadores de la Universidad de Málaga: e-mail: ujaldon@uma.es Teléfono: +34 952 13 28 24. Página Web: http://manuel.ujaldon.es (versiones disponibles en español e inglés). 54