Si usted está planteando pura programación paralela decir no concurrente de programación, entonces definitivamente debe tratar MPJExpress http://mpj-express.org/. Es una implementación de mpiJava segura para subprocesos y admite modelos de memoria distribuida y compartida. Lo probé y encontré muy confiable.
1 import mpi.*;
2
3
/**
4 * Compile:impl specific.
5 * Execute:impl specific.
6 */
7
8 public class Send {
9
10 public static void main(String[] args) throws Exception {
11
12 MPI.Init(args);
13
14 int rank = MPI.COMM_WORLD.Rank() ; //The current process.
15 int size = MPI.COMM_WORLD.Size() ; //Total number of processes
16 int peer ;
17
18 int buffer [] = new int[10];
19 int len = 1 ;
20 int dataToBeSent = 99 ;
21 int tag = 100 ;
22
23 if(rank == 0) {
24
25 buffer[0] = dataToBeSent ;
26 peer = 1 ;
27 MPI.COMM_WORLD.Send(buffer, 0, len, MPI.INT, peer, tag) ;
28 System.out.println("process <"+rank+"> sent a msg to "+ 29 "process <"+peer+">") ;
30
31 } else if(rank == 1) {
32
33 peer = 0 ;
34 Status status = MPI.COMM_WORLD.Recv(buffer, 0, buffer.length, 35 MPI.INT, peer, tag);
36 System.out.println("process <"+rank+"> recv'ed a msg\n"+ 37 "\tdata <"+buffer[0] +"> \n"+ 38 "\tsource <"+status.source+"> \n"+ 39 "\ttag <"+status.tag +"> \n"+ 40 "\tcount <"+status.count +">") ;
41
42 }
43
44 MPI.Finalize();
45
46 }
47
48 }
Una de las funcionalidades más comunes proporcionados por bibliotecas de mensajería como MPJ Express es el apoyo de comunicación punto a punto entre los procesos de ejecución. En este contexto, dos procesos que pertenecen al mismo comunicador (por ejemplo, el comunicador MPI.COMM_WORLD) pueden comunicarse entre sí enviando y recibiendo mensajes. Una variante del método Send() se usa para enviar el mensaje desde el proceso del remitente. Por otro lado, el proceso de recepción recibe el mensaje enviado utilizando una variante del método Recv(). Tanto el emisor como el receptor especifican una etiqueta que se utiliza para encontrar un mensaje entrante coincidente en el lado del receptor.
Después de inicializar la biblioteca de MPJ Express utilizando el método MPI.Init (args) en la línea 12, el programa obtiene su rango y el tamaño del comunicador MPI.COMM_WORLD. Ambos procesos inicializan una matriz de enteros de longitud 10 llamada buffer en la línea 18.El proceso del emisor-rango 0-almacena un valor de 10 en el primer elemento de la matriz de mensajes. Una variante del método Send() se usa para enviar un elemento de la matriz de mensajes al proceso del receptor.
El proceso del remitente llama al método Send() en la línea 27. Los primeros tres argumentos están relacionados con los datos que se envían. La matriz emisora -la matriz más grande- es el primer argumento seguido por 0 (o! Set) y 1 (conteo). Los datos que se envían son del tipo MPI.INT y el destino es 1 (variable par); el tipo de datos y el destino se especi fi can como cuarto y quinto argumento del método Send(). El último y el sexto argumento es la variable de etiqueta. Una etiqueta se usa para identificar mensajes en el lado del receptor. Una etiqueta de mensaje suele ser un identificador de un mensaje particular en un comunicador específico. Por otro lado, el proceso del receptor (rango 1) recibe el mensaje utilizando el método de recepción de bloqueo.
Depende de lo que quiere decir con "programación en paralelo". –
@Stephen: trabajo 2 o sistema para un proceso, para que el proceso se complete rápidamente –
Veo ... no el tipo SIMD de programación en paralelo. –