Я рассматриваю, какая программа запуска процессов, от mpirun
до srun
, лучше оптимизирует ресурсы. Допустим, у одного вычислительного узла в кластере всего 16 ядер, и у меня есть задание, которое я хочу выполнить, используя 10 процессов.
Если я запущу его с помощью
mpirun -n10
, сможет ли он определить, что в моем запросе меньше ядер, чем доступно на каждом узле, и автоматически назначит все 10 ядер из одного узла? В отличие отsrun
, в котором-N <number>
указывает количество узлов,mpirun
, похоже, не имеет такого флага. Я думаю, что запуск всех процессов в одном узле может сократить время связи.В приведенном выше примере предположим, что каждый узел имеет 2 процессора, а ядра распределены поровну, поэтому 8 ядер на процессор и в спецификации указано, что на каждый узел приходится 48 ГБ памяти (или 24 ГБ на процессор или 3 ГБ на ядро). И предположим, что каждому порожденному процессу в моей работе требуется 2,5 ГБ, поэтому все процессы будут использовать 25 ГБ. Когда говорят, что программа превышает предел памяти, это когда общая требуемая память:
- exceeds per node memory (hence my program is good, 25 GB < 48 GB), or
- превышает объем памяти ЦП (следовательно, моя программа плохая, 25 ГБ ›24 ГБ), или
когда объем памяти на процесс превышает объем памяти ядра (следовательно, моя программа хороша, 2,5 ГБ ‹3 ГБ)?