당신의 모든 MPI 프로세스에 대한 "OMP_NUM_THREADS"로 설정 지구 환경을 가지고있다. 이 설정은 모두 동일하며, 다양한 mpi 프로세스에 대해 서로 다른 스레드 번호를 갖기를 원하므로 전역 변수로 설정하면 안됩니다.
두 가지 변형을 제안 할 수 있습니다. 먼저 -x
옵션을 삭제하고 "./program_script.sh
"을 blue 스크립트 "./program_script.sh
"으로 바꿉니다. mpirun에서 프로세스 ID를 얻습니다 (mpirun -np 2 env
을 사용하여 프로세스 ID가있는 변수의 이름을 찾습니다). 올바른 값 "OMP_NUM_THREADS"env를 설정합니다. 이 ID로 mpi 프로세스를 시작한 다음 ./program
을 시작하십시오.
이 이 이
올바른 CPU binding in your mpirun을 설정하는 것을 잊지 마세요 이 (--report-bindings
확인 이 설정
MPI_Comm_size(MPI_COMM_WORLD,&nproc);
MPI_Comm_rank(MPI_COMM_WORLD,&rank);
if(rank == 0) {
omp_set_num_threads(2);
}
if(rank == 1) {
omp_set_num_threads(6);
}
:
두 번째 변종은 -x
옵션을 삭제하고 OpenMP의 표준의 표준 omp_set_num_threads()
전화를 사용하여 MPI 프로세스에서 직접 스레드에게 수를 설정하는 것입니다 --bind-to
또는 rankfile).
그리고 세 번째 변형 (스레드 수가 CPU 코어 수보다 작거나 같은 경우)은 -x
옵션을 삭제하고 mpirun에서 올바른 CPU 바인딩을 설정하기 만하면됩니다. 첫 번째 MPI 프로세스 및 코어 2, 3,4,5,6,8 번째 MPI 과정. 대부분의 OpenMP 라이브러리는 허용 된 CPU 세트를 인식하고 기본값은 one thread per CPU으로 시작합니다.
컴퓨팅 시스템의 구성은 노드 수, 각 노드의 CPU 코어 수입니다. mpirun 줄에서 두 인수 (ncores와 nthreads)를 변경할 수 있습니다. 당신의 MPI 프로세스 (id 0)가 2 개의 쓰레드를 원하고 다른 MPI 프로세스 (id 1)가 6 개의 쓰레드를 원할 경우, 전역 환경 변수를 사용하지 말고, ['omp_set_num_threads' function] (https : // gcc .gnu.org/onlinedocs/libgomp/omp_005fset_005fnum_005fthreads.html # omp_005fset_005fnum_005fthreads) – osgx