2008-09-27 3 views
22

클러스터에 MPI 시스템을 구현해야합니다. MPIC (MPICH/OpenMPI)에 대한 경험이있는 분이라면 x86_64 상자 클러스터 성능을 향상시키고 성능을 향상시킬 수있는 방법을 알고 싶습니다.최상의 MPI 구현은 무엇입니까

답변

18

MPICH는 훨씬 오래되었습니다. 이식성이 뛰어나 온라인에서 여러 해 동안 팁과 트릭을 찾을 수 있습니다. 안전한 내기이며 MPI 프로그램과 더 잘 호환됩니다.

OpenMPI가 최신 버전입니다. 휴대용은 아니지만 가장 일반적인 플랫폼을 실제로 지원합니다. 대부분의 사람들은 여러면에서, 특히 내결함성을 위해 훨씬 더 좋다고 생각하는 것 같습니다.하지만 이것을 활용하려면 MPI 표준의 일부가 아닌 특수 기능을 사용해야 할 수도 있습니다.

성능은 응용 프로그램에 따라 크게 달라집니다. 일반적인 조언을하는 것은 어렵습니다. 실행할 계산 유형, 노드 수 및 하드웨어 유형 (사용중인 네트워크 하드웨어 유형 포함)에 관한 특정 질문을 게시해야합니다.

+1

MPICH2의 내결함성 지원이 최근 크게 향상되었습니다. 이 지원에 관심이 있으시면 MPICH2 목록 ([email protected])을 우편으로 보내보십시오. –

+0

주어진 서버가 사용하고있는 MPI 버전을 어떻게 확인할 수 있습니까? 파이썬 바인딩 mpi4py를 실행하고 있지만 기본 MPI 버전이 무엇인지 알아야합니까? – 218

-1

우리는 mpich를 가장 사용하기 쉽고 문서화 된 것처럼 보였기 때문에 대안을 테스트하는 데 많은 노력을 기울이지 않았습니다. MPICH는 Windows에 배포하기위한 합리적인 도구를 제공합니다.
주요 성능 문제는 모든 노드에 동일한 기본 데이터를 제공해야한다는 것이었고 MPICH는 브로드 캐스트를 지원하지 않았기 때문에 (또는 지원하지 않았습니다.) 초기 데이터 배포는 O (n)

+4

MPICH (1993 년 개발)는 1994 년 이후로 방송을 지원했습니다. MPICH2 (MPICH의 후계자로 2000 년 개발 됨)는 개발 프로세스 초반부터 방송을 지원했습니다. 아마도 당신은'MPI_Bcast' 외에 뭔가를 의미했을까요? 어느 쪽의 구현의 증권 버젼이 현재 실행 가능한 스테이징을 지원하고 있다고 생각하지 않습니다. 실행되는 프로그램은, mpiexec에 의해 노드에 이동됩니다. –

+0

우리는 왜 우리가 방송을 할 수 없었는지 잊어 버렸습니다. 아마도 TCP 나 데이터의 크기로 실행했을 것입니다. –

+0

둘 다 MPICH의 MPI_Bcast 지원에 대한 유효한 인수가 아닙니다. – Jeff

9

입니다. Windows 및 Linux 클러스터 모두에 대해 상당히 많은 병렬 응용 프로그램을 작성 했으므로 지금 당장 MPICH2가 더 안전한 선택 일 것이라고 조언 할 수 있습니다. 다른 응답자가 언급 하듯이, 매우 성숙한 도서관입니다. 또한, 충분한 방송 지원 (MPI_Bcast 경유)이 있으며, 실제로, MPICH2는 scatter-and-gather과 같은 아주 멋진 기능들을 가지고 있습니다.

OpenMPI는 어느 정도의 성과를 거두고 있습니다. 펭귄 컴퓨팅 (그들은 큰 클러스터 벤더이고 리눅스를 좋아한다)은 사실 OpenMPI가 특정 환경에서 MPICH2를 능가하는 벤치 마크를 가지고있다.

"성능 향상"에 대한 귀하의 의견과 관련하여 내가 할 수있는 최선의 조언은 I/O 경계에 있다면 절대적으로 필요한 것 이상의 데이터를 보내지 말고 필요한 경우보다 많은 작업을하지 않는 것입니다. CPU 경계. 나는 잘못된 코드 조각을 두 번 이상 최적화하는 함정에 빠졌습니다 :) 희망에 따라 당신은 내 발자취를 따르지 않을 것입니다!

MPI 공개 토론을 검사하십시오 - 그들은 많은 좋은 info about MPI routines가 있고, Beowulf 위치에는 많은 재미있는 질문이 응답한다.

2

'Better'는 정의하기 어렵습니다 ... 'Faster'는 코드와 하드웨어로 벤치마킹하여 대답 할 수 있습니다. 집합 적 & 오프로드 최적화와 같은 것들은 정확한 하드웨어에 따라 다르며 드라이버 스택 버전과 관련하여 꽤 가변적입니다. Google은 사용자가 작업 조합을 찾을 수 있어야합니다.

최적화 작업까지는 다소 코드에 따라 다르며 하드웨어에 따라 다소 다릅니다.

코드 입출력이 저장소에 연결되어 있습니까? NFS보다 더 나은 무언가 조사가 도움이 될 수도 있고 순진한 병렬 I/O가 아닌 MPI I/O를 사용하는 것일 수도 있습니다.

네트워크에 연결되어 있으면 통신 지역을보고 통신/겹침 오버랩이 도움이 될 수 있습니다.대부분의 다양한 MPI 구현에는 일부 코드의 경우 네트워크로드를 상당히 줄일 수있는 노드 간 통신을 위해 네트워크가 아닌 로컬 공유 메모리를 사용하기위한 튜닝 옵션이 있습니다.

I/O 트래픽과 MPI 트래픽을 분리하면 특히 기가비트 이더넷 클러스터의 경우 일부 클러스터에서 큰 차이를 만들 수 있습니다.