![Объединение gnu parallel и mpirun: как обеспечить максимальное количество ядер?](https://rvso.com/image/164740/%D0%9E%D0%B1%D1%8A%D0%B5%D0%B4%D0%B8%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5%20gnu%20parallel%20%D0%B8%20mpirun%3A%20%D0%BA%D0%B0%D0%BA%20%D0%BE%D0%B1%D0%B5%D1%81%D0%BF%D0%B5%D1%87%D0%B8%D1%82%D1%8C%20%D0%BC%D0%B0%D0%BA%D1%81%D0%B8%D0%BC%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%B5%20%D0%BA%D0%BE%D0%BB%D0%B8%D1%87%D0%B5%D1%81%D1%82%D0%B2%D0%BE%20%D1%8F%D0%B4%D0%B5%D1%80%3F.png)
У меня есть машина с 32 ядрами, на которой я хочу запустить несколько заданий mpi с переменным числом ядер (потому что этого требует задача). Есть ли способ заставить gnu parallel знать число заданий mpi для управления, когда запускать каждое задание?
Пример: Предположим, мне нужно запустить много (200) заданий со следующим количеством заданий mpi:
NMPI=(2 2 2 4 4 4 4 6 7 10 12 24 32)
Поэтому изначально я хочу запустить только первые 8 элементов массива (поскольку их общая сумма меньше общего числа ядер, 32), а затем последовательно запустить каждое другое задание постепенно, как только каждое из первых будет завершено, не превышая предел в 32 общих одновременных задания mpi. Например, предположим, что первые 8 процессов были запущены, а первый только что завершился (для первого NMPI[0] == 2). Тогда parallel не должен запускать ничего нового, пока не освободится достаточно процессоров, поскольку следующее задание имеет NMPI[8]==7 и, следовательно, превысит максимальный предел в 32 ядра. Или есть способ для parallel улучшить запуск заданий, например, запустить сначала последнее задание mpi (32 ядра), затем последнее минус одно плюс первые три и так далее?
Заранее спасибо за ваши советы.
решение1
Измените порядок массива, начав с самого большого задания.
Может быть, вы можете использовать --load 100%
и --delay 10s
таким образом убедиться, что задание использует все ядра, прежде чем начинать следующее?