AlexXYZ
@AlexXYZ
O Keep Clear O

Как нагрузить расчёт в однопоточной программе C++ до 90-100% на используемом ядре?

Всем привет.

Есть расчётная программа с достаточно тяжёлым расчётом, но рассчёт делается долго не по причине значительной нагрузки, а наоборот - по причине НЕЗНАЧИТЕЛЬНОЙ нагрузки на процессор - около 5-10% во время всего расчёта. Каких-то блокирующих операций вывода в консоль или в файл не выполняется. Только расчёт, алгоритм последовательный. Как можно понять в каком месте программы происходит такое "замедление" работы?

P.S.
Может ли быть такое замедление работы связано, например, с интенсивным запросом/освобождением памяти? (Это личное предположение, не обязательно учитывать его)
P.P.S.
Windows 11, C++11, -O2 включена, а если O2 выключена, то просадка ещё раз в 10-15.
  • Вопрос задан
  • 99 просмотров
Пригласить эксперта
Ответы на вопрос 1
wataru
@wataru Куратор тега C++
Разработчик на С++, экс-олимпиадник.
Во-первых, вы уверены, что у вас эти 10-15% - это загрузка ядра, а не вcего процессора? Диспетчер задач обычно показывает как 100% полную загрузку всех ядер.
Во-вторых, что у вас там за вычесления? Работа с целыми числами? Float? Всякие векторные инструкции? Точно нет никаких пауз вроде sleep()?

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

Самое вероятное место для тормозов - это вывод на экран/в файл. Если вы много отладочной информации выводите, это будет бутылочным горлышком.

Теоретически очень активное обращение к памяти тоже будет тормозить, особенно, если памяти не хватает и идет работа с файлом подкачки.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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