I am building a simple distributed application using MPJ (basically another producer/consumer problem), and I have huge problems receiving data from the same machine when using multiple threads.
Example code:
Thread t = new Thread(new Runnable() {
@Override
public void run() {
int[] buf = new int[2];
MPI.COMM_WORLD.Recv(buf, 0, 2, MPI.INT, MPI.ANY_SOURCE, 1);
System.out.println("Got: " + buf[0]);
}
});
t.start();
Thread.sleep(100);
MPI.COMM_WORLD.Isend(new int[] {1,0}, 0, 2, MPI.INT, MPI.COMM_WORLD.Rank(), 1);
Thread.sleep(100);
t.join();
Idea is simple: One thread listens to all machines and accepts requests that come from a) different machines (this works fine) b) different thread on same machine - this works only in multicore mode.
Is there a way to make this work in cluster configuration?
If this is not possible, is there at least a way how to properly quit the listener thread after some event (termination detection) without busy polling? (Request.Cancel is apparently not implemented in v0.43 -_-)
Thanks