현재 위치 - 주공해몽공식사이트 - 점술 - Mpi4py 지점 간 통신 개요

Mpi4py 지점 간 통신 개요

이전 문장 에서 mpi4py 의 조합 전송 및 수신 통신 방법을 소개했습니다. 지금까지 mpi4py 에서 사용할 수 있는 다양한 지점 간 통신 방법에 대해 간략하게 소개하고 간단한 사용 루틴을 제공했습니다. 지점 간 통신을 요약해 보겠습니다.

앞서 살펴본 바와 같이 포인트 투 포인트 통신에는 차단 통신, 비반복 비차단 통신, 반복 가능한 비차단 통신 등 다양한 모드가 있으며 각 클래스는 표준, 버퍼, 준비 및 동기화 모드로 나눌 수 있습니다. 다양한 통신 모드의 동작을 이해하려면 각 모드가 버퍼를 어떻게 사용하는지 이해하는 것이 중요합니다. 간단히 말해 각 모드에서 buffer 를 사용하는 기능은 다음과 같이 요약할 수 있습니다. 표준 전송은 실제로 MPI 환경에서 제공하는 기본 Buffer 를 사용합니다. Buffered Bsend 는 실제로 MPI 환경에서 제공하는 버퍼를 사용자 공간 관리에 넣는 것과 같습니다. ReadyResend 는 실제로 버퍼가 없는 것과 같지만 발신자는 미리 기다릴 수 없습니다. 동기 Ssend 는 실제로 버퍼링되지 않고 대기를 허용하는 것과 같습니다. 비동기 모드의 각 모드는 유사하게 작동하지만 MPI 환경에서 다른 스레드가 백그라운드에서 실제 메시지 전송을 수행하고 MPI _ WAT *, MPI_Test* 등의 메커니즘을 통해 MPI 프로세스의 주 스레드와 통신하고 동기화하는 것으로 이해할 수 있습니다.

지점 간 통신에서 특별한주의가 필요한 점은 교착 상태를 방지하는 것입니다. 교착 상태는 여러 가지 이유로 발생합니다. 가장 일반적인 것은 버퍼 경합으로 인한 교착 상태입니다. 예를 들면 다음과 같습니다.

실행 결과는 다음과 같습니다.

위의 예에서 두 프로세스는 동시에 서로 메시지를 송수신하지만, 송수신되는 메시지가 비교적 작고 MPI 환경에서 제공하는 기본 버퍼 용량을 초과하지 않기 때문에 성공적으로 실행할 수 있습니다. 이제 이전 예제의 개수를 1024 (MPI 환경 구성에 따라 이상) 로 변경하려고 했습니다. 결과는 다음과 같습니다.

두 프로세스의 전송 작업은 모두 수신 작업 전에 시작되므로 두 프로세스는 모두 전송 시 차단됩니다. 전송되는 데이터의 양이 MPI 환경에서 제공하는 기본 버퍼 공간을 초과하면 각 프로세스는 상대방이 수신 작업을 시작하여 "중복" 데이터를 직접 가져갈 때까지 기다려야 합니다. 그러나 차단 전송을 사용했기 때문에 양측의 전송 함수가 수신될 때까지 반환되지 않으므로 수신 작업을 수행할 수 없습니다. 따라서 두 프로세스 모두 수신 대기로 인해 전송 단계에서 차단되고 프로그램에서 교착 상태가 발생합니다.

이 유형의 교착 상태의 경우 해결 방법은 다음과 같습니다.

이러한 솔루션은 다음과 같이 교착 상태를 방지하기 위해 명령문 실행 순서를 조정하는 한 가지 예일 뿐입니다.

실행 결과는 다음과 같습니다.

명령문이 조정되면 각 프로세스의 전송 작업이 먼저 상대방의 수신 작업과 일치하고 메시지 전송이 완료된 후 다음 통신이 수행되므로 버퍼 경쟁으로 인한 교착 상태를 제거할 수 있습니다.

MPI 는 메시지 전달 실행 순서에 대해 일정한 규정이 있지만, MPI 환경은 다음과 같이' 형평성' 을 보장하는 조치를 제공하지 않습니다.

위의 내용은 mpi4py 의 지점 간 통신을 간략하게 요약한 것입니다. 다음 문장 에서는 그룹 및 통신기의 기본 개념을 소개합니다.