Я хотел бы понять, как работает задание GROMACS, запущенное на моем кластере SGI с PBS / Torque с использованием гибридного распараллеливания MPI / OpenMPI.
Кластер поддерживает гиперпоточность, и каждый узел имеет 16 физических ядер (32 логических).
Что я ожидаю: используйте 4 узла и все доступные процессоры каждого узла (то есть 16 физических и 32 потока каждый, что составляет 64 ядра и 128 потоков, если я не ошибаюсь).
Я выполнил тестовую работу, которая должна оправдать мои ожидания. Вот строки, которые я использую для запроса ресурсов в скрипте PBS:
...
#PBS -l select=4:ncpus=16:mpiprocs=16
#PBS -l place=scatter:excl
nprocs=$(cat $PBS_NODEFILE|wc -l)
...
И это команда, которую я использую для запуска задания Gromacs в том же скрипте:
mpiexec_mpt -n $nprocs mdrun_mpi -v -s test.tpr -deffnm test
Я ожидаю, как написано в документации Gromacs, что он автоматически угадывает количество потоков openmp. Что должно быть 2, так как на ядро приходится 2 потока, верно?
В результате Gromacs дает этот подробный вывод перед фактическим вычислением, и именно здесь у меня возникают проблемы с пониманием того, что происходит:
Note: 32 CPUs configured, but only 16 of them are online.
Number of logical cores detected (16) does not match the number reported by OpenMP (1).
Consider setting the launch configuration manually!
Running on 4 nodes with total 64 cores, 64 logical cores
Cores per node: 16
Logical cores per node: 16
Hardware detected on host r1i0n13 (the node of MPI rank 0):
CPU info:
Vendor: GenuineIntel
Brand: Intel(R) Xeon(R) CPU E5-2670 0 @ 2.60GHz
SIMD instructions most likely to fit this hardware: AVX_256
SIMD instructions selected at GROMACS compile time: AVX_256
Reading file test-515-short.tpr, VERSION 5.1.1 (single precision)
Changing nstlist from 10 to 25, rlist from 1.2 to 1.222
The number of OpenMP threads was set by environment variable OMP_NUM_THREADS to 1
Will use 56 particle-particle and 8 PME only ranks
This is a guess, check the performance at the end of the log file
Using 64 MPI processes
Using 1 OpenMP thread per MPI process
1) 16/32 CPU находятся в сети / узел ... только?
2) обнаружено логических ядер 16! = 32, почему? А openmp сообщает только 1?
3) Я ожидал бы 64 процесса MPI и 2 потока openmp на процесс MPI, разве это не логично?
Хорошо, я просто понял, почему это произошло ... предыдущие коллеги установили SGI MPT, который используется для запуска заданий GROMACS, но этот инструмент конфликтует с openMP, так что это либо одно, либо другое!