2014-01-24 2 views
3

MPI_Scatter() 및 MPI_Gather()를 사용하는 프로그램이 있습니다. 이 프로그램은 정수 N을 입력 받아 2에서 N까지의 소수를 반환합니다. 2부터 N까지의 숫자로 배열을 만들고 MPI_Scatter를 사용하여 배열을 N/(procs 수) 요소로 나눈 다음에 프로세스. 프로세스 ('크기')의 수를 나눌 수있는 숫자 N을 삽입하면 모든 것이 정상적으로 작동하지만 '크기'로 나눌 수없는 N을 입력하면 오류가 발생합니다. 예 : N = 16 및 크기 = 4 => 16/4 = 4이므로 N % size == 0이지만 N % size! = 0 일 때 오류가 발생합니다.MPI_Scatter가 프로세스간에 나눌 수없는 경우 사용하십시오.

순위가 현재 프로세스의 순위입니다
div = N/size; 
if (N%size != 0) 
    if (rank == 0) 
     div++; 

이 루트 과정에 또 하나 개의 요소를 제공하기 위해 : 나는 추가했습니다. 하지만 여전히 작동하지 않습니다. 이 문제를 어떻게 해결할 수 있습니까? 미리 감사드립니다.

답변

7

숫자 배열을 배포해야하는 경우 모든 프로세스에 똑같이 분산 될 수 없으므로 대신 MPI_Scatterv을 사용하십시오.

+0

대단히 감사합니다. 제게 많은 도움이되었습니다. – damaar

+0

'recvcount'는 정수형 배열이 아닌 정수형이므로 모든 수신 프로세스가 같은 수의'recvtype' 데이터 만받을 수 있다는 것을 의미합니까? @haraldkl – user2008151314

+0

@ user2008151314 아니요, recvcount는 수신 순위 (r)로 지정되며 sendcount (r)과 일치해야합니다 (유형이 동일한 경우). 각 등급은 단지 한 부분을받습니다. 따라서 스칼라 정수 (scatterv 연산을 위해 프로세스마다 다를 수 있음)이면 충분합니다. – haraldkl

관련 문제