2 augusti, 2019 Inopto_AB

mpi 예제

다음은 모든 프로세스에서 하나의 프로세스로 int의 배열을 전달하는 C의 예입니다. 하나의 수신 프로세스를 ”루트” 프로세스라고 하며 지정된 프로세스가 될 수 있지만 일반적으로 프로세스 0이 됩니다. 모든 프로세스는 각 프로세스 (루트 자체를 포함)가 MPI_Send를 호출하고 루트가 정렬 된 MPI_Recv 호출의 해당 번호를 만들어 이러한 모든 배열을 어셈블하는 것과 동일한 MPI_Gather를 사용하여 루트로 배열을 보내도록 요청합니다. 더 큰 것:[13] 참고: 이들은 예제 파일이며, 따라서 MPI를 사용하여 코드를 병렬화하는 방법의 기본 사항을 설명하기 위한 것입니다. 대부분은 단 1~2초 만에 실행됩니다. 이제 ”내 호스트는 실제로 듀얼 코어 컴퓨터입니다. 개별 컴퓨터보다 먼저 개별 코어에서 MPI가 프로세스를 생성하도록 하려면 어떻게 해야 합니까?” 해결책은 매우 간단합니다. 호스트 파일을 수정하고 호스트 이름 다음으로 프로세서당 콜론과 코어 수를 배치하기만 하면 됩니다. 예를 들어 각 호스트에 두 개의 코어가 있다고 지정했습니다.

MPI 하드웨어 연구는 예를 들어 프로세서 인 메모리를 통해 하드웨어에서 직접 MPI를 구현하고 각 노드의 RAM 칩의 마이크로 회로에 MPI 작업을 구축하는 데 중점을 둡니다. 암시적으로 이 방법은 언어, OS 또는 CPU와 는 독립적이지만 쉽게 업데이트하거나 제거할 수는 없습니다. BONES_MPI는 한 프로세스에서 다른 프로세스로 실제 데이터 벡터를 전달합니다. 그것은 입문 MPI 워크샵에서 예로 사용되었다. 배열 분해 예제 코드의 병렬 MPI 및 직렬 버전을 컴파일 이 기능에 대해 수행된 작은 연구는 MPI-IO를 사용하여 높은 성능 향상을 얻는 것이 간단하지 않을 수 있음을 나타냅니다. 예를 들어 MPI I/O 라이브러리를 사용하여 희소 행렬 벡터 곱셈을 구현하면 무시할 수 있는 성능 향상의 일반적인 동작이 보여주지만 이러한 결과는 결정적이지 않습니다. [18] MPI-IO가 광범위하게 채택되기 시작한 것은 집단 I/O[19]의 아이디어가 MPI-IO에 구현되기 전까지는 아니었습니다. 집합적 I/O는 프로세스가 작고 비연속적인 I/O 작업을 크고 연속적인 작업으로 집합적으로 변환하여 응용 프로그램의 I/O 대역폭을 크게 향상시켜 잠금 및 디스크 검색 오버헤드를 줄입니다.

MPI-IO는 엄청난 성능 이점 덕분에 HDF5 및 병렬 NetCDF와 같은 많은 최첨단 I/O 라이브러리의 기본 I/O 계층이 되었습니다. 또한 레이아웃 인식 I/O[20] 및 교차 파일 집계[21][22]와 같은 집단 I/O 최적화에 대한 일련의 연구 노력이 인기를 얻었습니다. 단일 프로그램, 다중 데이터(SPMD) 프로그래밍 모델이 용이하게 되지만 필수는 아닙니다. 많은 MPI 구현을 통해 동일한 MPI 작업에서 여러 개의 다른 실행 파일이 시작될 수 있습니다. 각 프로세스는 고유한 순위, 전 세계 총 프로세스 수, 지점 간(송수신) 통신 또는 그룹 간의 집단 통신을 통해 프로세스 간에 통신할 수 있는 기능을 가있습니다. MPI는 알고리즘이 무엇을 할지 결정할 수 있도록 MPI_COMM_WORLD, 자체 순위 및 세계 크기의 SPMD 스타일 프로그램을 제공하는 것으로 충분합니다. 보다 현실적인 상황에서는 이 예제보다 I/O가 더 신중하게 관리됩니다. MPI는 표준 I/O(stdin, stdout, stderr)가 지정된 시스템에서 작동하는 방법을 규정하지 않습니다. 일반적으로 순위 0 프로세스에서 예상대로 작동하며 일부 구현에서는 다른 프로세스의 출력을 캡처하고 유입합니다.

Kontakta oss!