Как проверить, связано ли приложение cpu-bound или связанное с памятью?

У меня есть приложение, которое работает с несколькими вычислительными процессорами, но в основном доступ к памяти (выделение объектов и их перемещение, несколько числовых или арифметических кодов).

Как я могу измерить долю времени, которое я трачу в задержках доступа к памяти (из-за промахов в кеше), когда CPU не работает?

Я должен заметить, что приложение работает на гостевом компьютере Hyper-V; Я не уверен, что это создаст какие-либо трудности, но может быть.

Ответ 1

Вы всегда можете profile свое приложение, чтобы увидеть, где оно проводит большую часть времени.

Таким образом вы можете многое узнать о поведении вашего приложения и шаблонах доступа к данным.

Если вы используете Linux, у вас есть широкий спектр доступных инструментов для профилирования, таких как:

РЕДАКТИРОВАТЬ:

Для более точного измерения производительности процессора и доступа к памяти вы также можете попробовать анализатор производительности AMD CodeAnalyst. Вот инструкции о том, как использовать его с процессорами Intel, хотя я сам не пробовал.

Еще один полезный инструмент - утилита Intel Performance Tuning.

Ответ 2

Если у вас нет задержек, встроенных в систему, просто запустите приложение некоторое время на выделенной машине и проверьте счетчики CPU. Если приложение использует 100% процессорного ядра, к которому он имеет доступ, он связан с CPU. В противном случае он проводит время на других вещах, таких как выделение памяти и IO.