GNU делает: количество заданий должно равняться количеству ядер процессора в системе?

Кажется, существует некоторое противоречие на том, делает ли количество заданий в GNU, как, предполагается, равен количеству ядер, или если можно оптимизировать время изготовления путем добавления одного дополнительного задания, которое может стояться в очереди, в то время как другие "работают".

Лучше использовать -j4 или -j5 в четырехъядерной системе?

Вы видели (или сделали), какое-либо сравнительное тестирование, которое поддерживает один или другой?

80
задан Smi 2 July 2016 в 21:35
поделиться

3 ответа

Я бы сказал, что лучше всего протестировать его самостоятельно в вашей конкретной среде и рабочей нагрузке. Похоже, слишком много переменных (размер / количество исходных файлов, доступная память, кэширование диска, расположение исходного каталога и системных заголовков на разных дисках и т. Д.) Для универсального ответа.

По моему личному опыту (на 2-ядерном MacBook Pro) -j2 значительно быстрее, чем -j1, но помимо этого (-j3, -j4 и т. Д.) Нет измеримого ускорения. Так что для моей среды «вакансии == количество ядер» кажется хорошим ответом. (YMMV)

52
ответ дан 24 November 2019 в 09:55
поделиться

В конечном итоге вам придется провести несколько тестов, чтобы определить наилучшее число для вашей сборки, но помните, что ЦП - не единственный ресурс это важно!

Если у вас есть сборка, которая в значительной степени зависит от диска, например, то создание большого количества заданий в многоядерной системе может быть на медленнее , так как диск должен будет выполнять дополнительную работу по перемещению головка диска вперед и назад для обслуживания всех различных заданий (в зависимости от множества факторов, например, насколько хорошо ОС обрабатывает дисковый кеш, поддержка собственной очереди команд на диске и т. д.).

Кроме того, у вас есть «настоящие» ядра по сравнению с гиперпоточностью. Вы можете или не можете получить выгоду от создания заданий для каждого гиперпотока. Опять же, чтобы узнать это, вам придется провести тест.

Не могу сказать, что я специально пробовал #cores + 1 , но в наших системах (Intel i7 940, 4 ядра с гиперпоточностью, много ОЗУ и диски VelociRaptor) и в нашей сборке (большой -scale C ++ build, которая попеременно связана с процессором и вводом-выводом) между -j4 и -j8 очень мало различий. (Возможно, на 15% лучше ... но далеко не вдвое лучше.)

Если я уезжаю на обед, я использую -j8, но если я хочу использовать свою систему для чего-то еще, пока она строится , Я буду использовать меньшее число. :)

7
ответ дан 24 November 2019 в 09:55
поделиться

Лично я использую make -j n, где n — «число ядер» + 1.

Я не могу, однако, дать научное объяснение: я видел много людей, использующих одни и те же настройки, и они дали мне довольно хорошие результаты до сих пор.

В любом случае, вы должны быть осторожны, потому что некоторые цепочки просто не совместимы с опцией -jobs и могут привести к неожиданным результатам. Если вы испытываете странные ошибки зависимостей, просто попробуйте make без -jobs.

30
ответ дан 24 November 2019 в 09:55
поделиться
Другие вопросы по тегам:

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