PDF de programación - MPI JAVA (Computo Paralelo)

Imágen de pdf MPI JAVA (Computo Paralelo)

MPI JAVA (Computo Paralelo)gráfica de visualizaciones

Publicado el 24 de Julio del 2018
566 visualizaciones desde el 24 de Julio del 2018
1,0 MB
15 paginas
Creado hace 12a (15/04/2012)
MPI JAVA

(Computo Paralelo)

Computo Paralelo con JAVA (Crea tu Cluster)

Este manual le mostrara como configurar y trabajar con MpiJava (Interfaz de Paso de Mensajes). La
ejecución simultanea de una misma tarea, repartida sobre varios procesadores a fin de obtener un
resultado más rápido se le conoce como computo paralelo. By: John Michel Rivera de León.
[email protected]



“Es detestable esa avaricia espiritual que
tienen los que, sabiendo algo, no procuran

la transmisión de esos conocimientos”



By: John Michel Rivera de León

MPI JAVA
(Computo
Paralelo)

Computo Paralelo con JAVA (Crea tu Cluster)

Introduccio n

Una de las razones principales para utilizar el cómputo paralelo

es obtener un alto rendimiento al ejecutar un programa. Hoy en

MPI JAVA

Este manual le enseña a

como trabajar con

computo paralelo

utilizando

programación paralela

con Java.

día diferentes áreas tales como la biología, química, física, la

Se creara un Cluster de

industria cinematográfica, por mencionar solo algunas, se ven

computadoras para

beneficiadas con esta tecnología; en general, aplicaciones que

trabajar en paralelo.

requieren realizar grandes cantidades de cálculos son excelentes



candidatos para utilizar el cómputo paralelo.

Para utilizar el cómputo paralelo es necesario que nuestros

programas sean hechos con programación paralela y necesitamos

también contar con una arquitectura paralela para ejecutarlos.

Para poder utilizar el cómputo paralelo, necesitamos hacer uso

de la programación paralela. La programación paralela es una

técnica de programación basada en la ejecución simultánea, bien

sea en una misma computadora con varios procesadores o en un

sistema tipo cluster de computadoras.

Para paralelizar una aplicación es necesario contar con el

lenguaje adecuado que permita expresar el paralelismo del

problema. Dependiendo de la herramienta con que se cuente, se



l

l


)
o
e
a
r
a
P
o
t
u
p
m
o
C


(



A
V
A
J

I

P
M



1

By: John Michel Rivera de León



particionará el código en piezas para que se ejecute en paralelo en varios procesadores.

Es importante mencionar que no todos los problemas pueden ser paralelizados, hay

problemas que son inherentemente secuenciales y por lo tanto es difícil conseguir su

ejecución en paralelo.

Requerimientos


Bien, lo primero que necesitamos son los siguientes paquetes:

1. MPICH2

2. MPIJava

3. Open SSH Servidor & cliente.

4. NFS Kernel Servidor & cliente.

5. Java (para este ejemplo utilize jdk 1.7)

6. GCC

Ya que contamos con el software, lo primero que vamos a hacer es crear un usuario y

folder compartido

Primero creamos el folder con: sudo mkdir /mirror

Despues creamos el usuario: sudo adduser mpiu --home /mirror

Damos permisos: sudo chown mpiu /mirror

Mpiu es el nuevo usuario, asignamos privilegios de todo en System->Administration-

>Users and Groups Una vez realizado esto, nos logueamos con este user.

Ahora para cada nodo o maquina que usemos en el cluster, le asignamos un hostname e

ip único. Esto con el comando sudo gedit /etc/hostname



l

l


)
o
e
a
r
a
P
o
t
u
p
m
o
C
(



A
V
A
J

I

P
M



l

l


)
o
e
a
r
a
P
o
t
u
p
m
o
C

(



A
V
A
J

I

P
M



Reiniciamos la maquina.



2



Nos logueamos nuevamente con el user mpiu.



By: John Michel Rivera de León

Instalamos gcc : sudo apt-get install build-essential

Instalamos java: sudo apt-get install sun-java6-jdk



Si les faltan otras referencias instalan los paquetes faltantes. Yo instale JDK 1.7

manualmente así que las direcciones cambiaran.

Instalamos MPICH2, este puede ser via apt: sudo apt-get install mpich2



Pero no se si funcione, yo lo instale a manita como debe de ser:



Bajamos el mpich2-(version).tar.gz de su web.

Nos vamos al escritorio y creamos una carpeta MPICH2:

mkdir mpich2

descomprimimos : tar xvf mpich2-(version).tar.gz

ingresamos a la carpeta: cd mpich2-(version)

configuramos con el prefix donde se instala:

./configure --prefix=/mirror/mpich2



una vez configurado, hacemos: make && make install

el && es; si todo salio bien entonces instalalo.

l

l


)
o
e
a
r
a
P
o
t
u
p
m
o
C


(



A
V
A
J

I

P
M

Como ven, en mi imagen integre -–disable-f77 y -–disable-fc

Esto para desactivar la compilación con fortran, puesto que no lo ocupo y no lo tengo

instalado xD.



Después del make && make install debe quedar como esto:



3



By: John Michel Rivera de León



Ahora, nos dirigimos al directorio mirror, dentro de el modificamos el .bashrc con gedit:

gedit /mirror/.bashrc

agregamos las líneas:

export PATH=/mirror/mpich2/bin:$PATH

export LD_LIBRARY_PATH=/mirror/mpich2/lib:$LD_LIBRARY_PATH

aqui como me quedo a mi, puesto que lo hice en el desktop:



l

l


)
o
e
a
r
a
P
o
t
u
p
m
o
C
(



A
V
A
J

I

P
M



l

l


)
o
e
a
r
a
P
o
t
u
p
m
o
C

(



A
V
A
J

I

P
M

Cargamos estas variables con source:

source ~/.bashrc



4

Ahora definimos el path de MPICH para que sea visible a SSH.



By: John Michel Rivera de León

sudo echo /mirror/mpich2/bin >> /etc/environment



Probamos la instalación de MPICH con: which mpiexec y tambien con mpirun

Muy bien ya instalamos MPICH2, que en realidad es para trabajar con MPI pero con C,

C++.

Ahora necesitamos instalar MPI Java que utiliza JNI para trabajar con los procesos de

MPICH2.



l

l


)
o
e
a
r
a
P
o
t
u
p
m
o
C


(



A
V
A
J

I

P
M



5

By: John Michel Rivera de León



Instalando MPIJAVA


Descomprimimos el paquete de MPIJava, nos metemos a el cd mpiJava.

Configuramos: ./configure

Al configurar pon atención, ya que te pedirá el path de java, este lo puedes saber con el

comando which java. Y metes esa direccion cuando te la pida el ./configure.

En mi caso como instale JDK a manita mi path es: /usr/lib/jvm/jdk1.7.0



l

l


)
o
e
a
r
a
P
o
t
u
p
m
o
C
(



A
V
A
J

I

P
M



l

l


)
o
e
a
r
a
P
o
t
u
p
m
o
C

(



A
V
A
J

I

P
M

Ya que finalizo, hacemos : make



6

Ya que se compilo correctamente abrimos nuevamente el archivo .bashrc



gedit ~/.bashrc

agregamos estas nuevas lineas:



By: John Michel Rivera de León

export CLASSPATH=$CLASSPATH:/mirror/mpiJava/lib/classes/ export

LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/mirror/mpiJava/lib/

Cargamos la fuente nuevamente con : source ~/.bashrc

Ya que cargamos estos fuentes, ya tenemos listo MPIJAVA!!!!

Ahora hay que probarlo con un programa xD!!!.



l

l


)
o
e
a
r
a
P
o
t
u
p
m
o
C


(



A
V
A
J

I

P
M



7

By: John Michel Rivera de León



Ejemplo Programacio n Paralela con MPI JAVA


Muye bien ahora creamos un programa sencillo que acceda a una base datos en MySQL,

de ahí extrae datos por cada nodo trabajador y envían los resultados al nodo principal.

De esta manera cada nodo se reparte el trabajo de extraer la información de una columna

de una tabla, y le envían los resultados a un solo nodo principal, que es el que solo

almacena los resultados que le envían, así todos trabajan en conjunto xD.



l

l


)
o
e
a
r
a
P
o
t
u
p
m
o
C
(



A
V
A
J

I

P
M



l

l


)
o
e
a
r
a
P
o
t
u
p
m
o
C

(



A
V
A
J

I

P
M



8

Aquí el código:

/*
* Author of revised version: John Michel Rivera de León
*
*/

import mpi.* ;
import java.sql.*;

class Okas {



By: John Michel Rivera de León

dest=0;


static public void main(String[] args) throws MPIException {

Connection conn;
ResultSet rs;
Statement st;
MPI.Init(args) ;

int my_rank; // Rango del proceso
int source; // Rango del enviador
int dest; // Rango del recividor
int tag=50; // Tag para mensajes

int myrank = MPI.COMM_WORLD.Rank() ;
int p = MPI.COMM_WORLD.Size() ;

if(myrank == 1) {

try{
Class.forName("com.mysql.jdbc.Driver");
conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/prueba","root","root");
st=conn.createStatement();
rs= st.executeQuery("SELECT * FROM datos");
while(rs.next()){

char [] message = ("Registro de proceso " + myrank+":Nombre["+rs.getObject("nombre")+"]").toCharArray() ;
MPI.COMM_WORLD.Send(message, 0, message.length, MPI.CHAR,dest, tag) ;
message = new char[45];
//System.out.println("id="+rs.getObject("id")+" nombre="+rs.getObject("nombre")+" edad="+rs.getObject("edad")+"
desde["+MPI.Get_processor_name()+"]");

}
}catch(Exception e){System.out.println(e);}

}
if(myrank == 2) {



try{
Class.forName("com.mysql.jdbc.Driver");
conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/prueba","root","root");
st=conn.createStatement();
rs= st.executeQuery("SELECT * FROM datos");
while(rs.next()){

char [] message = ("Registro de proceso " + myrank+":edad["+rs.getObject("edad")+"]").toCharArray() ;
MPI.COMM_WORLD.Send(message, 0, message.length, MPI.CHAR,dest, tag) ;
}
}catch(Exception e){System.out.println(e);}

}

if(myrank == 3) {



try{
Class.forName("com.mysql.jdbc.Driver");
conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/prueba","root","root");
st=conn.createStatement();
rs= st.executeQuery("SELECT * FROM datos");
while(rs.next
  • Links de descarga
http://lwp-l.com/pdf12676

Comentarios de: MPI JAVA (Computo Paralelo) (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad