Когда я (пере) собираю большие системы на настольном компьютере / ноутбуке, я советую make
использовать более одного потока для увеличения скорости компиляции, например:
$ make -j$[ $K * $C ]
Где $C
должен указать число ядер (которые мы можем предположить , чтобы быть числом с одной цифрой) машина имеет, а $K
то , что я меняться от 2
до 4
, в зависимости от настроения.
Так, например, я мог бы сказать, make -j12
если у меня есть 4 ядра, указывая make
на использование до 12 потоков.
Мое объяснение состоит в том, что если я использую только $C
потоки, ядра будут простаивать, пока процессы заняты извлечением данных с дисков. Но если я не ограничу количество потоков (то есть make -j
), я рискую тратить время на переключение контекста, нехватку памяти или что-то еще хуже . Предположим, у машины есть $M
гигабайты памяти (где $M
порядка 10).
Поэтому мне было интересно, существует ли установленная стратегия выбора наиболее эффективного числа потоков для запуска.
Ответы:
Я провел серию тестов, собирая llvm (в режиме отладки + подтверждения) на машине с двумя ядрами и 8 ГБ оперативной памяти:
Как ни странно, кажется, что он поднимается до 10, а затем внезапно падает ниже времени, которое требуется для построения с двумя заданиями (одно задание занимает примерно двойное время, не включенное в график).
Минимум вроде бы
7*$cores
в этом случае.источник
Я использую Gentoo Linux (дистрибутив на основе исходного кода), и по своему опыту я могу сказать, что (с более или менее новым оборудованием)
n*2 + x
- лучшее значение. Позвольте мне объяснить это:n*2
: Даже у более медленных процессоров достаточно мощности для выполнения 2 задач одновременно. большинство задач компиляции выполняются очень быстро.+x
это число зависит от вашей системы (в основном, от памяти и диска). Если у вас достаточно оперативной памяти и быстрого диска, установитеx=n
. Однако это зависит от исходного кода (Open Office, я смотрю на вас!) И используемого языка (компиляция C / C ++ требует очень много памяти).Однако вам нужно выполнить несколько тестов с некоторыми
-j
значениями, чтобы получить лучшее число. Также попробуйте распараллелить другие этапы процесса сборки: распаковка, запускconfigure
и так далее.источник