Я пытаюсь отладить проблему производительности в простой тестовой программе, но профилирование программы (которая выполняется ~ 16 секунд) приводит к трассировке (рисунок ниже), где учитывается только ~ 200 мс.
Обратите внимание также на результаты профилировщика, что светло-голубые столбцы «процента использования» вдоль оси x профилировщика одинаково разнесены на десятки или сотни миллисекунд друг от друга и почти все находятся примерно на 10%.
Код создает вектор и добавляет к нему целые числа в узком цикле. Предполагается, что программа является базовым эталоном для результатов экспериментального компилятора, который использует LLVM для выполнения компиляции.
macOS версия: 10.14.4
Версия инструментов: 9.2
Другие вещи, которые я профилировал
Я использовал инструмент System Trace для получения информации о переключениях контекста и времени, потраченном на системные вызовы. По какой-то непонятной причине программа запускается всего 10 секунд (быстрее, чем при профилировании , а не ) при запуске под System Trace) во втором наборе результатов профилировщика.
Однако в результатах ничего не показалось слишком неожиданным - поток программы провел 9,82 секунды в состоянии «Выполнение» и провел ~ 28 мс внутри системных вызовов.
macOS Instruments SystemПереключение контекста трассировки
Выполнение системных вызовов macOS Instruments
Мысли
Мои предположения заключались в том, что, возможно, ввод-вывод или какая-то другая синхронизация потока могут вызывать прерывистую блокировку потока, но простая программа тестирования не содержит ни одной из этих вещей.
Предложения других вещей дляпрофиль очень приветствуется;Я немного озадачен этой проблемой, потому что я никогда не видел программы с неучтенным временем «фантома», подобным этому.