2012-05-07 2 views
1

다중 스레드 응용 프로그램에서 MPI를 사용하려고합니다. 메인 스레드에서 MPI 환경을 초기화하고 Manager 객체를 만듭니다. Manager 객체는 두 개의 추가 스레드, 하나는 객체 수신 및 GUI 스레드를 시작합니다. 사용자가 보내기 버튼을 클릭 할 때마다 객체는 해당 순위로 전송됩니다. 때로는 THS 작업은 성공하지만이 오류가 발생하면 상황이 있습니다mutithreaded 응용 프로그램에서 MPI 사용

Unhandled Exception: System.AccessViolationException: Attempted to read or write protected memory. This is often an indication that other memory is corrupt. 
     at MPI.Unsafe.MPI_Recv(IntPtr buf, Int32 count, Int32 datatype, Int32 source, Int32 tag, Int32 comm, MPI_Status& status) 
     at MPI.Communicator.Receive[T](Int32 source, Int32 tag, T& value, CompletedStatus& status) 
     at MPI.Communicator.Receive[T](Int32 source, Int32 tag, T& value) 
     at MPI.Communicator.Receive[T](Int32 source, Int32 tag) 

코드 :

public Manager(String managerID) 
{ 
     //other actions... 
     (new Thread(new ThreadStart(startGUIThread))).Start(); 
     ReceiverThread = new Thread(new ThreadStart(MachineReceiver)); 
     ReceiverThread.Start(); 
} 
public void MachineReceiver() 
{ 
     while (IsRunning) 
     { 
      System.Console.Out.WriteLine("initiated"); 
      Data data = Communicator.world.Receive<Data>(source, 100); 
      System.Console.Out.Write("Received"); 
     } 
} 

지금 2 주 동안이 문제를 해결하기 위해 노력하고, 그래서 어떤 도움에 감사드립니다.

+3

을 참조하십시오. 새 줄을 따라야하는 각 줄의 끝에 두 개의 공백을 넣으십시오. 그러면 오류 메시지가 더 읽기 쉽게 보일 것입니다. –

+0

추가 코드 - 특히 MPI 관련 호출을 작성하는 장소를 게시하십시오. 또한'gdb' (또는 비슷한)에서 이것을 실행 해 보았습니까? –

+0

MPI 구현은 어떤 수준의 스레딩을 지원합니까? 저수준'MPI_Thread_init'는 레벨을 리턴하고, 또한'MPI_Query_thread'를 사용할 수 있습니다. 구하기 f}에 대해서는 MPI 랩퍼. 서를 확인하십시오. 만약 제공된 레벨이'MPI_THREAD_MULTIPLE' 또는'MPI_THREAD_SERIALIZED'가 아니라면, ** 당신은 ** MPI_Init_thread를 호출 한 스레드와 다른 스레드로부터 MPI 호출을해서는 안됩니다. –

답변

0

MPI를 MPI_Init()로 초기화 했습니까? 그렇다면 다중 스레드 프로그램에서 잘못된 것입니다. 대신 MPI_Init_thread()를 사용해야합니다. 더 나은 텍스트 형식을 위해서는 http://www.mpi-forum.org/docs/mpi-20-html/node165.htm

+0

다음과 같이 MPI 환경을 초기화했습니다 : using (new MPI.Environment (ref args, Threading.Multiple)) – user1045747

+1

아마 MPI 래퍼입니다. 그 래퍼가 MPI를 초기화하는 방법을 확인해야합니다. – janneb

+0

@ user1045747 : MPI 라이브러리가 멀티 스레드 지원으로 빌드되었는지 확인하십시오. 사용중인 MPI 라이브러리 및 래퍼는 무엇입니까? –

관련 문제