2017-10-21 14 views
0

나는 68 코어와 4 개의 하이퍼 스레드/코어를 가진 Knights Landing 노드에서 프로그래밍 중입니다. 나는 하이브리드 MPI/OpenMP 응용 프로그램을 개발 중입니다. 내 질문에 4 개의 하이퍼 스레드가 OpenMP 스레드로 사용되도록 의도되었거나 어떻게 사용할 수 있습니까?Knights Landing의 사용 가능한 스레드

export OMP_NUM_THREADS=4 
mpirun -np 68 ./app 

아마 문제가 특정 MPI에 대한 스레드가 아니라는 것이다 :

export OMP_NUM_THREADS=1 
mpirun -np 68 ./app 

훨씬 더 빠르게 나는이 방식을 사용하는 경우에 비해 실행 : 나는 다음과 같은 방식을 사용하여 내 프로그램을 실행하면 근처에 있습니다. 그러나, 어떻게 해야할지 모르겠다.

요약하면 OpenMP 스레드로 4 개의 하이퍼 스레드/코어를 사용할 수 있습니까?

감사합니다.

+0

대다수의 응용 프로그램에서는 각 코어에서 MPI 등급을 실행하는 동안 너무 많은 스레드를 실행하지 않아도됩니다. 인텔 MPI의 기본값은 스레드를 로컬에 배치하는 것이지만, OpenMP가 2 또는 4 코어를 사용하여 단일 MPI 순위에서 이득을 표시하는지 확인한 다음 순위 및 스레드 수 조합을 시도하십시오 . – tim18

+0

친 화성 설정 방법에 대한 세부 사항은 MPI 구현에 따라 다르지만 KNL을 대상으로하는 MPI에는 해당 기능이 포함되어야합니다. – tim18

+0

코어 당 하나 이상의 쓰레드를 사용하는 어플리케이션이 모든 코어가 사용되기 전에 효과적으로 피크 아웃 될지 여부를 말할만큼 충분한 경험이 없습니다. knc에서는 mpi가 코어 메시징을 유지하고 다른 운영 OS 및 mpi를 유지할 수 있습니다. – tim18

답변

0

아마도 인텔 MPI 및 OpenMP 런타임을 사용하고 있으므로 MPI 및 OpenMP 스레드를 프로세서 코어/스레드에 고정하는 데 유용한 정보가 담긴 링크를 전달할 수 있습니다. 요즘에는 고성능을 달성하기 위해 프로세스/스레드 바인딩이 필수입니다. OS가 최선을 다하려고해도 하나의 프로세스/스레드를 하나의 코어/스레드에서 다른 위치로 이동 시키면 데이터가 전송되어야 함을 의미합니다. 그 문제에 관해서는 Running an MPI/OpenMP ProgramEnvironment Variables for Process Pinning을보십시오. 예를 들어 68 개의 MPI 등급으로 실행한다면 각 MPI 등급을 다른 코어에 배치하기 시작할 것입니다. 환경 변수 I_MPI_DEBUG (here)를 설정하여 mpirun이 요청을 존중하는지 다시 확인할 수 있습니다.