2012-02-11 2 views
0

나는 mpi.net을 사용하고 있습니다. 각 프로세서 (proc 0 제외)가 임의의 순서로 0을 처리하도록 데이터를 보내길 원합니다. 여기서 코드의 간략화 된 부분이다 :MPI.NET 프로세스가 임의의 순서로 데이터를 보내는 방법은 무엇입니까?

  if (rank == 0) 
      { 
       int all = nTasks-1; //wich is the number of processes -1 

       while (all > 0) 
       { 
        Communicator.world.Receive<Pixelator>(Communicator.anySource, 1, out pixelus); 
        if (pixelus.x == -1) 
        { 
         all--; 
        } 
       } 
      } 
      else 
      {      
       for (int i = 0; i < 5; i++) 
       { 
        Communicator.world.Send<Pixelator>(some_data, 0, 1); 
       }      
       Communicator.world.Send<Pixelator>(-1, 0, 1); 
      } 

문제점 프로세스 0하여 다른 프로세스로부터 datas receiveing를 앞으로 이동시키는 동시에 다른 프로세스로부터의 모든 정보를 수신한다. 예를 들어, 프로세스 0은 1 1 1 1 1 2 2 2 2 2 5 5 5 5 4 4 4 4 3 4 3 3 3 3 (이들은 데이터를 보내는 프로세스의 순위 임)을 얻습니다. 그리고 나는 그것을 1 5 2 3 1 1 4 3 ... 또는 임의의 순서로하고 싶습니다. 제발 제안 해주세요. 내 영어를 위해서 슬프다

+0

특별히 mpi.net에 익숙하지 않지만, 게시 한 코드는 모든 주문을 허용해야합니다. 당신은 아마 같은 기계에서 모든 프로세스를 실행하고 있습니까? 그렇다면 스케줄러가 한 번에 각 노드의 작업을 완료하는 것일 수 있습니다. 작업자 노드의 for 루프에 잠깐 (~ 1 초) 잠을 넣어 봅니다. – suszterpatt

+0

잠을 자려고 노력하면서이 아이디어가 내 머리에 터졌습니다. 그러나 내 프로그램은 어떤 종류의 이미지 모핑을하고 빠르게해야합니다. 만약 내가 더 나은 해결책을 찾지 못한다면 나는 시험 tomorow를위한 프로젝트를 제시해야만하기 때문에 다음과 같이 할 것이다. ... –

+1

수면은 메시지가 어떤 순서로든 수신 될 수 있음을 입증하는 역할을한다. 최종 코드에 있어야합니다. – suszterpatt

답변

0

here을 보아라. 프로세스가 다른 모든 프로세스가 같은 지점에 도달 할 때까지 계산의 일부 지점에 도달하면 프로세스가 더 이상 작동하지 못하도록 차단하는 방법이 있습니다. 희망, 도움이 될 것입니다. 코드는 다음과 같이 표시 될 수 있습니다.

if (rank == 0) 
{ 
    int all = nTasks-1; //wich is the number of processes -1 

    while (all > 0) 
    { 
     Communicator.world.Receive<Pixelator>(Communicator.anySource, 1, out pixelus); 
     if (pixelus.x == -1) 
     { 
      all--; 
     } 
    } 
} 
else 
{      
    for (int i = 0; i < 5; i++) 
    { 
     Communicator.world.Send<Pixelator>(some_data, 0, 1); 
     //Here's the barrier 
     Communicator.Barrier(); 
    }      
    Communicator.world.Send<Pixelator>(-1, 0, 1); 
} 

확실히 출력물과 비슷합니다. 그러나 장벽이 맞지 않는다면, 서로 의사 소통하는 시간이 적어 지도록 프로세스에 더 많은 노력을 기울이는 것 외에 다른 추측은 없습니다.

관련 문제