(NVIDIA) GPU Arch

Presenter Notes

Tres conceptos claves de la arquitectura GPU

Presenter Notes

Tres conceptos claves

  1. Muchos núcleos simples que corren en paralelo.
  2. Empaquetar muchos cores y que corran el mismo flujo de instrucciones.
    • SIMD implícito.
    • Instrucciones escalares, el hardware "vectoriza".
  3. Entremezclar hilos en un solo core para evitar stalls: ocultamiento de latencia.

    • De memoria.
    • De operaciones largas.
  4. Kayvon Fatahalian, From Shader Code to a Teraflop: How GPU Shader Cores Work, 2011.

Presenter Notes

Muchos núcleos simples: shader core

1 shader

Presenter Notes

Comparación con CPU

Shader vs CPU

CPU baja latencia de un hilo a costa del throughput.
El trabajo puede ser secuencial o paralelo.

GPU tiene alta latencia, pero alto thoroughput.
Asume trabajo en paralelo.

Presenter Notes

Muchos shaders

16 shaders

Se usa el área de la caché, branch prediction, scheduler (OoOE), prefetcher, etc.

Presenter Notes

Muchos shaders, comparten instrucciones

sharing instruction stream

Amortizar aun más el área de Fetch/Decode:
SIMD adentro de la GPU.

Presenter Notes

Hard SIMD no implica soft SIMD

  • SSE: hw SIMD, sw SIMD.
    • Recordar instrucciones como blend de SSE4.1.
  • GPU: hw SIMD, sw MIMD.
    • Grupos de ALUs comparten instruction stream.
    • NVIDIA: warp, grupos de 32 hilos.
    • ATI: wavefront, grupos de 64 hilos.

¿Cómo lo hace?: internal masks, branch syncronization stack, instruction markers.
W.Fung, I.Sham, G.Yuan, T.Aamodt, Dynamic Warp Formation and Scheduling for Efficient GPU Control Flow, MICRO40, 2007.

Ilusión de que cada hilo tiene su propio PC

Writing programs that operate on SIMD Lanes in this highly independent MIMD mode is like writing programs that use lots of virtual address space on a computer with a smaller physical memory. Both are correct, but they may run so slowly that the programmer could be displeaced with the result.

Hennessy, Patterson, CAAQA5, p.303.

Presenter Notes

Ejecución condicional

Presenter Notes

Muchos hilos para ocultar latencia

Latency hiding

Presenter Notes

Muchos hilos para ocultar latencia

Cambio de contexto es prácticamente gratis.

Pero tengo que poder almacenar el contexto (PC, regs, flags) en algún lugar muy cercano.

Tensión entre:

  • tamaño del contexto
  • capacidad de ocultar la latencia.

Ejemplo

Cada SM (streaming multiprocessor) de la Tesla C2070/75 (Fermi) tiene 32768 registros de 32 bits, o sea 128 KiB.

Presenter Notes

Máximo ocultamiento de latencia

Context size and latency

Presenter Notes

Mínimo ocultamiento de latencia

Context size and latency

Presenter Notes

Límites del latency-hiding

  • Las aplicaciones memory-bound, no tienen chance.
    • Hay que conocer la arithmetic intensity del problema (CAAQA5).

Arithmetic instensity chart

  • El tamaño del contexto por core en cada SM.
    • G80: 8192×4/16 = 2 KB , GT200: 16384×4/24 = 2.66 KB , GF100:32768×4/32 = 4 KB, GK100: 65536×4/192 = 1.33 KB.
  • El número máximo de hilos por SM:
    • G80: 768, GT200: 1024, GF100: 1536, GK100: 2048.
    • Notar que una C2075 puedo tener 15×1536 = 23040 hilos corriendo!

Presenter Notes

Si hacemos todo bien

Tesla C2075:

  • 15 SM.
  • 32 lanes per SM.
  • 1 FMA precisión simple por lane (2 floating point ops).
  • 1.15 GHz clock frequency.

15×32×2×1.15 = 1.104 TFLOPS precisión simple

Presenter Notes

Jerarquía de Memoria

Presenter Notes

Estilo CPU

CPU memory hierarchy

El nudo está en la caché.

Presenter Notes

Estilo GPU

GPU memory hierarchy

Elimina la caché, pero da 6x de ancho de banda de memoria.

Presenter Notes

Estilo GPU moderno

Modern GPU memory hierarchy

Agrega caché manual (shared memory), caché L1 y caché L2.
¡Cuiadado! La caché tiene propósitos distintos que en la CPU.

Notar la pirámide inversa en la jerarquía (GF100)

Registros: 128 KB × 15 ~= 2 MB.
Caché L1: [16 KB × 15, 48 KB × 15 ] ~= [0.25 MB, 0.75 MB].
Caché L2: 0.75 MB.

Presenter Notes

Intensidad aritmética y performance pico

Ejemplo, C2075

  • 1 TFLOPS
  • 150 GBps

Necesito 1024GFLOP / (150GBps/4) = 27 FLOP/word (operaciones de punto flotante por lectura de fp32).

¿Cómo lograr esto? Ya veremos más adelante:

Presenter Notes

Memoria: throughput y latencia

  • Registros: 8.1 TB/s, 1 ciclo.
  • Shared: 1.6 TB/s, ~6 ciclos.
  • Principal: 150 GB/s, ~200,400 ciclos.

Para comparar

  • Una instrucción FMA toma entre 18 y 22 ciclos.
  • Ancho de banda de PCIe 3.0 x16 15.75 GB/s.

Presenter Notes

Arquitectura Detallada

Presenter Notes

Recordemos Pollack's Rule

Microprocessor (single core) performance scales roughly as the square root of its complexity, where transistor count is often used as a proxy to quantify complexity.

(M. Själander, M. Martonosi, S. Kaxiras, Power-Efficient Computer Architectures, Synthesis Lectures on Computer Architecture, 2014)

Presenter Notes

En el otro extremo de la regla de Pollack

Ejemplo de la arquitectura bit.LITTLE de ARM

Las GPUs son muchísimos núcleos pequeños

  • Gran throughput.
  • pero con Gran latencia.

Presenter Notes

Arquitectura general

  • Muchos núcleos.
  • Caché L2.
  • Memoria paralela.

Ali Bakhoda et.al, Analyzing CUDA Workloads Using a Detailed GPU Simulator, ISPASS, 2009.

Presenter Notes

Detalles

  • Comunicación de programas y datos a través de PCIe. Es un acelerador u offloader.
  • Muchos núcleos, del orden de decenas.
  • Todos los núcleos ejecutan en mismo programa.
  • Entre 2 y 8 canales de comunicación de memoria.
  • Memoria global entre 0.5 GiB y 12 GiB.
  • La red de interconexión de las memorias intenta maximizar el paralelismo. No hay necesariamente una localidad.
  • Los memory controllers juntan pedidos de memoria y cuando están listos avisan a los cores (async access).

Presenter Notes

Arquitectura de un (shader) core

Ali Bakhoda et.al, Analyzing CUDA Workloads Using a Detailed GPU Simulator, ISPASS, 2009.

Presenter Notes

Tipos de memoria

Además de la memoria global que pueden ver todos los cores, hay memoria local.

Memoria constante / de parámetros ~8 KiB

Caché L1 read-only, broadcast a todas las ALUs si piden el mismo dato.

Memoria de texturas ~16 KiB

Caché L1 read-only, con un interleaving para que las lecturas espaciales sean óptimas con el 4D blocking scheme.

Presenter Notes

Tipos de memoria

Memoria local / Cache L1 ~16 KiB

Caché L1 non-coherent de memoria global. Write policy depende de si es memoria local o global.

... evict-on-write for global memory, writeback for local memory ...

http://gpgpu-sim.org/manual/index.php/Main_Page#L1_Data_Cache

Memoria compartida ~32 KiB

Memoria de lecto-escritura tipo scratchpad highly-banked (32-way) para lecturas paralelas y broadcast para lecturas al mismo banco.

http://www.3dgep.com/optimizing-cuda-applications/

Presenter Notes

Shared, conflictos