Я запускаю алгоритм полностью из памяти (без ввода-вывода), но загрузка процессора ниже 25%. Какие могут быть возможные узкие места? - PullRequest
0 голосов
/ 23 февраля 2012

Я использую однопоточную версию грубой силы известной проблемы коммивояжера, и YourKit указывает мне на то, что загрузка процессора составляет максимум 25%.

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

Моя теория заключается в том, что узким местом должно быть доступ к ОЗУ. Проблемы с блокировкой, кажется, не обсуждаются, так как алгоритм, который я использую, является однопоточным.

Я прав?

Ответы [ 2 ]

6 голосов
/ 23 февраля 2012

Продвижение комментария для ответа.

Вы говорите, что ваша программа однопоточная, но вы используете только 25% ЦП.

Это признак того, что у вас есть четырехъядерный компьютер,(или, возможно, двухъядерный с Hyper-Threading). В однопоточном режиме вы не можете использовать более 1 ядра.

То, что вы видите, нормально.


В качестве побочного эффекта такие узкие места, как блокировка и доступ к памяти, не уменьшают нагрузку на процессор напрямую.Однопоточная программа, которая тратит все время отсутствующего кэша, будет по-прежнему показывать то же 25% -ное использование (на четырехъядерном процессоре), что и программа, выполняющая реальные вычисления.

В многопоточных приложениях загрузка ЦП можетвлияет, если такие узкие места блокируют запуск других потоков или влияют на балансировку нагрузки.

4 голосов
/ 23 февраля 2012

... ЦП используется максимум на 25%.

У вас есть 4 ядра (с или без Hyperthreading)?

Что происходит: ваш единственный процесс перепрыгивает между четырьмя ядрами.Для одного ядра это дает среднее использование 25%.

Моя теория заключается в том, что узким местом должно быть доступ к ОЗУ.Проблемы с блокировкой, кажется, не обсуждаются, так как алгоритм, который я использую, является однопоточным.

Время доступа к ОЗУ не учитывается индивидуально, оно является частью времени ЦП.

...