Распределить процессы по ядрам

Я стараюсь максимально сократить время выполнения программы, которое обрабатывается «основным» сценарием bash, который я написал.

Мой способ распараллеливания процесса (поскольку он полностью распараллеливаемый) заключается в следующем

for((i=0;i<${max_processes};i++)) ; do

    echo "Creating child with arg ${i}"
    bash _spawn.sh ${i} &
done 

wait

Сценарий _spawn.sh что-то делает с переданным аргументом.

Во время ожидания я наблюдал журнал htop , и я не был полностью уверен, что это правильный способ распараллеливания процедуры (хотя время ЦП сейчас меньше).

Могу ли я сделать это в другим способом?

2
задан 5 June 2020 в 18:13

1 ответ

Используя параллельную GNU:

max_processes=100
parallel bash _spawn.sh ::: $(seq 1 $max_processes)

Это запустит столько параллельных процессов, сколько у вас процессорных ядер одновременно

Проверьте https://www.gnu.org/software/parallel/


Чтобы выяснить, как он работает, N * процессорных ядер за раз, вы можете протестировать его:

parallel 'sleep 1; echo arg {1}' ::: {0..100}

Вывод:

arg 0
arg 1
arg 2
arg 3
arg 4
arg 5
arg 6
arg 7

Итак, у меня 8 процессорных ядер и 8 // процессов одновременно

2
ответ дан 19 June 2020 в 21:30

Другие вопросы по тегам:

Похожие вопросы: