Download Parallel Java - Universidad de Murcia
Document related concepts
no text concepts found
Transcript
Un API para el desarrollo de aplicaciones paralelas 100% Java Antonio Talón Toledo 5º curso de Ingeniería en Informática Facultad de Informática Universidad de Murcia • La tendencia actual en la industria de los microprocesadores está orientada a aumenta la capacidad de proceso mediante la integración en un mismo chip de un número mayor de cores (por ejemplo, el Intel Core i7 incorpora 4 cores con multithreading, esto es hasta 8 hilos de ejecución simultánea). • Las nuevas aplicaciones deben aprovechar las capacidades de procesamiento paralelo que ofrece el hardware. • La programación paralela está demasiado vinculada al entorno científico y a lenguajes como C y Fortran. • Java es uno de los lenguajes de programación más utilizados y más extendidos del mundo. • Parallel Java es una librería API que acerca el mundo Java al de la programación paralela. • PJ está implementado 100% en Java (JDK 1.5). • PJ soporta programación en memoria compartida, programación por paso de mensajes y programación híbrida. • PJ no reinventa la rueda. • Las características de programación en memoria compartida están inspiradas en OpenMP. • Las características de paso de mensajes se inspiran en MPI. • PJ expone las características de programación paralela al programador a través de una jerarquía de clases y del uso de clases abstractas. • PJ ha sido desarrollado por el profesor Alan Kaminskly del Rochester Institute of Tecnology (http://www.cs.rit.edu/~ark/pj.shtml) • PJ es software libre que se distribuye bajo los términos de la GNU General Public License (http://www.gnu.org/copyleft/gpl.html) • Parallel Thread Teams Interfaz … new ParallelTeam().execute(new ParallelRegion() { public void run() throws Exception { … } } … Clase anónima … #pragma omp parallel { … } … • Parallel Loops … execute (0, height-1, new IntegerForLoop() { public void run(int first, int last) { … } } … … #pragma omp for for (i = 0 ; i < height ; i++) { … } … • Los atributos del objeto de la clase anónima paralelizada son privados, en tanto los definidos fuera son compartidos. • Como Java dispone de soporte nativo para hilos, el acceso en exclusión mutua puede realizarse mediante el uso de synchronized. • PJ dispone de clases para iterar sobre los elementos de un array, sobre los objetos devueltos por un Iterador y sobre los objetos de una colección iterable. • PJ dispone también de la clase ParallelSectionGroup que contiene varios objetos ParallelSection conteniendo cada uno de ellos secciones de código. Cada hilo de ejecución ejecuta una sección paralela diferente simultáneamente. PJ soporta secciones ejecutadas por un único hilo y secciones críticas protegidas por cerrojos exclusivos y no exclusivos. • PJ proporciona la clase Comm para soportar el paso de mensajes. • El comunicador global “world”, agrupa a todos los procesos. • PJ soporta las operaciones de comunicación punto a punto: send, receive y send-receive, tanto en modo bloqueante como no bloqueante. • PJ también soporta operaciones de comunicación colectiva: boradcast, scatter, gather, all-gather y reduce. • PJ soporta el envío de tipos primitivos, objectos (serialización) y arrays, mediante el uso de buffers. Arquitectura de PJ corriendo sobre un cluster • Web del autor: http://www.cs.rit.edu/~ark/pj.shtml • Descargas: binario y fuentes. ISBN 1-4239-0198-3 ISBN 978-3-8370-2439-5 Gracias por su atención