내 프로그램은 MPI + pthreads를 사용합니다. 여기서 n-1 MPI 프로세스는 순수 MPI 코드이고 단 하나의 MPI 프로세스는 pthreads를 사용합니다. 마지막 프로세스에는 2 개의 스레드 (메인 스레드 및 pthread) 만 있습니다. 이 프로그램을 실행하려는 HPC 클러스터가 12 개의 코어를 가진 컴퓨팅 노드로 구성되어 있다고 가정합니다. 하드웨어 사용을 최대화하기 위해 배치 스크립트를 어떻게 작성해야합니까?다른 하나의 MPI 프로세스가 두 개 이상의 스레드를 가지고있을 때 LSF 용 일괄 처리 스크립트
다음은 필자가 작성한 배치 스크립트입니다. 마지막 OMP_NUM_THREADS = 2를 사용합니다. 왜냐하면 마지막 MPI 프로세스에는 2 개의 스레드가 있고 다른 스레드에도 각각 2 개의 스레드가 있다고 가정해야하기 때문입니다.
그런 다음 노드 당 6 개의 MPI 프로세스를 할당하므로 각 노드는 모든 MPI 프로세스가 하나의 스레드를 가지고 있음에도 불구하고 각 스레드가 6xOMP_NUM_THREADS = 12 (= 각 노드의 코어 수) 스레드를 실행할 수 있습니다.
#BSUB -J LOOP.N200.L1000_SIMPLE_THREAD
#BSUB -o LOOP.%J
#BSUB -W 00:10
#BSUB -M 1024
#BSUB -N
#BSUB -a openmpi
#BSUB -n 20
#BSUB -m xxx
#BSUB -R "span[ptile=6]"
#BSUB -x
export OMP_NUM_THREADS=2
어떻게하면 더 좋은 스크립트를 작성할 수 있습니까?
고마워요 !!!. 이는 마지막 순위의 두 스레드가 두 번째 계산 노드의 사용 가능한 코어 중 두 개에서 실행된다는 것을 의미합니까? 두 스레드에 대한 추가 정보가 없으면 LSF가 동일한 CPU 코어에서이 두 스레드를 예약 할 수 있습니까? –
LSF는 일반적으로 코어가 아닌 슬롯에 스케줄을 지정합니다. 바인딩 (프로세스 스케줄링을 특정 논리 CPU로 제한)은 일반적으로 MPI 구현 또는 OpenMP 런타임 (또는 하이브리드 프로그램의 경우 모두)에 의해 수행됩니다. –