Если вы спрашиваете о чистом параллельном программировании , т.е. не параллельном программировании, то вам определенно следует попробовать MPJExpress http://mpj -express.org / . Это поточно-ориентированная реализация mpiJava, которая поддерживает модели как распределенной, так и разделяемой памяти. Я попробовал это и нашел очень надежным.
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 }
Одной из наиболее распространенных функций, предоставляемых библиотеками обмена сообщениями, такими как MPJ Express, является поддержка двухточечной связи между выполняющимися процессами. В этом контексте два процесса, принадлежащих одному и тому же коммуникатору (например, коммуникатору MPI.COMM_WORLD), могут связываться друг с другом, отправляя и получая сообщения. Вариант метода Send () используется для отправки сообщения от процесса отправителя. С другой стороны, отправленное сообщение принимается процессом получателя с использованием варианта метода Recv (). И отправитель, и получатель указывают тег, который используется для поиска соответствующих входящих сообщений на стороне получателя.
После инициализации библиотеки MPJ Express с использованием метода MPI.Init (args) в строке 12 программа получает свой ранг и размер коммуникатора MPI.COMM_WORLD. Оба процесса инициализируют целочисленный массив длиной 10, называемый буфером в строке 18. Процесс отправителя - ранг 0 - сохраняет значение 10 в первом элементе массива msg. Вариант метода Send () используется для отправки элемента массива msg процессу-получателю.
Процесс отправителя вызывает метод Send () в строке 27. Первые три аргумента относятся к отправляемым данным. Отправляющий буфер - массив буферов - это первый аргумент, за которым следуют 0 (o! Set) и 1 (count). Отправляемые данные имеют тип MPI.INT, а назначение - 1 (переменная однорангового узла); тип данных и место назначения указываются в качестве четвертого и пятого аргумента метода Send (). Последний и шестой аргумент - это переменная тега. Тег используется для идентификации сообщений на стороне получателя. Тег сообщения обычно является идентификатором конкретного сообщения в конкретном коммуникаторе.
С другой стороны, процесс получателя (ранг 1) получает сообщение, используя метод получения блокировки.