2015-01-23 3 views
1

마스터 프로세스와 여러 작업자 프로세스를 사용하는 MPI 프로그램이 있습니다. 작업 프로세스가 다른 노드에서 실행되는 동안 단일 계산 노드에서만 마스터 프로세스를 실행하고 싶습니다. 작업자 프로세스는 소켓으로 할당해야합니다 (예 : --map-by-socket 옵션으로 수행). 마스터 프로세스와 작업 프로세스를 다른 노드에 할당하거나 수동으로 할당하려면 옵션을 사용할 수 있습니까?MPI 프로세스를 노드에 할당

감사

답변

2

바인딩과 동시에 호스트에 순위 지정은 순위 파일을 사용하여 가능합니다. 대신 slots=0:0-3의 오래된 버전의

rank 0=host1 slots=0-7 
rank 1=host2 slots=0:0-3 
rank 2=host2 slots=1:0-3 

slots=1:0-3 하나 slots=0-3를 사용해야합니다 : 귀하의 경우, 각 노드는 두 개의 4 코어 CPU를 가지고 가정, 이런 일이 (오픈 MPI 1.7 및 최신 용)을 수행해야합니다 및 slots=4-7 (코어가 선형으로 번호가 매겨 졌다고 가정 할 경우). 그런 다음 순위 파일은 --rankfile 옵션을 통해 mpiexec에 제공됩니다. 그것은 hostfile을 대체합니다.

또 다른 옵션은 MIMD 시작입니다. 이 경우 MPI 작업을 여러 부분으로 나눠서 각 부분에 다른 배포 및 바인딩 인수를 제공 할 수 있습니다.

mpiexec -H host1 -n 1 --bind-to none ./program : \ 
     -H host2 -n 2 --bind-to socket --map-by socket ./program 
+0

작업을 클러스터에 제출합니다. node_file을 구문 분석해야합니까? 아니면 호스트 이름을 찾는 더 쉬운 방법이 있습니까? – fc67

+0

클러스터에는 어떤 배치 시스템이 있습니까? –

+0

클러스터에 LSF가 있습니다. – fc67

2

내가이 일을 알고있는 가장 쉬운 방법은 OpenMPI 실행의 --hostfile 옵션을 사용하는 것입니다.

적절한 배치 시스템을 사용하고 있다면 간단한 파일 또는 환경 변수에 호스트 및 슬롯 목록이 있어야하며이를 호스트 파일로 구문 분석 할 수 있습니다.

응용 프로그램을 "손으로"실행하면 사용자가 직접 그러한 목록을 생성 할 수 있습니다.