소켓을 사용하여 C로 작성된 간단한 클라이언트 - 서버 프로그램이 있습니다. 서버는 각 요청에 대해 새로운 pthread를 엽니 다. 새롭게 열릴 때마다 CPU 집중 작업 (행렬 곱셈)을 수행합니다.MPI : 단일 MPI 프로세스에서 프로세서가 100 %까지 올라 가지 않습니다.
2 개의 물리적 코어와 4 개의 논리 프로세서가있는 CPU가 있습니다.
4 개의 클라이언트를 실행하면 서버는 4 개의 스레드를 열고 각 스레드는 논리 프로세서에 할당되며 CPU는 100 % (사용량)로 이동합니다.
5 초 후에 클라이언트를 하나씩 실행하면 CPU가 25 % (클라이언트 한 명)에서 50 % (두 명의 클라이언트)에서 75 % (세 명의 클라이언트)까지 어떻게 이동하는지 매우 명확하게 알 수 있습니다. 마지막으로 100 % (4 클라이언트). 꽤 정상적인 행동입니다.
전체 서버 코드을 MPI 프로세스 (단 하나의 MPI 프로세스)에 삽입하면 CPU가 시작한 클라이언트의 수와 관계없이 CPU가 50 % 이상을 올리지 않습니다.
왜 이런 일이 발생합니까?
는
아마도 MPI 실행 프로그램이 실행 된 이진 파일의 CPU 세트를 제한 할 수 있습니다. MPI 매뉴얼 인'sched_getaffinity'로 확인하십시오. MPI 구현, 버전, MPI 바이너리 및 OS를 시작하는 방법에 대한 자세한 도움말을 보려면 ... – Zulan
MPI 구현이 Open MPI 인 경우'--bind-to none '을'mpiexec' /'mpirun'에 전달하십시오. . –
작업이 고정되어 있는지 잘 모르겠 으면 간단히 'mpirun ... grep Cpus_allowed_list/proc/self/status' –