2014-12-17 1 views
1

여러 노드가 포함 된 클러스터를 사용합니다. 그들 각각에는 8 개의 코어가있는 2 개의 프로세서가 있습니다. 나는 SLURM과 함께 Open MPI를 사용한다.MPI 및 2 소켓 노드 비 균일 메모리 액세스

내 테스트에 따르면 MPI 보내기/Recv 데이터 전송 속도는 다음과 같습니다. 순위 0의 MPI 프로세스와 MPI 프로세스 1 사이의 속도는 약 9GB/초이지만 프로세스 0과 프로세스 2 사이의 속도는 5GB/초입니다. 우리 프로세스가 다른 프로세서에서 실행되기 때문에 이런 일이 일어난다 고 가정합니다.

로컬이 아닌 메모리 액세스를 피하고 싶습니다. 권장 사항은 here으로 나타났습니다. 문제는 8 개의 MPI 프로세스를 모두 동일한 프로세서에서 실행할 수 있습니까? 그렇다면 어떻게해야합니까?

감사합니다.

답변

0

mpiexec에 명령 줄 옵션의 다음 세트는 1.7 전에 열기 MPI의 버전과 트릭을 수행해야합니다

--by-core --bind-to-core --report-bindings 

마지막 옵션은 각 순위 바인딩 실제 꽤-인쇄됩니다. 바인딩은 또한 공유 메모리 BTL 모듈에서 일부 NUMA 인식을 활성화합니다.

Open MPI 1.7부터는 프로세스가 사용 가능한 소켓을 통해 라운드 로빈 방식으로 배포되고 기본적으로 단일 코어에 바인딩됩니다. 위의 명령 라인을 복제하는, 하나 사용해야 설정 Slurm 함께

--map-by core --bind-to core --report-bindings 
+0

고마워, 정확히 내가 무엇을 찾고 있었는지! –

0

가능합니다. OpenMPI mpirun 맨 페이지의 프로세스 바인딩 및 Rankfiles 섹션이 유망 해 보입니다. --report-binding 옵션 세트와 함께 표시되는 옵션 중 일부를 시도해 볼 수 있습니다. 프로세스 배치를 검증하면 코드에서 기대하는 성능 향상을 얻을 수 있는지 알 수 있습니다.

0

MPI 라이브러리에 대한 hostfile/rankfile 설명서를 참조하십시오. Open MPI와 MPICH는 모두 다른 형식을 사용하지만, 둘 다 원하는 것을 제공 할 것입니다.

프로세서를 과도하게 초과 구독하면 성능 문제가 발생합니다. 8 코어 프로세서에서 8 개 이상의 랭크를 실행하면 로컬 공유 메모리를 사용함으로써 얻을 수있는 성능상의 이점을 잃게됩니다.

0

을 :

#SBATCH --ntasks=8 
#SBATCH --ntasks-per-socket=8 

가 동일한 소켓 (CPU 다이)에 할당 된 모든 코어를 가지고 제공 Slurm 올바르게 구성된다.