MPI를 통해 자체적으로 실행되는 프로그램 내에서 OpenMP 병렬화를 사용하는 라이브러리를 호출하려고합니다. 단일 프로세스를 사용하여 MPI 프로그램을 실행 한 다음 OpenMP 라이브러리를 호출 할 때 내 컴퓨터의 코어 수에 해당하는 7 개의 추가 스레드가 올바르게 생성되고 작업이 병렬로 수행됩니다 . 대신에 2 개의 프로세스에서 MPI 프로그램을 실행하고 각 프로세스가 OpenMP 프로그램을 호출하도록하면 각 프로세스가 이전과 같이 작업하는 대신 스레드를 생성하므로 계산 시간이 오래 걸릴 수 있습니다.MPI 프로그램 내에서 OpenMP 프로그램 시작
다른 프로세스가 대기하는 동안에 만 MPI 마스터 프로세스가 OpenMP 라이브러리를 호출하도록 시도했지만이 프로세스 (실제 코어)는 OpenMP 계산에 전혀 참여하지 않습니다.
MPI 프로그램에 OpenMP 프로그램을 공동으로 실행한다고 알려야합니까? 더 복잡한 것은 다중 노드가있는 클러스터에서 MPI 프로그램을 실행한다는 것입니다. MPI 마스터 프로세스가 포함 된 노드에서만 OpenMP 프로그램을 시작하는 것이 허용됩니다.
구체적으로 말씀 드리면, 제 MPI 프로그램은 Cython으로 작성되었으며 mpi4py를 사용합니다. 필자는 MPI를 MPI 구현으로 사용하지만 이것이 중요하지 않기를 바랍니다. OpenMP 프로그램은 C로 작성되었으며 Cython 래퍼를 통해 호출합니다.
귀하의 질문에 혼란이 있습니다. 제목은 "OpenMP 프로그램"을 언급하지만 텍스트에서 OpenMP를 사용하는 라이브러리 함수를 호출하는 것처럼 보입니다. 두 가지 모두 매우 다른 것으로 명확히 설명하십시오. –
MPI를 선택하는 것이 중요합니다. MPI (Linux의 경우)의 가장 널리 사용되는 선택 사항은 OpenMP 스레드를 코어를 분리하여 고정하는 자동 방법을 제공하기 때문입니다. 그렇지 않으면 선호도를 설정하는 스크립트를 작성하고 선호도를 지원하는 OpenMP를 사용하지 않는 한 OpenMP 프로세스가 별도의 노드에서 실행되어야합니다. – tim18
@HristoIliev 나는 OpenMP를 사용하는 라이브러리를 사용하고 있다고 생각한다. –