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