나는 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 ... 또는 임의의 순서로하고 싶습니다. 제발 제안 해주세요. 내 영어를 위해서 슬프다
특별히 mpi.net에 익숙하지 않지만, 게시 한 코드는 모든 주문을 허용해야합니다. 당신은 아마 같은 기계에서 모든 프로세스를 실행하고 있습니까? 그렇다면 스케줄러가 한 번에 각 노드의 작업을 완료하는 것일 수 있습니다. 작업자 노드의 for 루프에 잠깐 (~ 1 초) 잠을 넣어 봅니다. – suszterpatt
잠을 자려고 노력하면서이 아이디어가 내 머리에 터졌습니다. 그러나 내 프로그램은 어떤 종류의 이미지 모핑을하고 빠르게해야합니다. 만약 내가 더 나은 해결책을 찾지 못한다면 나는 시험 tomorow를위한 프로젝트를 제시해야만하기 때문에 다음과 같이 할 것이다. ... –
수면은 메시지가 어떤 순서로든 수신 될 수 있음을 입증하는 역할을한다. 최종 코드에 있어야합니다. – suszterpatt