문제

클러스터에서 MPI 시스템을 구현해야합니다. 여기있는 사람이 MPI (MPICH/OpenMPI)에 대한 경험이 있다면 X86_64 상자 클러스터에서 어떤 것이 더 나은지, 성능이 어떻게 향상 될 수 있는지 알고 싶습니다.

도움이 되었습니까?

해결책

Mpich는 훨씬 더 오래되었습니다. 매우 휴대가 가능하며 온라인으로 수년에 따른 팁과 요령을 찾을 수 있습니다. 그것은 안전한 내기이며 아마도 더 많은 MPI 프로그램과 호환 될 것입니다.

OpenMPI가 더 새롭습니다. 휴대용은 아니지만 가장 일반적인 플랫폼을 잘 지원합니다. 대부분의 사람들은 여러 측면에서, 특히 결함 - 장애에 대해 훨씬 더 좋다고 생각하는 것 같습니다. 그러나이를 활용하려면 MPI 표준의 일부가 아닌 특수 기능 중 일부를 사용해야 할 수도 있습니다.

성능에 관해서는 응용 프로그램에 크게 의존합니다. 일반적인 조언을하기가 어렵습니다. 실행하려는 계산 유형, 노드 수 및 하드웨어 유형에 대한 구체적인 질문을 게시해야합니다.

다른 팁

나는 Windows와 Linux 클러스터 모두에 대해 상당히 병렬 애플리케이션을 작성했으며, 지금 MPICH2가 더 안전한 선택이라고 조언 할 수 있습니다. 다른 응답자가 언급 한 것처럼 매우 성숙한 라이브러리입니다. 또한 충분한 방송 지원이 있습니다 (비아 MPI_BCAST) 지금, 그리고 사실, MPICH2는 정말 멋진 기능을 가지고 있습니다. 산란과 수집가.

OpenMPI는 약간의 근거를 얻고 있습니다. 펭귄 컴퓨팅 (그들은 큰 클러스터 공급 업체이며 Linux를 좋아합니다)은 실제로 OpenMPI가 특정 상황에서 MPICH2를 이길 수있는 강력한 벤치 마크를 가지고 있습니다.

"성능 향상"에 대한 귀하의 의견과 관련하여, 내가 줄 수있는 가장 좋은 조언은 I/O 묶인 경우 절대적으로 필요한 것보다 더 많은 데이터를 보내지 않으며 CPU 묶인 경우 필요한 것보다 더 많은 작업을 수행하지 않는 것입니다. 나는 잘못된 코드 조각을 한 번 이상 최적화하는 함정에 빠졌습니다. :) 내 발자취를 따르지 않기를 바랍니다!

MPI 포럼을 확인하십시오. MPI 루틴에 대한 정보, 그리고 Beowulf 사이트에는 많은 흥미로운 질문에 대한 답이 있습니다.

'더 나은'은 정의하기가 어렵습니다 ... 코드와 하드웨어로 벤치마킹하여 '더 빠른'대답을 할 수 있습니다. 집단 및 오프로드 최적화와 같은 것은 정확한 하드웨어에 따라 다르며 드라이버 스택 버전과 관련하여 매우 다양하므로 Google은 작업 조합을 찾을 수 있어야합니다.

최적화 작업까지는 코드에 다소 의존하고 하드웨어에 다소 의존합니다.

코드 I/O가 스토리지에 바인딩됩니까? 이 경우 NFS보다 더 나은 조사가 많은 도움이 될 수 있거나 순진한 병렬 I/O가 아닌 MPI I/O를 사용할 수 있습니다.

네트워크 바운드 인 경우 커뮤니케이션 지역을 살펴보면 Comms/Compute 중첩이 도움이 될 수 있습니다. 다양한 MPI 구현의 대부분에는 인트라 노드 통신을위한 네트워크가 아닌 로컬 공유 메모리를 사용하기위한 튜닝 옵션이있어 일부 코드의 경우 네트워크로드를 크게 줄일 수 있습니다.

I/O 및 MPI 트래픽의 분리는 일부 클러스터, 특히 기가비트 이더넷 클러스터에 큰 차이를 만들 수 있습니다.

우리는 MPICH가 가장 많이 사용 가능하고 가장 잘 문서화 된 것처럼 보였기 때문에 단순히 대안 테스트에 많은 노력을 기울이지 않았습니다. MPICH에는 Windows에 배치를위한 합리적인 도구가 있습니다.
우리가 가진 주요 성능 문제는 동일한 기본 데이터를 모든 노드에 배송해야한다는 것이었고 MPICH는 방송을 지원하지 않거나 지원하지 않았으므로 초기 데이터를 배포하는 것은 O (n)입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top