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