Как проверить, связано ли приложение с процессором или с памятью?
У меня есть приложение, которое выполняет немного вычислительной работы ЦП, но в основном обращается к памяти (выделяя объекты и перемещая их, мало числового или арифметического кода).
Как я могу измерить долю времени, которое я трачу на задержки доступа к памяти (из-за нехватки кэша), когда процессор простаивает?
Я должен отметить, что приложение работает на гостевой Hyper-V; Я не уверен, что это создаст какие-либо трудности, но это возможно.
2 ответа
Вы могли бы всегда profile
ваше приложение, чтобы увидеть, где оно проводит большую часть времени.
Таким образом вы можете многое узнать о поведении вашего приложения и шаблонах доступа к данным.
Если вы используете Linux, у вас есть широкий спектр доступных инструментов для профилирования, таких как:
РЕДАКТИРОВАТЬ:
Для более точного измерения производительности процессора и доступа к памяти вы также можете попробовать анализатор производительности AMD CodeAnalyst. Вот инструкции о том, как использовать его с процессорами Intel, хотя я сам не пробовал.
Еще один полезный инструмент - утилита Intel Performance Tuning.
Если в систему не встроена задержка, просто запустите приложение на некоторое время на выделенном компьютере и проверьте счетчики ЦП. Если приложение использует 100% ядра ЦП, к которому оно имеет доступ, оно привязано к ЦП. В противном случае он тратит время на другие вещи, такие как распределение памяти и операции ввода-вывода.