MPJ /群集配置无法在另一个线程上从self接收消息

时间:2015-01-28 01:57:42

标签: java mpj-express

我正在使用MPJ(基本上是另一个生产者/消费者问题)构建一个简单的分布式应用程序,并且在使用多个线程时从同一台机器接收数据时遇到了很大的问题。

示例代码:

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();

想法很简单:一个线程监听所有机器并接受来自a)不同机器的请求(这很好)b)同一台机器上的不同线程 - 这只适用于多核模式。

有没有办法让这项工作在群集配置中完成?

如果无法做到这一点,那么至少有一种方法可以在没有繁忙轮询的情况下如何在某个事件(终止检测)之后正确退出侦听器线程? (Request.Cancel显然没有在v0.43 -_-中实现)

由于

1 个答案:

答案 0 :(得分:1)

您可以试试MPJ Express“Hyrid设备”

混合设备适用于计划在此类多核计算机集群上执行其并行Java应用程序的用户。混合设备透明地使用多核配置和群集配置 用于内部通信和集群配置(仅适用于NIO设备) 节点间通信,分别为

用法:mpjrun.sh -np 4 -dev hybdev HelloWorld