Кажется, существует некоторое противоречие на том, делает ли количество заданий в GNU, как, предполагается, равен количеству ядер, или если можно оптимизировать время изготовления путем добавления одного дополнительного задания, которое может стояться в очереди, в то время как другие "работают".
Лучше использовать -j4
или -j5
в четырехъядерной системе?
Вы видели (или сделали), какое-либо сравнительное тестирование, которое поддерживает один или другой?
Я бы сказал, что лучше всего протестировать его самостоятельно в вашей конкретной среде и рабочей нагрузке. Похоже, слишком много переменных (размер / количество исходных файлов, доступная память, кэширование диска, расположение исходного каталога и системных заголовков на разных дисках и т. Д.) Для универсального ответа.
По моему личному опыту (на 2-ядерном MacBook Pro) -j2 значительно быстрее, чем -j1, но помимо этого (-j3, -j4 и т. Д.) Нет измеримого ускорения. Так что для моей среды «вакансии == количество ядер» кажется хорошим ответом. (YMMV)
В конечном итоге вам придется провести несколько тестов, чтобы определить наилучшее число для вашей сборки, но помните, что ЦП - не единственный ресурс это важно!
Если у вас есть сборка, которая в значительной степени зависит от диска, например, то создание большого количества заданий в многоядерной системе может быть на медленнее , так как диск должен будет выполнять дополнительную работу по перемещению головка диска вперед и назад для обслуживания всех различных заданий (в зависимости от множества факторов, например, насколько хорошо ОС обрабатывает дисковый кеш, поддержка собственной очереди команд на диске и т. д.).
Кроме того, у вас есть «настоящие» ядра по сравнению с гиперпоточностью. Вы можете или не можете получить выгоду от создания заданий для каждого гиперпотока. Опять же, чтобы узнать это, вам придется провести тест.
Не могу сказать, что я специально пробовал #cores + 1 , но в наших системах (Intel i7 940, 4 ядра с гиперпоточностью, много ОЗУ и диски VelociRaptor) и в нашей сборке (большой -scale C ++ build, которая попеременно связана с процессором и вводом-выводом) между -j4 и -j8 очень мало различий. (Возможно, на 15% лучше ... но далеко не вдвое лучше.)
Если я уезжаю на обед, я использую -j8, но если я хочу использовать свою систему для чего-то еще, пока она строится , Я буду использовать меньшее число. :)
Лично я использую make -j n
, где n — «число ядер» + 1.
Я не могу, однако, дать научное объяснение: я видел много людей, использующих одни и те же настройки, и они дали мне довольно хорошие результаты до сих пор.
В любом случае, вы должны быть осторожны, потому что некоторые цепочки просто не совместимы с опцией -jobs
и могут привести к неожиданным результатам. Если вы испытываете странные ошибки зависимостей, просто попробуйте make
без -jobs
.