GNU 'make -j' вызывает высокую загрузку процессора, а рабочий стол не отвечает - PullRequest
2 голосов
/ 16 февраля 2012

Я использую kubuntu 10.10 с 4-ядерным процессором. Когда я использую 'make -j2' для сборки проекта cpp, использование 2-х ядерных чашек становится равным 100%, среда рабочего стола перестает отвечать, а процедура сборки не выполняется.

Информация о версии:

The GNU make's version is 3.81 
gcc version 4.4.5 (Ubuntu/Linaro 4.4.4-14ubuntu5)

Как решить эту проблему? Спасибо.

Ответы [ 2 ]

2 голосов
/ 18 февраля 2012

Здесь недостаточно информации, чтобы дать вам окончательный ответ. Во-первых, не ясно, происходит ли это только при запуске с -j2. Что делать, если вы работаете без параллелизма (без -j)? Когда вы говорите «загрузка двухъядерных процессоров [достигает] 100%», что происходит на этих процессорах? Если вы запустите «top» в другом терминале, а затем начнете сборку, что будет отображаться в top?

В качестве альтернативы, если вы запускаете "make -d -j2", какие программы запускаются перед тем, как процессор переходит на 100%?

Тот факт, что рабочий стол не отвечает, также намекает на некоторую другую проблему, а не на использование процессора, поскольку у вас 4 ядра и только 2 заняты. Может быть, что-то жует всю вашу оперативную память? Система возвращается через некоторое время (показывая, что убийца OOM вмешался и что-то топнул)?

Если ничего из этого не помогает, вы можете запустить make под strace, что-то вроде "strace -f make -j2" и посмотреть, сможете ли вы выяснить, что происходит. Это сгенерирует метрическую тонну или две выходных данных, но если, когда процессор подключен, вы увидите, что что-то работает снова и снова, вы можете получить подсказку.

В основном я вижу эти возможности:

  1. Это вовсе не make, а какая-то команда make, которая просто отключает вашу систему. Вы подразумеваете, что он просто компилирует код C ++, так что это кажется маловероятным, если где-то нет ошибки.
  2. Марка повторяется бесконечно. Make перестроит свой собственный make-файл плюс любой включенный make-файл, а затем повторно выполнит сам. Если вы не очень осторожны в определении правил для перестроения включенных make-файлов, make может решить, что они всегда устарели, и перестраивать / rexec навсегда.
  3. Что-то еще

Надеюсь, что приведенные выше советы помогут вам узнать, что происходит.

0 голосов
/ 17 февраля 2012

Вы уверены, что проект подготовлен для параллельной компиляции?Может быть, предпосылки не правильно упорядочены.

Если вы строите проект, просто "завершив" компиляцию?Если доходит до конца - это целевая проблема зависимости.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...