2014-12-11 3 views
2

OpenMPI를 사용하여 서로 다른 노드에서 실행하려는 mutlithreaded 응용 프로그램 (병렬이 아님)이 있습니다.노드에서 코어 1 개만 사용하는 OpenMPI상의 스레드 응용 프로그램

노드에서 응용 프로그램을 실행할 때 CPU 사용률이 300 %가됩니다 (맨 위 명령). 나는 이것이 3 개의 프로세서가 100 % (4 코어 노드) 사용된다는 것을 가정합니다.

OpenMPI를 사용하여 동기화 된 동일한 프로세스를 실행할 때 CPU 사용률이 100 % 밖에되지 않습니다. 이는 모든 스레드가 노드의 CPU 1 개에 국한된다는 의미입니다.

노드에서 예약 된 1 개의 작업에 대해 노드의 모든 CPU를 사용하도록 프로그램을 만들 수있는 방법이 있습니까?

OMP_NUM_THREADS를 보았지만 도움이되지 않습니다. OpenMPI가 자체 스레드를 생성하여 작업을 창출 할 때 사용되는 것 같습니다.

+0

너무 많은 문제없이 MPI 응용 프로그램 내에서 openMP 스레드를 생성 할 수 있어야합니다. OMP_NUM_THREADS 시도를 언급했지만 코드 내에서'omp_set_num_threads (4)'를 사용해 보았습니다. MPI 환경이 OMP_NUM_THREADS (그냥 추측)를 망칠 수 있습니다. –

답변

2

각 프로세스의 선호도는 --cpus-per-proc를 사용하여 설정할 수 있으며 문제를 해결했습니다.

하지만 :

Command line options: 
    Deprecated: --cpus-per-proc, -cpus-per-proc, --cpus-per-rank, -cpus-per-rank 
    Replacement: --map-by <obj>:PE=N, default <obj>=NUMA 

나는 같은 기능

--map-by socket:pe=4 
을 얻기 위해 다음과 같은 사용했다 : --cpus 당 PROC은 (1.8.3을 사용) 사용되지 않으며 나는 다음과 같은 메시지를 받게됩니다
+0

Open MPI 1.8은 기본적으로 프로세스 바인딩을 도입했습니다. 이전 버전에서는 바인딩을 명시 적으로 활성화해야했습니다. 나는 1.8과 같은 주류 OMPI 버전이되어 스택 오버플로가 시작되기를 점점 더 기대하고 있습니다. –