2012-08-24 6 views
0

어떻게 제어가 MPI_Send()에서 MPI_Recv()로 곧바로 건너 뛸 때 다른 점에서 MPI_Send()에서 점프합니다. 의사 결정과 관련된 조건으로 단일 코드 블록 만 실행해야합니다.MPI의 실행 흐름

int main(int argc, char *argv[]) { 
    int number = 54; 
    MPI_Init(&argc, &argv); 
    MPI_Comm_size (MPI_COMM_WORLD, &no_of_process); 
    MPI_Comm_rank (MPI_COMM_WORLD, &process_rank); 
    MPI_Status status; 
    if (process_rank == 0) { 
     MPI_Send (&number, 1, MPI_INT, 1, 0, MPI_COMM_WORLD); 
    } 
    else if (process_rank == 1) { 
     MPI_Recv (&number, 1, MPI_INT, 0, 0, MPI_COMM_WORLD); 
    } 
} 
+0

글쎄, 간단히 말해서 그것은 하나의 스레드에서 두 블록을 실행하지 않아야하지만, 여러 프로세스 나 스레드가 관련된 경우와 비슷할 수 있습니다. 무슨 뜻인지 예를 들려 주시겠습니까? –

+2

코드를 보지 않고도이 질문에 대답하는 것은 매우 어렵습니다. 첫 번째 어려움은 질문을 올바르게 이해하는 데 있습니다. –

+0

@HighPerformanceMark 간단한 코드로 내 질문을 편집했습니다. 요청한 내용을 이해하는 데 도움이되기를 바랍니다. – droidlabour

답변

3

MPI의 실행 모델은 하나 SPMD (단일 프로그램 다중 데이터) 또는 SPMD가 널리 보급되고와 MPMD (여러 프로그램 다중 데이터). 이 실행 모델에서는 단일 소스 코드에서 프로세스로 알려진 여러 인스턴스가 시작되는 이진 파일을 생성합니다. 각 인스턴스는 등급으로 알려진 자체 식별자를 가지며 코드의 다른 분기가 순위에 따라 실행됩니다. 따라서 은 다른 순위로 실행되고 MPI_Send은 실행 된 프로세스의 순위를 지정하는 경우 은 하나의 순위 ("순위"는 일반적으로 "주어진 순위의 프로세스"의 짧은 버전으로 사용됩니다)에 의해 실행됩니다 MPI_Recv이면 메시지가 둘 사이에서 전송됩니다. 또한 MPI는 메시지 버퍼링과 비 블로킹 (non-blocking) 작업을 허용하여 하나의 등급이 또한 자체적으로 말할 수 있습니다.

대개 계급에 기반한 조건부가 부과되면 만족스럽고 그렇지 않은 프로세스가 있습니다. 따라서 두 가지 브랜치가 실행되지만 서로 다른 프로세스와 가능한 다른 시간에 실행됩니다.

MPI 프로그래밍은 약간의 개성을 생각해야하며 일반적으로 익숙해 지려면 약간의 시간이 필요합니다.

+0

위의 내 의견을 연장하려면 ... @HristoIliev가 잘못 구성된 질문에 대한 좋은 대답을 푸시합니다. –

+0

@HighPerformanceMark, 나는 방금 수리점에서 내 수정 구슬을 가져 왔습니다. 나는 그것이 매우 기쁘다. –