2015-01-28 11 views
0

MPJ (기본적으로 또 다른 생산자/소비자 문제)를 사용하여 간단한 분산 응용 프로그램을 구축하고 있으며 여러 스레드를 사용할 때 같은 시스템에서 데이터를받는 데 큰 문제가 있습니다. .MPJ/Cluster 구성에서 다른 스레드의 메시지를 수신 할 수 없음

예제 코드 :

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

아이디어는 간단는 : -이에만 작동 하나 개의 스레드는 모든 기계에 수신과) 다른 기계 (이 잘 작동) 같은 시스템의 b) 다른 스레드에서 오는 요청을 받아 멀티 코어 모드에서.

클러스터 구성에서이 방법을 사용할 수 있습니까?

이것이 가능하지 않은 경우, 바쁜 폴링없이 일부 이벤트 (종료 감지) 이후에 리스너 스레드를 올바르게 종료하는 방법이 있습니까?

감사

답변

1

당신은 MPJ 익스프레스 "Hyrid 장치"를 시도 할 수 있습니다 (Request.Cancel 분명히 -_- v0.43에서 구현되지 않음)

하이브리드 장치는 실행 계획 사용자를위한 것입니다

이러한 멀티 코어 시스템 클러스터에서의 병렬 Java 애플리케이션 mpjrun.sh -np 4 -dev hybdev HelloWorld

: 하이브리드 장치는 투명 각각 노드 간 통신을위한 인트라 - 노드 통신 및 클러스터 구성 (단 NIO 장치)에 대해

사용 멀티 구성 및 클러스터 모두를 사용하여 구성