Optimización de Operaciones Matriciales en Plataformas Multi-GPU

Transcripción

Optimización de Operaciones Matriciales en Plataformas Multi-GPU
HPC&A
Optimización de Operaciones Matriciales en
Plataformas Multi-GPU
Enrique S. Quintana-Ortí
Albacete – Julio 2011
1
“Disclaimer”
Disclaimer

No es un curso sobre cómo programar rutinas de
computación
t ió matricial
ti i lab
bajo
j nivel
i l sobre
b GPU
GPUs
•
•

HPC&A
V. Volkov et al. “Benchmarking
g
GPUs to tune dense linear algebra”,
SC08
L-S. Chien, “Hand-tuned SGEMM on
GT200 GPU”, TR Tsing Hua Univ.,
Taiwan
+
Lo siento si en algunas ocasiones los números
dejan mal a “algunas” compañías…
Albacete – Julio 2011
2
Sistemas lineales enormes:
Estimación del campo gravitatorio


HPC&A
Proyecto GRACE
www.csr.utexas.edu/grace
t
d /
Resolver y = H x0 + Є,
H → m x n densa
m = 66.000
observaciones
n = 26.000 parámetros
para un modelo de
resolución de 250 km
Albacete – Julio 2011
3
Problemas de valores propios enormes:
Simulaciones de dinámica molecular


HPC&A
Proyecto de
bioinformática estructural
www.chaconlab.org
Calcular los valores
propios de un sistema
(A,B)
A,B → n x n densas
n = 40,000-300,000
Albacete – Julio 2011
4
Problemas de computación matricial

Los problemas de computación matricial
aparecen en muchas
h aplicaciones
li
i
científicas,
i tífi
d
de
ingeniería e industriales y algunos de ellos son
enormes…

BEM para problemas de electromagnetismo y acústica
Análisis de la polarización dieléctrica de nanoestructuras
Reducción de modelos de circuitos VLSI


Albacete – Julio 2011
HPC&A
5
Problemas de computación matricial

Los problemas de computación matricial densa
suelen
l ttener un alto
lt coste
t computacional:
t i
l


HPC&A
Resolver Ax = b, con A → n x n densa requiere O(n3) flops
...pero a las GPUs les “encantan” los problemas
grandes de mucho coste y con patrones
grandes,
regulares de acceso
Albacete – Julio 2011
6
Índice



HPC&A
Bibliotecas para computación matricial densa
Optimizaciones en plataformas mono-GPU
Programación de plataformas multi
multi-GPU
GPU
Albacete – Julio 2011
7
Índice



HPC&A
Bibliotecas para computación matricial densa
Optimizaciones en plataformas mono-GPU
Programación de plataformas multi
multi-GPU
GPU
Albacete – Julio 2011
8
Bibliotecas para CMD:
BLAS-1 y BLAS-2

En un tiempo no muy lejano, los procesadores
vectoriales
t i l d
dominaban
i b lla titierra…

...realizar la mayor parte de cálculos como
operaciones vectoriales


HPC&A
BLAS-1: axpy (y := y + α x), dot (y := xT y)
BLAS 2: gemv (y := α y + β A x),
BLAS-2:
x) trsv (x := T-1 b)
Albacete – Julio 2011
9
Bibliotecas para CMD:
BLAS-3

“The attack of the killer micros”, Brooks, 1989…

…realiza la mayor parte de los cálculos como
operaciones matriciales

HPC&A
BLAS-3: gemm (C := α C + β A B), trsm (X := T-1 B)
Albacete – Julio 2011
10
Bibliotecas para CMD:
La importancia de BLAS


HPC&A
Proporcionar rendimiento “portable”
Reconocido por los fabricantes

Intel MKL
ACM ACML
IBM ESSL
GotoBLAS (K. Goto ahora en Microsoft)

NVIDIA CUBLAS



Albacete – Julio 2011
11
Bibliotecas para CMD

HPC&A
Operaciones de computación matricial más
complejas:
l j




Sistemas de ecuaciones lineales
Problemas de mínimos cuadrados
Cálculo de valores propios
Cálculo de valores singulares y rango matricial
LAPACK
www.netlib.org/lapack
Albacete – Julio 2011
libflame
www.cs.utexas.edu/users/flame
12
Índice


Bibliotecas para computación matricial densa
Optimizaciones en plataformas mono-GPU






HPC&A
Rendimiento básico
Rellenado
Construyendo con bloques
Computación híbrida CPU-GPU
Transferencia de datos
Programación de plataformas multi-GPU
Albacete – Julio 2011
13
Consideraciones iniciales

HPC&A
¿Calcular XYZ en la CPU o en la GPU?

“Naturaleza” de XYZ
Tamaño (coste) de XYZ

Sobrecostes:




Reservar/liberar memoria en la GPU
Transferir datos entre CPU y GPU
Realizar llamadas a CUDA/CUBLAS
Albacete – Julio 2011
14
Entorno de experimentación

Propósito general

HPC&A
NVIDIA

Intel Dual Xeon Quad-Core
Quad Core E5410

8 [email protected] GHz

Pico SP/DP 149/75 GFLOPS

8 GB FB-DIMM

GotoBLAS2 1.11

Tesla C1060 (x4 = S1070)

240 SP [email protected] GHz

Pico SP/DP 933/78 GFLOPS

4 GB DDR3

CUBLAS 2.3

AMD Phenom Quad-Core

4 [email protected] GHz

4 GB DDR2

GotoBLAS 1.26

Fermi GTX480

480 SP [email protected] GHz

1.5 GB GDDR5

CUBLAS 2.3
Albacete – Julio 2011
15
Rendimiento básico en una GPU:
gemm
C


:=
C
+
A
HPC&A
*
B
Alta reutilización de datos 2n3 flops vs. 3 n x n
datos
Variantes:


3 dimensiones: m,
m n,
n k
A or B pueden aparecer transpuestas o no
Albacete – Julio 2011
16
Versión
Rendimiento básico en una GPU:
gemm
Albacete – Julio 2011
Sp
C1060 ((with
ith transfer)
t
f ) HPC2.26
2&A26
C1060 (w/out transfer)
2.55
GTX480 ((with transfer))
3.43
GTX480 (w/out transf.)
4.25
17
Versión
Rendimiento básico en una GPU:
gemm
Albacete – Julio 2011
Sp
C1060 ((with
ith transfer)
t
f ) HPC0.92
0&A92
C1060 (w/out transfer)
0.95
GTX480 ((with transfer))
2.17
GTX480 (w/out transf.)
2.43
18
Rendimiento básico en una GPU:
gemm

HPC&A
Conclusiones

CUBLAS exhibe un rendimiento muy irregular: pobre
optimización (uso de la gemm de V. Volkov para problemas
d di
de
dimensión
ió 32k)

Coste de las transferencias amortizado para problemas
grandes
d
Albacete – Julio 2011
19
Rellenado
C



HPC&A
:=
C
+
A
*
B
Añade un coste despreciable: 2n3 → 2n3+ Є flops
Aplicable a muchas otras operaciones
Puede hacerse transparente al usuario
Albacete – Julio 2011
20
Rellenado
Albacete – Julio 2011
HPC&A
21
Construyendo con bloques


HPC&A
Otras operaciones de BLAS-3

Variantes del producto matricial: trmm, symm

Resolución de (múltiples) sistemas triangulares: trsm

Actualización simétrica de rango k: syrk

Actualización simétrica de rango
g 2k: syr2k
y
El mismo ratio de computación/comunicaciones
que gemm
Albacete – Julio 2011
22
Construyendo con bloques:
trsm
X


:=
T-1
*
HPC&A
B
Alta reutilización de datos: O(n3) flops vs. O(n2)
datos
Variantes:


2 dimensiones: m,
m n
T puede estar transpuesta, a la derecha/izquierda de B, ser
triangular inferior o superior
superior, etc
etc.
Albacete – Julio 2011
23
Construyendo con bloques:
trsm
:=
HPC&A
*

Construir trsm como una secuencia de gemm más
unas pequeñas trsm

BLAS “para pobres”: realizar la mayor parte de los
cálculos como gemm
Albacete – Julio 2011
24
Construyendo con bloques:
trsm
Albacete – Julio 2011
HPC&A
Version
Sp
GEMM as B.B.
1.50
25
Computación híbrida CPU-GPU
x :=


A-1
HPC&A
* b
Para A densa, descomponerla en factores
triangulares
g
Varios métodos de factorización:



Factorización LU (eliminación Gaussiana) para A general
Factorización de Cholesky para A s.p.d.
Factorización QR para sistemas sobredeterminados
Albacete – Julio 2011
26
Computación híbrida CPU-GPU:
factorización de Cholesky
A


=
L
*
HPC&A
LT
En cada iteración, calcular un bloque de
columnas (p
(panel)) de L
Sobreescribir (la parte triangular inferior de) A con
L
Albacete – Julio 2011
27
Computación híbrida CPU-GPU:
factorización de Cholesky
HPC&A
…
1ª iter.
2ª iter.
3ª iter.
A11 = L11 L11T
A21 = L21 := A21 L11-T
A22 := A22 – L21 L21T
Albacete – Julio 2011
28
Computación híbrida CPU-GPU:
factorización de Cholesky

Estrategia:



“Descargar” las partes computacionalmente
poco intensivas a la CPU
Inicialmente, transferir toda la matriz
A a la GPU
En cada iteración:


Albacete – Julio 2011
HPC&A
Mover A11 a la CPU,, factorizar el bloque
q allí,,
y enviar el resultado de vuelta a la GPU
Actualizar A21 y A22 en la GPU
29
Computación híbrida CPU-GPU:
factorización de Cholesky
Albacete – Julio 2011
HPC&A
Version
Sp
C1060 (with transfer)
1.77
GTX480 (with transfer)
1.77
30
Transferencia de datos

HPC&A
¿Quién está al cargo de las transferencias entre
GPU y CPU?

El usuario (programador) via CUDA

Sistema: parte de un runtime

GMAC
SuperMatrix/libflame

GPUSs

Albacete – Julio 2011
31
Índice



HPC&A
Bibliotecas para computación matricial densa
Optimizaciones en plataformas mono-GPU
Programación de plataformas multi
multi-GPU
GPU


Memoria compartida
Clusters de GPUs
Albacete – Julio 2011
32
Programación de plataformas multi-GPU

HPC&A
¿Cómo programamos estos sistemas?
GPU
#1
PCI-e
bus
CPU(s)
GPU
#3
GPU
#2
GPU
#4
Ver como…


Un sistema multiprocesador con memoria compartida
Un cluster (memoria distribuida)
Albacete – Julio 2011
33
Memoria compartida

HPC&A
Multiprocesador con memoria compartida:
GPU
#1
CPU(s)
PCI-e
bus
GPU
#3
GPU
#2
P1+
cache
Main
memory
GPU
#4
P3+
cache
P2+
cache
h
P4+
cache
No es trivial
 Sistema heterogéneo: n CPUs + m GPUs
 Múltiples espacios de direcciones: 1 + m
Albacete – Julio 2011
34
Memoria compartida

HPC&A
Multiprocesador con memoria compartida:
GPU
#1
CPU(s)
PCI-e
bus
GPU
#3
GPU
#2
GPU
#4
P1+
cache
Main
memory
P3+
cache
P2+
cache
h
P4+
cache
No es trivial → ¡Runtime!
 Sistema heterogéneo: Planificación (temporal+espacial)
 Múltiples espacios de direcciones: Transferencia de datos
Albacete – Julio 2011
35
Planificación en plataformas multi-GPU
HPC&A
 Factorización de Cholesky
…
1ª iter.
2ª iter.
3ª iter.
A11 = L11 L11T
A21 = L21 := A21 L11-T
A22 := A22 – L21 L21T
Albacete – Julio 2011
36
Planificación en plataformas multi-GPU
HPC&A
 Gran cantidad de tareas…
…
1ª iter.
2ª iter.
3ª iter.
pero cuidado, deben realizarse en cierto orden
Albacete – Julio 2011
37
Planificación en plataformas multi-GPU
HPC&A
 ¡Gran cantidad de paralelismo de tareas!
En iteraciones
diferentes
1ª iter.
2ª iter.
En la misma
iteración
Albacete – Julio 2011
38
Planificación en plataformas multi-GPU
Código
g escalar
loop: ld
addd
sd
addi
subi
bnez
Albacete – Julio 2011
f0,
f4,
f4,
r1,
r2
r2,
r2,
HPC&A
Procesador superescalar:
p
0(r1)
f0, f2
0(r1)
r1, #8
r2
r2, #1
loop
IF
ID
ISS
UF0
UF1
UF2
39
Planificación en plataformas multi-GPU

HPC&A
¿Es posible algo similar para CMD?
1ª iter.
2ª iter.
3ª iter.
3
iter
Albacete – Julio 2011
for (k=0; k<nb; k++){
F: Chol(A[k,k]);
for (i=k+1; i<nb; i++)
T
Trsm(A[k,k],
(A[k k] A[i
A[i,k]);
k])
T
T:
for (i=k+1; i<nb; i++){
P: Syrk(A[i,k],A[i,i]);
for (j=k+1; j<i; j++)
P:
Gemm(A[i,k], A[j,k], A[i,j]);
}
}
40
Planificación en plataformas multi-GPU

HPC&A
¿Es posible algo similar para CMD?
1ª iter.
2ª iter.

Aplicar técnicas de superescalaridad a nivel
de bloque

Implementación por software

Paralelismo a nivel de thread/tarea

Objetivo: núcleos/GPUs de la plataforma
3ª iter.
3
iter
Albacete – Julio 2011
41
Planificación en plataformas multi-GPU

HPC&A
L/E de bloques fijan dependencias, como en el caso escalar
l
loop:
ld
f0 0(
f0,
0(r1)
1)
addd f4, f0, f2
sd
f4 0(r1)
f4,
addi r1, r1, #8 …
f
for
(k 0 k
(k=0;
k<nb;
b k++){
k ){
Chol(A[k,k]);
for (i=k+1; i<nb; i++)
Trsm(A[k,k], A[i,k]);
…
Las tareas y sus dependencias forman un árbol (DAG)
Albacete – Julio 2011
…
42
Planificación en plataformas multi-GPU

Código por bloques:
HPC&A
Multi-core/multi-GPU
for (k=0; k<nb; k++){
Chol(A[k,k]);
for (i=k+1; i<nb; i++)
Trsm(A[k,k], A[i,k]); …


¿Cómo generamos el árbol de tareas?
¿Qué
Q éd
debemos
b
ttener en cuenta
t all ejecutar
j
t llas ttareas d
dell á
árbol?
b l?
Albacete – Julio 2011
43
Planificación en plataformas multi-GPU

Uso de un runtime:


Decodificación (ID):
Generar el árbol de
tareas con un “análisis
análisis
simbólico” del código en
tiempo de ejecución
Emisión (ISS): Ejecución
de las tareas del árbol
consciente de la
arquitectura
Albacete – Julio 2011
ID

ISS
HPC&A
N0
N1
N2
44
Planificación en plataformas multi-GPU

Etapa de decodificación:

ID
ISS
“Análisis simbólico” del código
HPC&A
N0
N1
N2
for (k=0; k<nb; k++){
Chol(A[k,k]);
for (i=k+1; i<nb; i++)
Trsm(A[k,k], A[i,k]); …
Albacete – Julio 2011
Árbol de tareas:

…
Código por bloques:
45
Planificación en plataformas multi-GPU

Etapa de emisión:

Planificación temporal de las
tareas, de acuerdo a las
dependencias
p
Mapeado (planificación
espacial) de tareas a recursos,
consciente de la localidad
…

ID
Albacete – Julio 2011
ISS
HPC&A
N0
N1
N2

46
Memoria compartida

HPC&A
Multiprocesador con memoria compartida:
GPU
#1
CPU(s)
PCI-e
bus
GPU
#3
GPU
#2
GPU
#4
P1+
cache
Main
memory
P3+
cache
P2+
cache
h
P4+
cache
No es trivial → ¡Runtime!
 Sistema heterogéneo: Planificación (temporal+espacial)
 Múltiples espacios de direcciones: Transferencia de datos
Albacete – Julio 2011
47
Múltiples espacios de direcciones

HPC&A
Software Distributed-Shared Memory (DSM)



Underlying distributed memory hidden from the users
Well-known approach, not too efficient as a middleware for
general apps.
Regularity of dense linear algebra operations makes a
difference!
Albacete – Julio 2011
48
Múltiples espacios de direcciones

HPC&A
Naive approach:



…

Before executing a kernel, copy input data to GPU memory
After execution, retrieve results back to CPU memory
Easy to program (wrappers to kernels)
O(n3) Transfers between CPU and GPU
Albacete – Julio 2011

49
Múltiples espacios de direcciones

HPC&A
Multiprocesador con memoria compartida
GPU
#1
CPU(s)
PCI-e
bus
GPU
#3
GPU
#2
P1+
cache
Main
memory
GPU
#4
P3+
cache
P2+
cache
h
P4+
cache
Claves para reducir el número de transferencias



Mapeado estático/planificación dinámica
Cachés software
Políticas de coherencia entre memoria de las GPUs y memoria principal
Albacete – Julio 2011
50
Múltiples espacios de direcciones

HPC&A
¿Dónde? Mapeado estático de tareas a GPUs


Las actualizaciones sobre un bloque se realizan siempre en
la misma GPU (owner-computes rule)
Mapeado cíclico:
í
row, column, 2-D
2
Albacete – Julio 2011
51
Múltiples espacios de direcciones

HPC&A
¿Cuándo? Planificación dinámica de las tareas

…

Tan pronto como se han satisfecho las dependencias…
Posiblemente priorizando tareas del camino crítico
Albacete – Julio 2011

52
Múltiples espacios de direcciones

HPC&A
Caché software
(fl ibilid d ffrente
(flexibilidad
t a
eficiencia)




Mantener un mapa de
memoria
O
Operar
a nivel
i ld
de bl
bloque
(amortizar sobrecoste del
software con #flops)
Una vez los datos están
en GPU,
GPU mantenerlos allí
mientras sea posible
LRU (o mejor)
Albacete – Julio 2011
GPU
#1
CPU(s)
PCI-e
bus
GPU
#3
GPU
#2
GPU
#4
53
Múltiples espacios de direcciones

HPC&A
Coherencia entre GPUs
y memoria
i principal
i i l

GPU
#1
Write-back
CPU(s)
PCI-e
bus
GPU
#3
Albacete – Julio 2011
GPU
#2
GPU
#4
54
Múltiples espacios de direcciones

HPC&A
Coherencia entre GPUs


Write-invalidate
Requiere transferencia a
t é de
través
d memoria
i
principal (¡YA NO!)
Albacete – Julio 2011
GPU
#1
CPU(s)
PCI-e
bus
GPU
#3
GPU
#2
GPU
#4
55
Runtimes

SuperMatrix (UT@Austin and UJI)



HPC&A
Bloques escritos/leídos definidos implícitamente por las
operaciones
Aplicable solo a operaciones de CMD
C
codificadas
f
en
libflame
SMPSs (BSC) and GPUSs (BSC and UJI)

Lenguaje de tipo OpenMP+compilador+runtime
#pragma css task inout(A[b*b])
void
id Chol(double
Ch l(d bl *A);
*A)

Aplicable a códigos con paralelismo de datos sobre
diferentes plataformas: multi-core,
multi core multi-GPU,
multi GPU Grid,…
Grid
Albacete – Julio 2011
56
Version
Sp
C1060
1.25
Programación de plataformas multi-GPU
BASIC
Albacete – Julio 2011
HPC2.91
&A
2D
4.04
CACHE+WI WT
CACHE+WI,WT
4 55
4.55
WB
7.00
57
Programación de plataformas multi-GPU

HPC&A
¿Cómo programamos estos sistemas?
GPU
#1
PCI-e
bus
CPU(s)
GPU
#3
GPU
#2
GPU
#4
Ver como…


Un sistema multiprocesador con memoria compartida
Un cluster (memoria distribuida)
Albacete – Julio 2011
58
Programación de plataformas multi-GPU

HPC&A
Cluster
GPU
#1
CPU(s)
PCI-e
bus
GPU
#3
GPU
#2
P1+
mem.
Interconnect
GPU
#4
P3+
mem
mem.
P2+
mem.
P4+
mem.
Diferencias:
 Procesos en lugar de threads
 Aplicación de paso de mensajes (MPI)
Albacete – Julio 2011
59
Programación de plataformas multi-GPU

HPC&A
¿Dónde y cómo?


Mapeado estático de tareas y datos a recursos
Transferencias de datos embebidas en el código MPI
Albacete – Julio 2011
60
Programación de plataformas multi-GPU

Aproximación simple:
D t en memoria
Datos
i principal
i i l




Antes de ejecuctar un kernel,
copiar los datos de entrada a la
GPU
Después de la ejecución,
recuperar los resultados
Programación fácil (wrappers a
kernels)
Copias asociadas a la ejecución
de kernels: O(n3) transferencias
entre
t CPU y GPU
Albacete – Julio 2011
HPC&A
GPU
#1
CPU(s)
PCI-e
bus
GPU
#3
Interconnect
GPU
#2
GPU
#4
61
Programación de plataformas multi-GPU

Solución alternativa: Datos
en las
l GPU
GPUs




Antes de enviar un dato,
recuperarlo a la memoria principal
del nodo (compactando durante el
proceso)
Después de recibir un dato,
llevarlo a la GPU
Programación fácil (wrappers a
rutinas de MPI)
Copias ligadas a la comunicación:
O( 2) transferencias
O(n
t
f
i entre
t CPU y
GPU
Albacete – Julio 2011
HPC&A
GPU
#1
CPU(s)
PCI-e
bus
GPU
#3
Interconnect
GPU
#2
GPU
#4
62
Implementaciones basadas en MPI

PLAPACK (UT@Austin)




HPC&A
Uso de objetos (PLA_Obj) para vectores, matrices,
vectores proyectados, etc., con la distribución embebida
Distribución
ó cíclica
í
PMB
Diseño modular: toda la comunicación se realiza a través
d copias
de
i (PLA
(PLA_Copy)
C
) y reducciones
d
i
(PLA
(PLA_Reduce)
R d
) de
d un
tipo a otro de objeto
Elemental (Jack Poulson)


Basedo en PLAPACK, pero C++
Distribución cíclica por elementos
Albacete – Julio 2011
63
Version
Sp
2 C1060
1.40
Programación de plataformas multi-GPU
4 C1060
Albacete – Julio 2011
HPC3.45
&A
8 C1060
6.82
16 C1060
11 77
11.77
32 C1060
26.01
64
Version
Sp
2 C1060
1.40
Programación de plataformas multi-GPU
4 C1060
Albacete – Julio 2011
HPC6.13
&A
8 C1060
8.42
16 C1060
12 54
12.54
32 C1060
21.84
65
Reconocimientos

UJI


F. Igual, G. Quintana
UT


HPC&A
The FLAME team
BSC

Computer Sciences
Department
p
Albacete – Julio 2011
66
Más información…
información

libflame (UT & UJI)


HPC&A
http://www.cs.utexas.edu/users/flame
GPUSs ((BSC & UJI))


http://www.bsc.es
http://www.bsc.es/plantillaG.php?cat id=385
http://www.bsc.es/plantillaG.php?cat_id
385
Albacete – Julio 2011
67
HPC&A
¡Gracias por vuestra atención!*
atención!
*Espero que os hayáis entretenido tanto como en XXX
Albacete – Julio 2011
68
Preguntas

HPC&A
XXX
Albacete – Julio 2011
69

Documentos relacionados