Почему люди рекомендуют, чтобы-j3 опция для сделала при наличии двухъядерного ЦП?

Bash и исполняемый файл Java знают, как обработать материал перенаправления. Вы хотите использовать exec для замены интерпретатора сценария, выполняющего сценарий оболочки.

#!/bin/bash
exec java -jar ....jar "$@"
18
14.10.2012, 12:58
4 ответа

Нет простого правила, которое всегда работает. Люди могли бы рекомендовать конкретному числу, потому что они экспериментировали с конкретной компиляцией на конкретной машине, и это было лучшей установкой, или потому что они следовали за некоторым обоснованием, которое может или не может иметь некоторого отношения с действительностью.

Если Вы будете наделены большим количеством RAM, то ограничивающим фактором в долгой компиляции будет процессорное время. Затем одной задачей на ЦП, плюс одна незаконченная задача для тех случайных блоков ввода-вывода, является хорошая установка. Это делает его -j3 для двухъядерного ЦП (или более точно, для машины двойного ЦП — если бы каждое ядро является гиперпоточным, который был бы 4 центральными процессорами, таким образом, -j5).

Если у Вас есть очень мало RAM, то ограничивающий фактор может быть то, что у Вас не может быть многих параллельных заданий, или иначе они будут продолжать делать друг друга выгрузить. Например, если Вы не можете удобно приспособить два экземпляра компилятора в памяти, make -j2 может уже быть медленнее, чем make. Так как это зависит от того, сколько процессов компилятора можно поместиться в RAM сразу, нет никакого способа получить общее число.

Промежуточный, может быть выгодно иметь больше заданий. Если каждый процесс компилятора является маленьким, но сборка в целом касается большого количества данных, то диск ввод-вывод может быть числом записей в блоке. В этом случае Вы захотите несколько заданий на ЦП сразу, так, чтобы было всегда одно задание с помощью каждого ЦП, в то время как другие ожидают ввода-вывода. Снова, это очень зависит от задания сборки и от доступной RAM, здесь на том, что доступно для кэша данных (существует оптимум, после которого наличие слишком многих заданий загрязняет кэш слишком много).

13
27.01.2020, 19:46
  • 1
    я не знал это, если ядра процессора являются гиперпоточными, то каждый из них количества как два. Так или иначе кажется, что мой ЦП не поддерживает Поточную обработку Hyper. –  Francesco Turco 15.10.2012, 17:27
  • 2
    я принял этот ответ. Так или иначе я принял решение придерживаться с -j2 в моей системе. Это вызвано тем, что я пытался появиться оба gcc и firefox с настройками от -j1 до -j5 (поскольку в общей сложности 10 появляются команды), и это кажется этим в то время как -j2 определенно быстрее, чем -j1, другие три настройки на одном уровне с -j2. –  Francesco Turco 19.10.2012, 15:28

Я предполагаю, что это - вид эвристики — разрешение make запускаться CPUs + 1 процессы должны удостовериться что:

  1. не было бы разрыва между рабочим процессом, которые просто закончились и рабочий yet-run — несколько как предварительное заполнение выполненной очереди.
  2. не было бы слишком больших конкурирующих процессов для введения значимых издержек с тем предварительным заполнением очереди выполнения.

Но, снова, это - руководство эвристического и FreeBSD, все еще рекомендует make -j4 для единственного ЦП.

7
27.01.2020, 19:46

Обычно существуют причины запустить больше заданий, чем количество ядер. Для C, компилирующего использующий gcc, если - канал не определяется в gcc опциях, он делает свои действия (предварительная обработка, первый показ, оптимизация и блок) в последовательности с помощью временных файлов; - канал изменяет это на использование каналов между подпроцессами. (Добавляющий - канал является значением по умолчанию, например, для FreeBSD, но не является традиционным на Linux.) Так, если Вы имеете 2 ядра и позволяете 2 задания параллельно, они проведут некоторое время в диске ввод-вывод. Рекомендация добавить 1 задание, кажется, связана с этим специфические особенности. Но получить окончательный ответ необходимо найти, кто и при добавлении эта рекомендация и спросите его:) или спрашивают в списке рассылки хинду devel.

5
27.01.2020, 19:46

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

Однако назад, когда я использовал хинду, эмпирическое правило было <#cpus>*2 + 1.

Все это зависит от того, что запаздывает Ваша курица, заварка или волшебные 8 шаров говорят Вам о диске ввод-вывод, который должен произойти и планирование Вашего текущего ядра Linux. [начните ядро этого сообщения] С моего личного опыта (-j не конкретный хинду), все между #cpus + 1 и #cpus *2 +1 урожай, прекрасные результаты [заканчивают ядро этого сообщения] и в среднем Вы едва отметите любые различия. Процессоры и ядра довольно хороши в эти дни.

НО все это изменяется когда: a) Вы на самом деле используете больше чем одно поле для компиляции (du'h) или b) разрабатывают Ваш собственный код

Более высокое -j атрибут, более вероятно, покажет ранее неизвестные зависимости.

И на ноте стороны: не идите количеством ядер, но количеством параллельных потоков центральные процессоры берут. (Hypertheading!)

2
27.01.2020, 19:46

Теги

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