Comunicaciones Escalables en Memoria Compartida para Paso de

Anuncio
Introducción
Comunicaciones Eficientes en Memoria Compartida: smpdev
Evaluación del Rendimiento
Conclusiones
Comunicaciones Escalables en Memoria
Compartida para Paso de Mensajes en Java
Sabela Ramos*, Guillermo L. Taboada, Juan Touriño,
Ramón Doallo
Grupo de Arquitectura de Computadores, Universidade de A Coruña (España)
{sramos,taboada,juan,doallo}@udc.es
XXI Jornadas de Paralelismo (JP2011), La Laguna
S. Ramos*, G. L. Taboada, J. Touriño, R. Doallo
Comunicaciones Escalables en Memoria Compartida para MPJ
Introducción
Comunicaciones Eficientes en Memoria Compartida: smpdev
Evaluación del Rendimiento
Conclusiones
Outline
1
Introducción
Java para HPC
2
Comunicaciones Eficientes en Memoria Compartida: smpdev
F-MPJ: Fast MPJ
Detalles de Implementación
3
Evaluación del Rendimiento
Configuración Experimental
Micro-Benchmark de Primitivas MPJ
Análisis de Rendimiento en Aplicaciones MPJ
4
Conclusiones
S. Ramos*, G. L. Taboada, J. Touriño, R. Doallo
Comunicaciones Escalables en Memoria Compartida para MPJ
Introducción
Comunicaciones Eficientes en Memoria Compartida: smpdev
Evaluación del Rendimiento
Conclusiones
Java para HPC
Java para HPC
Características:
Built-in networking
Built-in multi-threading
Portable, independiente de
la plataforma
Programación Paralela en Java:
Orientado a Objetos
Ampliamente extendido
Threads en Memoria Compartida
Java Sockets
Java RMI
Message-Passing in Java (MPJ)
S. Ramos*, G. L. Taboada, J. Touriño, R. Doallo
Comunicaciones Escalables en Memoria Compartida para MPJ
Introducción
Comunicaciones Eficientes en Memoria Compartida: smpdev
Evaluación del Rendimiento
Conclusiones
Java para HPC
Programación en Memoria Compartida
Lenguajes Compilados
(C/Fortran):
MPICH2: ssm, shm, sshm.
MPICH2: Nemesis.
POSIX threads
OpenMP
S. Ramos*, G. L. Taboada, J. Touriño, R. Doallo
Java:
Java Threads
Framework de Concurrencia
(ThreadPools, Tasks ...)
Parallel Java (PJ)
Java OpenMP (JOMP and
JaMP)
Comunicaciones Escalables en Memoria Compartida para MPJ
Introducción
Comunicaciones Eficientes en Memoria Compartida: smpdev
Evaluación del Rendimiento
Conclusiones
Java para HPC
Paso de Mensajes en Java
El Paso de Mensajes es el principal modelo de programación HPC.
Aproximaciones de Implementación
APIs implementadas:
RMI.
PVM-like.
Wrapper a una biblioteca nativa
vía JNI. (e.g., bibliotecas MPI:
mpiJava.
OpenMPI, MPICH).
Sockets.
S. Ramos*, G. L. Taboada, J. Touriño, R. Doallo
MPJ.
Otras.
Comunicaciones Escalables en Memoria Compartida para MPJ
MPJava
X
Jcluster
X
X
Parallel Java
X
X
Java para HPC
X
X
X
X
mpiJava
X
P2P-MPI
X
MPJ Express
X
MPJ/Ibis
X
X
JMPI
X
X
F-MPJ
X
X
X
Other APIs
JGF MPJ
API
mpiJava 1.2
Shared Memory
InfiniBand
Communication
support
Myrinet
Java NIO
Socket
impl.
Java IO
Pure Java Impl.
Introducción
Comunicaciones Eficientes en Memoria Compartida: smpdev
Evaluación del Rendimiento
Conclusiones
X
X
X
X
X
X
X
X
X
X
X
X
X
S. Ramos*, G. L. Taboada, J. Touriño, R. Doallo
X
X
X
X
Comunicaciones Escalables en Memoria Compartida para MPJ
Introducción
Comunicaciones Eficientes en Memoria Compartida: smpdev
Evaluación del Rendimiento
Conclusiones
F-MPJ: Fast MPJ
Detalles de Implementación
Dispositivos de Comunicación en F-MPJ
MPJ Applications
F−MPJ Library
device layer
omxdev
JVM
native comms
ibvdev
JNI
niodev/iodev
smpdev
Java Sockets
Java Threads
Open−MX
IBV
TCP/IP
Myrinet/Ethernet
InfiniBand
Ethernet
S. Ramos*, G. L. Taboada, J. Touriño, R. Doallo
Shared Memory
Comunicaciones Escalables en Memoria Compartida para MPJ
Introducción
Comunicaciones Eficientes en Memoria Compartida: smpdev
Evaluación del Rendimiento
Conclusiones
F-MPJ: Fast MPJ
Detalles de Implementación
xxdev API. Interfaz pública de la clase xxdev .Device
public a b s t r a c t class Device {
s t a t i c public Device newInstance ( S t r i n g d e v i c e Im p l ) ;
public i n t [ ] i n i t ( S t r i n g [ ] args ) ;
public i n t i d ( ) ;
public void f i n i s h ( ) ;
public Request i s e n d ( O b j e c t buf , i n t dst , i n t ta g ) ;
public Request i r e c v ( O b j e c t buf , i n t src , i n t tag , S ta tu s s t t s ) ;
public void send ( O b j e c t buf , i n t dst , i n t ta g ) ;
public S ta tu s r e c v ( O b j e c t buf ,
i n t src , i n t ta g ) ;
public Request i s s e n d ( O b j e c t buf , i n t dst , i n t ta g ) ;
public void ssend ( O b j e c t buf , i n t dst , i n t ta g ) ;
public S ta tu s i p r o b e ( i n t src , i n t tag , i n t c o n t e x t ) ;
public S ta tu s probe ( i n t src , i n t tag , i n t c o n t e x t ) ;
public Request peek ( ) ;
}
S. Ramos*, G. L. Taboada, J. Touriño, R. Doallo
Comunicaciones Escalables en Memoria Compartida para MPJ
Introducción
Comunicaciones Eficientes en Memoria Compartida: smpdev
Evaluación del Rendimiento
Conclusiones
F-MPJ: Fast MPJ
Detalles de Implementación
Optimización del Rendimiento:
No hay capa de buffering para tipos primitivos.
Biblioteca de algoritmos multi-core aware para
operaciones colectivas.
Selección del algoritmo en función del tamaño de mensaje
y el número de procesos.
S. Ramos*, G. L. Taboada, J. Touriño, R. Doallo
Comunicaciones Escalables en Memoria Compartida para MPJ
Introducción
Comunicaciones Eficientes en Memoria Compartida: smpdev
Evaluación del Rendimiento
Conclusiones
F-MPJ: Fast MPJ
Detalles de Implementación
Algoritmos Multi-core Aware para Operaciones
Colectivas:
Operación
Algoritmos
Barrier
BT, Gather+Bcast, BTe, Gather+Bcast Optimized
Bcast
MST, NBFT, BFT
Scatter/v
MST, NBFT
Gather/v
MST, NBFT, NB1FT, BFT
Allgather/v
NBFT, NBBDE, BBKT, NBBKT, BTe, Gather + Bcast
Alltoall/v
NBFT, NB1FT, NB2FT, BFT
Reduce
MST, NBFT, BFT
Allreduce
Reduce-scatter
NBFT, BBDE, NBBDE, BTe, Reduce + Bcast
BBDE, NBBDE, BBKT, NBBKT, Reduce + Scatter
Scan
NBFT, OneToOne
BT: Binomial Tree. MST: Minimun-Spanning Tree. FT: Flat Tree. BDE: BiDirectional Exchange. BKT: BucKeT.
*e: extended. NB*: Non-Blocking. B*:Blocking.
S. Ramos*, G. L. Taboada, J. Touriño, R. Doallo
Comunicaciones Escalables en Memoria Compartida para MPJ
Introducción
Comunicaciones Eficientes en Memoria Compartida: smpdev
Evaluación del Rendimiento
Conclusiones
F-MPJ: Fast MPJ
Detalles de Implementación
Cargadores de Clase
Cargador de Clase Propio
Espacios de nombres aislados para cada thread en las capas
superiores.
Variables estáticas privadas.
Abstracción de procesos sobre threads.
Un Cargador de Clase a medida para cada thread.
La JVM identifica cada clase cargada por su nombre cualificado
completo y el cargador de clase.
Grupo de clases compartidas para la comunicación entre threads.
Transferencias a través de memoria compartida.
S. Ramos*, G. L. Taboada, J. Touriño, R. Doallo
Comunicaciones Escalables en Memoria Compartida para MPJ
Introducción
Comunicaciones Eficientes en Memoria Compartida: smpdev
Evaluación del Rendimiento
Conclusiones
F-MPJ: Fast MPJ
Detalles de Implementación
Colas de Mensajes
Recv (data)
Send (data)
6
Thread 0
UnexpectedRecvQueue
Thread 1
UnexpectedRecvQueue
id
?
data
data
4
id
PostedRecvQueue
1
id
3
5
PostedRecvQueue
?
X
data
2
S. Ramos*, G. L. Taboada, J. Touriño, R. Doallo
Comunicaciones Escalables en Memoria Compartida para MPJ
Introducción
Comunicaciones Eficientes en Memoria Compartida: smpdev
Evaluación del Rendimiento
Conclusiones
F-MPJ: Fast MPJ
Detalles de Implementación
Colas de Mensajes
Recv (data)
Send (data)
Thread 0
UnexpectedRecvQueue
?
X
data
PostedRecvQueue
id
6
4
id
1
2
3
PostedRecvQueue
Thread 1
UnexpectedRecvQueue
7
?
5
id
data
S. Ramos*, G. L. Taboada, J. Touriño, R. Doallo
Comunicaciones Escalables en Memoria Compartida para MPJ
Introducción
Comunicaciones Eficientes en Memoria Compartida: smpdev
Evaluación del Rendimiento
Conclusiones
F-MPJ: Fast MPJ
Detalles de Implementación
Colas de Mensajes
Serialización
Serializable es una interfaz más flexible que Cloneable.
Es necesario que el receptor sea el que realiza la
deserialización.
Relevante en comunicaciones no-bloqueantes.
Método de resolución de clases a medida para manejar el
aislamiento del espacio de nombres.
Cada thread debe cargar sus clases con su cargador local.
El uso del cargador del sistema provocaría una excepción.
S. Ramos*, G. L. Taboada, J. Touriño, R. Doallo
Comunicaciones Escalables en Memoria Compartida para MPJ
Introducción
Comunicaciones Eficientes en Memoria Compartida: smpdev
Evaluación del Rendimiento
Conclusiones
Configuración Experimental
Micro-Benchmark de Primitivas MPJ
Análisis de Rendimiento en Aplicaciones MPJ
Configuración Experimental:
Nehalem
2xIntel Xeon 5520 Quad-core
Nehalem CPU (8 cores).
2
x
Magny Cours
4xAMD 12-core Magny Cours CPU
(48 cores).
4
x
8 GB RAM.
128 GB RAM.
Linux, Sun JDK 1.6, gcc v.4.3.4.
Linux, Sun JDK 1.6, gcc v.4.3.4.
MPJ Express 0.38, OpenMPI v1.3.3,
MVAPICH2 r3510
MPJ Express 0.38, Intel MPI
v.4.0.0.028, OpenMPI v1.4.2.
S. Ramos*, G. L. Taboada, J. Touriño, R. Doallo
Comunicaciones Escalables en Memoria Compartida para MPJ
Introducción
Comunicaciones Eficientes en Memoria Compartida: smpdev
Evaluación del Rendimiento
Conclusiones
Configuración Experimental
Micro-Benchmark de Primitivas MPJ
Análisis de Rendimiento en Aplicaciones MPJ
Rendimiento Punto a Punto
24
F-MPJ (smpdev)
MPJE (smpdev)
MVAPICH2
OpenMPI
22
20
Latency (µs)
18
16
14
12
10
8
6
4
2
0
1
4
16
64
256
1K
4K
16K
64K
256K
1M
4M
80
75
70
65
60
55
50
45
40
35
30
25
20
15
10
5
0
16M
Bandwidth (Gbps)
Point-to-Point Java Communication Performance (Nehalem)
Message Size (Bytes)
S. Ramos*, G. L. Taboada, J. Touriño, R. Doallo
Comunicaciones Escalables en Memoria Compartida para MPJ
Introducción
Comunicaciones Eficientes en Memoria Compartida: smpdev
Evaluación del Rendimiento
Conclusiones
Configuración Experimental
Micro-Benchmark de Primitivas MPJ
Análisis de Rendimiento en Aplicaciones MPJ
Rendimiento Punto a Punto
45
F-MPJ (smpdev)
MPJE (smpdev)
IntelMPI 4
40
Latency (µs)
35
30
25
20
15
10
5
0
4
16
64
256
1K
4K
16K
64K
256K
1M
4M
30
28
26
24
22
20
18
16
14
12
10
8
6
4
2
0
16M
Bandwidth (Gbps)
Point-to-point Java Communication Performance (Magny Cours)
Message size (Bytes)
S. Ramos*, G. L. Taboada, J. Touriño, R. Doallo
Comunicaciones Escalables en Memoria Compartida para MPJ
Introducción
Comunicaciones Eficientes en Memoria Compartida: smpdev
Evaluación del Rendimiento
Conclusiones
Configuración Experimental
Micro-Benchmark de Primitivas MPJ
Análisis de Rendimiento en Aplicaciones MPJ
Rendimiento de Operaciones Colectivas
Broadcast on Nehalem (8 cores)
Aggregated Bandwidth (Gbps)
200
180
160
F−MPJ (smpdev)
MPJE (smpdev)
MVAPICH2
OpenMPI
140
120
100
80
60
40
20
0
1K
4K
16K
64K
256K
1M
4M
16M
Message Size (Bytes)
S. Ramos*, G. L. Taboada, J. Touriño, R. Doallo
Comunicaciones Escalables en Memoria Compartida para MPJ
Introducción
Comunicaciones Eficientes en Memoria Compartida: smpdev
Evaluación del Rendimiento
Conclusiones
Configuración Experimental
Micro-Benchmark de Primitivas MPJ
Análisis de Rendimiento en Aplicaciones MPJ
Rendimiento de Operaciones Colectivas
Broadcast on Magny Cours (48 Cores)
Aggregated Bandwidth (Gbps)
80
70
F−MPJ (smpdev)
MPJE (smpdev)
IntelMPI 4
60
50
40
30
20
10
0
1K
4K
16K
64K
256K
1M
4M
16M
Message Size (Bytes)
S. Ramos*, G. L. Taboada, J. Touriño, R. Doallo
Comunicaciones Escalables en Memoria Compartida para MPJ
Introducción
Comunicaciones Eficientes en Memoria Compartida: smpdev
Evaluación del Rendimiento
Conclusiones
Configuración Experimental
Micro-Benchmark de Primitivas MPJ
Análisis de Rendimiento en Aplicaciones MPJ
Análisis de Rendimiento en Aplicaciones MPJ
NPB
NAS Parallel Benchmarks
Magny Cours (4, 8, 16 y 32 cores).
Cuadro: NPB performance (in MOPS) on one core
Java
C/Fortran
CG
FT
IS
MG
224.069
201.31
461.850
711.38
42.826
58.61
530.351
847.59
S. Ramos*, G. L. Taboada, J. Touriño, R. Doallo
Comunicaciones Escalables en Memoria Compartida para MPJ
Introducción
Comunicaciones Eficientes en Memoria Compartida: smpdev
Evaluación del Rendimiento
Conclusiones
Configuración Experimental
Micro-Benchmark de Primitivas MPJ
Análisis de Rendimiento en Aplicaciones MPJ
Análisis de Rendimiento en Aplicaciones MPJ
CG Class C
16
F−MPJ (smpdev)
Java Threads
OpenMPI
OpenMP
14
Speedup
12
10
8
6
4
2
4
8
16
32
Number of Cores
S. Ramos*, G. L. Taboada, J. Touriño, R. Doallo
Comunicaciones Escalables en Memoria Compartida para MPJ
Introducción
Comunicaciones Eficientes en Memoria Compartida: smpdev
Evaluación del Rendimiento
Conclusiones
Configuración Experimental
Micro-Benchmark de Primitivas MPJ
Análisis de Rendimiento en Aplicaciones MPJ
Análisis de Rendimiento en Aplicaciones MPJ
FT Class C
12
F−MPJ (smpdev)
Java Threads
OpenMPI
OpenMP
11
10
9
Speedup
8
7
6
5
4
3
2
1
4
8
16
32
Number of Cores
S. Ramos*, G. L. Taboada, J. Touriño, R. Doallo
Comunicaciones Escalables en Memoria Compartida para MPJ
Introducción
Comunicaciones Eficientes en Memoria Compartida: smpdev
Evaluación del Rendimiento
Conclusiones
Configuración Experimental
Micro-Benchmark de Primitivas MPJ
Análisis de Rendimiento en Aplicaciones MPJ
Análisis de Rendimiento en Aplicaciones MPJ
IS Class C
14
F−MPJ (smpdev)
Java Threads
OpenMPI
OpenMP
12
Speedup
10
8
6
4
2
0
4
8
16
32
Number of Cores
S. Ramos*, G. L. Taboada, J. Touriño, R. Doallo
Comunicaciones Escalables en Memoria Compartida para MPJ
Introducción
Comunicaciones Eficientes en Memoria Compartida: smpdev
Evaluación del Rendimiento
Conclusiones
Configuración Experimental
Micro-Benchmark de Primitivas MPJ
Análisis de Rendimiento en Aplicaciones MPJ
Análisis de Rendimiento en Aplicaciones MPJ
MG Class C
25
F−MPJ (smpdev)
Java Threads
OpenMPI
OpenMP
Speedup
20
15
10
5
0
4
8
16
32
Number of Cores
S. Ramos*, G. L. Taboada, J. Touriño, R. Doallo
Comunicaciones Escalables en Memoria Compartida para MPJ
Introducción
Comunicaciones Eficientes en Memoria Compartida: smpdev
Evaluación del Rendimiento
Conclusiones
Conclusiones
Preguntas
Conclusiones
Java es una alternativa interesante para HPC en
procesadores multi-core.
Multithreading.
Smpdev permite aprovechar el multithreading de manera
transparente a través de una API de paso de mensajes.
Abstracción de procesos MPJ sobre threads.
Transferencias a través de memoria compartida.
Códigos portables y ejecutables en sistemas de memoria
distribuida.
La evaluación de rendimiento muestra que se obtienen
resultados comparables a los de MPI.
S. Ramos*, G. L. Taboada, J. Touriño, R. Doallo
Comunicaciones Escalables en Memoria Compartida para MPJ
Introducción
Comunicaciones Eficientes en Memoria Compartida: smpdev
Evaluación del Rendimiento
Conclusiones
Conclusiones
Preguntas
¿Preguntas?
C OMUNICACIONES E SCALABLES EN M EMORIA C OMPARTIDA
PARA
PASO
DE
M ENSAJES EN J AVA
JP2011
Sabela Ramos Garea
sramos@udc.es
Grupo de Arquitectura de Computadores, Universidade de A Coruña
S. Ramos*, G. L. Taboada, J. Touriño, R. Doallo
Comunicaciones Escalables en Memoria Compartida para MPJ
Descargar