Arquitectura de aceleradores · 2014. 5. 6. · ¿Y AMD? En GPUs, más o ... Memoria 384-bit GDDR5,...
Transcript of Arquitectura de aceleradores · 2014. 5. 6. · ¿Y AMD? En GPUs, más o ... Memoria 384-bit GDDR5,...
Arquitectura de aceleradores
Carlos BederiánIFEG – CONICET
GPGPU Computing Group – FaMAF – [email protected]
Contenidos
● Cómo llegamos hasta acá
● Qué hay ahora
● Qué hace
● Cómo lo uso
● Hacia dónde parece que vamos
¿Qué compro?● $: GeForce GTX 750Ti, GTX 760
Radeon R9 270, R9 270X, R9 280
● $$: GeForce GTX 770, GTX 780, GTX 780Ti
Radeon R9 280X, R9 290, R9 290X
● $$$$: GeForce GTX Titan, GTX Titan Black
Radeon R9 295X2
● $$$$$$$$: GTX Titan Z, Tesla K10, K20, K20X, K40
FirePro W9000, W9100, S10000
Xeon Phi 3120, 5120, 7120
● Interfaz externa● Tipo, ancho de banda, coherencia
● Cache L2● Tamaño, ancho de banda
● Controladores de memoria● Ancho, frecuencia
● Elementos de cómputo● Cantidad, frecuencia● Detalles internos
Cosas interesantes
CUDA en el hardware
● Bloques completos son asignados a SMs
● Única (?) forma rápida de cooperar
● Bloques divididos en paquetes de 32 hilos llamados warps
● El hardware ejecuta warps de manera ~atómica
● Se intercalan los warps en las unidades de ejecución
CC 2.0 - Fermi
● Ejecución:● Scheduling de hasta 48 warps● 2 warps en ejecución● 16 cores por warp, 2x frecuencia● FP64: ½ FP32 (Tesla), 1/8 (GeForce)
● Registros● ~21 floats/ints por hilo, 64 max (!!!)
● Mem. compartida + Caché L1● 64KB: 16+48 o 48+16● Broadcast o banked access
CC 2.0 (cont.)
● Caché de constantes● 8KB● Sólo broadcast● Un ciclo de latencia
● Hardware de texturas● 12KB de caché, acceso espacial● Interpolación● Generación de direcciones
● Coordenadas normalizadas● Condiciones de contorno
CC 2.1 (GTX 460)
● Superescalar● 2 warps por ciclo● Hasta dos instrucciones independientes por warp en ejecución (dual issue)
● Distinto balance● FP64: 1/12 FP32● Más SFUs● Menos LD/ST● Más unidades de texturas
Insostenible
06/2005 12/2005 06/2006 12/2006 06/2007 12/2007 06/2008 12/2008 06/2009 12/2009 06/2010 12/20100
50
100
150
200
250
300
130nm
90nm
65nm
55nm
40nm
TD
P (
W)
Power budget
● Zócalo PCI Express: 75W
● Cables PEG
● 6 pines: 75W
● 8 pines: 150W
● Estándar PCI-SIG: 300W (Slot + 6 pines + 8 pines)
CC 3.0 - Kepler
● Ejecución● Scheduling de 64 warps● 4 warps simultáneos
● Dual issue como CC 2.1● 32 cores por warp
● Doble de registros● 32 floats/ints por hilo
● Diseñado para gaming● FP64: 1/12 FP32
● ~2x performance/watt
CC 3.0 – Cooperación
● Mejoras para kernels complejos
● Operaciones atómicas en memoria global más rápidas
● ¿Y si no uso atomics para cooperar?
● Ancho de banda de memoria compartida duplicado
● ¡Pero sigo necesitando barreras lentas!
● Un warp está sincronizado implícitamente
● Pre-Kepler: Memoria compartida para intercambiar
datos intra-warp (peligroso)
CC 3.0 – shfl● shfl: Intercambio de datos dentro de un warp
● No requiere memoria compartida● Más rápido que memoria compartida sin barreras
● ¿Cómo lo uso?● Difícil: #include <sm_30_intrinsics.h>● Fácil: CUB, Thrust ya usan
CC 3.0 – Texturas
● Antes: 128 slots de texturas que deben ser administrados
● Establecer un binding antes de ejecutar kernels
● Overhead de llamadas al driver
● Engorroso
● Ahora: Bindless textures
● Uso directo
● Texturas ilimitadas por kernel
CC 3.5 – Kepler 2.0
● Diseñado para cómputo
● FP64: 1/3 FP32
● Hasta 255 registros/hilo
● 48 KB de caché de
texturas sólo lectura
● __ldg()
● const * __restrict__
CC 3.5 – Grid Management Unit
● Pre-Kepler: 3 colas de trabajo (kernels, upload, download)● Dependencias falsas al serializar streams
● HyperQ: 32 colas independientes● No hay sorpresas con streams● CUDA Multi-Process Service
● Dynamic Parallelism● Los kernels pueden encolar otros kernels
● ¡Recursión!● Pausa y continuación de kernels
CC 3.5 – Funnel shift
● Nueva instrucción: shf.{l,r}(a, b, n)
● Concatena dos operandos de 32 bit en uno de 64
● Shift n bits hacia izquierda (shf.l) / derecha (shf.r)
● Devuelve 32 bits más (shf.l) / menos (shf.r) significativos
● ¡Rotación en una instrucción!
● ¡Bitcoins!
● Criptografía
CC 5.0 - Maxwell
● 192 es raro, reducción a 128
● Subdivisión en 4:● Conectar todos los cores a todos los registros es caro
● No más cores compartidos entre schedulers
● Shared sigue accesible a todos
● ~2X performance/watt
Futuro
Futuro (cont.)
● NVLink 2.0 – Coherencia de caché
● ¿Coherente con qué CPU?
● Denver – Arquitectura ARM de NVIDIA
● Ancho (7-issue), ILP alto
● Consorcio OpenPOWER
● IBM, NVIDIA, Micron, Mellanox, Samsung, Google...
● IBM licencia POWER8
● NVIDIA licencia NVLink
Memoria 3D● Ancho de banda normalmente limitado por:
● Cantidad de pines
● Calidad de señal
¿Y AMD?● En GPUs, más o menos lo mismo
HSA● En arquitecturas heterogéneas, más avanzados que el resto
● Implementaciones de HSA: Kaveri, ¿Playstation 4?
El elefante en la habitación
● 1997: MMX (64 bits, enteros)
● 1999: SSE (128 bits, float)
● 2001: SSE2 (double, enteros)
● SSE3, SSSE3, SSE4.1, SSE4.2, SSE4a...
● 2011: AVX (256 bits, float, double)
● 2013: AVX2 (enteros), FMA3 – scatter / gather
● 2016: AVX-512 (512 bits) – opmasks
Xeon Phi
Hm, suena familiarTesla K40 Xeon Phi 7120X
Vector Warp, 32 elementos* KNI (512 bits: 16 FP32, 8 FP64)
Unidades 15 SMX 61 coresRecursos por unidad
6 warps 1 core P54C1 unidad KNI
SMT 64 warps por SMX(~11 por unidad de ejecución)
4 hilos por core
Frecuencia 745 – 875 MHz 1238 – 1333 MHzFLOPS 4.3 TFLOPS FP32
1.4 TFLOPS FP642.4 TFLOPS FP321.2 TFLOPS FP64
Memoria 384-bit GDDR5, 6GHz, 12GB 512-bit GDDR5, 5.5GHz, 16GBBandwidth 288 GBps 354 GBpsTDP 245W
(5.8 GFLOPS FP64 / W)300W(4.1 GFLOPS FP64 / W)
Proceso TSMC HP 28nm Intel Tri-gate 22nm
Knights Landing (2015)
● 72 cores, arquitectura Silvermont (Atom)
● 2 unidades AVX-512 por core
● ~3 TFLOPS FP64
● Memoria 3D + Memoria DDR4
● Standalone o acelerador PCIe
● Intel 14nm
Eso es todo amigos
¿Preguntas?